位置: IT常识 - 正文

android 自定义view(Android 自定义view面试题)

编辑:rootadmin

android怎么自定义view呢?不知道的小伙伴来看看小编今天的分享吧!

613/auto1686643537android 自定义view(Android 自定义view面试题)

android可以通过组合控件来实现自定义view。组合控件就是将系统原有的控件进行组合,构成一个新的控件。这种方式下,不需要开发者自己去绘制图上显示的内容,也不需要开发者重写onMeasure,onLayout,onDraw方法来实现测量、布局以及draw流程。

具体操作:

1、定义标题栏布局文件

定义标题栏的布局文件custom_title_view.xml,将返回按钮和标题文本进行组合。这一步用于确定标题栏的样子,代码如下所示:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="@android:color/holo_orange_light">

<Button

android:id="@+id/btn_left"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerVertical="true"

android:layout_marginLeft="5dp"

android:text="Back"

android:textColor="@android:color/white" />

<TextView

android:id="@+id/title_tv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:text="Title"

android:textColor="@android:color/white"

android:textSize="20sp" />

</RelativeLayout>

2、根据给定布局实现自定义View

public class CustomTitleView extends FrameLayout implements View.OnClickListener {

private View.OnClickListener mLeftOnClickListener;

private Button mBackBtn;

private TextView mTittleView;

public CustomTitleView(@NonNull Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

LayoutInflater.from(context).inflate(R.layout.custom_title_view, this);

mBackBtn = findViewById(R.id.btn_left);

mBackBtn.setOnClickListener(this);

mTittleView = findViewById(R.id.title_tv);

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btn_left:

if (mLeftOnClickListener != null) {

mLeftOnClickListener.onClick(v);

}

break;

}

}

public void setLeftOnClickListener(View.OnClickListener leftOnClickListener) {

mLeftOnClickListener = leftOnClickListener;

}

public void setTittle(String title){

mTittleView.setText(title);

}

}

说明:

(1)代码中对外提供了两个接口,一是动态设置标题,二是使用者可以自定义返回按钮的点击事件。

(2)CustomTitleView的构造函数,要选择两个参数的,选择其它参数的构造函数会报错。这一点是笔者开发机测试的结果,暂时不清楚是不是所有手机上都是这样。

(3)这里是继承的FrameLayout,但是继承LinearLayout,RelativeLayout等系统布局控件都可以。之所以要继承这些系统现成的ViewGroup,是因为这样可以不用再重写onMeasure,onLayout等,这样省事很多。由于这里是一个布局控件,要用LayoutInflater来填充,所以需要继承ViewGroup,如果继承View的直接子类,编译会不通过。所以,CustomTitleView自己就是一个容器,完全可以当成容器使用,此时CustomTitleView自身的内容会和其作为父布局添加的子控件,效果会叠加,具体的叠加效果是根据继承的容器特性决定的。

3、在Activity的布局文件中添加CustomTitleView。

在Activity的布局文件activity_custom_view_compose_demo.xml中,像使用系统控件一样使用CustomTitleView即可。CustomTitleView自己就是继承的现成的系统布局,所以它们拥有的属性特性,CustomTitleView一样拥有。

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent">

<com.example.demos.customviewdemo.CustomTitleView

android:id="@+id/customview_title"

android:layout_width="match_parent"

android:layout_height="wrap_content">

</com.example.demos.customviewdemo.CustomTitleView>

</RelativeLayout>

4、在Activity中操作CustomTitleView,代码如下:

1 public class CustomViewComposeDemoActivity extends AppCompatActivity { 2 3 private CustomTitleView mCustomTitleView; 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_custom_view_compose_demo); 8 mCustomTitleView = findViewById(R.id.customview_title); 9 mCustomTitleView.setTittle("This is Title");10 mCustomTitleView.setLeftOnClickListener(new View.OnClickListener() {11 @Override12 public void onClick(View v) {13 finish();14 }15 });16 17 }18 }

在第8行中,获取到CustomTitleView实例,第9行设置标题文字,第10行自定义“Back”按钮点击事件。

5、效果图

按照如上的4步,就通过组合控件完成了一个比较简单的自定义标题栏。

以上就是小编今天的分享了,希望可以帮助到大家。

本文链接地址:https://www.jiuchutong.com/zhishi/2702.html 转载请保留说明!

上一篇:vue保留两位小数(vue保留两位小数的函数)

下一篇:ifnull函数(ifnull函数用法)

  • 弱势市场如何打造无敌营销战队(弱势有效市场基本面分析)

    弱势市场如何打造无敌营销战队(弱势有效市场基本面分析)

  • 电脑怎样截屏保存到桌面(电脑怎样截屏保存图片)

    电脑怎样截屏保存到桌面(电脑怎样截屏保存图片)

  • 小米ai通话如何使用(小米ai通话如何开启)

    小米ai通话如何使用(小米ai通话如何开启)

  • 快手哪个版本可以看别人收藏的视频(快手哪个版本可以发视频赚钱)

    快手哪个版本可以看别人收藏的视频(快手哪个版本可以发视频赚钱)

  • 苹果11promax电量百分比怎么设置(苹果11promax电量能用多久)

    苹果11promax电量百分比怎么设置(苹果11promax电量能用多久)

  • iPhone11建议升级吗		(iPhone11建议升级16.1吗)

    iPhone11建议升级吗 (iPhone11建议升级16.1吗)

  • 小米8什么时候上市的(小米8什么时候出的上市的)

    小米8什么时候上市的(小米8什么时候出的上市的)

  • 电信5g套餐可以取消吗(电信5G套餐可以领会员吗)

    电信5g套餐可以取消吗(电信5G套餐可以领会员吗)

  • honor v10是什么型号(荣耀v10是什么机身)

    honor v10是什么型号(荣耀v10是什么机身)

  • 华为nova5pro隐藏应用怎么设置(华为nova5pro隐藏相册怎么打开)

    华为nova5pro隐藏应用怎么设置(华为nova5pro隐藏相册怎么打开)

  • 短信一点开就退出了什么意思(为什么打开短信以后信息就直接退出)

    短信一点开就退出了什么意思(为什么打开短信以后信息就直接退出)

  • med aloo什么型号(med一al00是什么型号手机)

    med aloo什么型号(med一al00是什么型号手机)

  • 二手苹果无锁是什么意思(二手苹果无锁是新机吗)

    二手苹果无锁是什么意思(二手苹果无锁是新机吗)

  • 手机冷色暖色哪个护眼(手机冷色暖色哪个好)

    手机冷色暖色哪个护眼(手机冷色暖色哪个好)

  • 快手戳一下对方能看见吗(快手戳一下对方收到什么提示)

    快手戳一下对方能看见吗(快手戳一下对方收到什么提示)

  • win10怎么开启杀毒(开启win10杀毒软件)

    win10怎么开启杀毒(开启win10杀毒软件)

  • 怎么把breeno关闭(如果关闭breeno)

    怎么把breeno关闭(如果关闭breeno)

  • 网上邻居属于附件吗(网上邻居是按照什么模式工作的)

    网上邻居属于附件吗(网上邻居是按照什么模式工作的)

  • 手机视频模糊怎么调(手机视频模糊怎么变清晰度)

    手机视频模糊怎么调(手机视频模糊怎么变清晰度)

  • 什么是计算机指令的集合(到底什么是计算机)

    什么是计算机指令的集合(到底什么是计算机)

  • 拼多多刮红包0.1的原因(拼多多红包最后0.01刮卡)

    拼多多刮红包0.1的原因(拼多多红包最后0.01刮卡)

  • 快手看过的作品在哪找(快手看过的作品找不到了)

    快手看过的作品在哪找(快手看过的作品找不到了)

  • 面对面快传要流量吗(什么是面对面快传)

    面对面快传要流量吗(什么是面对面快传)

  • Win10系统更新失败怎么办?(win10更新失败怎么回事)

    Win10系统更新失败怎么办?(win10更新失败怎么回事)

  • 东内格罗斯省沿海的鹦嘴鱼,菲律宾 (© Tim Fitzharris/Minden Pictures)(内格罗斯岛)

    东内格罗斯省沿海的鹦嘴鱼,菲律宾 (© Tim Fitzharris/Minden Pictures)(内格罗斯岛)

  • 金税盘技术维护费
  • 个税退还会计分录
  • 商誉 会计
  • 物业公司广告费返还会计分录
  • 工程施工和工程结算对冲有差额的会计分录
  • 报销必须是公司吗
  • 社保次月什么时候到账
  • 一般纳税人转登记为小规模纳税人
  • 公司存款利率
  • 租赁行业的增值税税率
  • 免税的苗木发票抵扣税费怎么算
  • 纳税调整后所得怎么算
  • 发票勾选平台已经勾选统计确认,报税平台看不见
  • 工会发票开了专票怎么办
  • 营改增后还有营业费用吗
  • 把公司的钱借给别人责任
  • 企业所得税优惠事项包括哪些?
  • 增值税减免税申报明细表免税代码和名称
  • 可供出售金融资产会计处理
  • 用友t8怎么删除凭证
  • 总公司资金转入私人账户
  • 货币资金核算流程设计
  • 只交社保不发工资可以吗
  • 民间非营利组织会计制度会计科目
  • 免税不能开专票
  • c盘显示隐藏
  • 经营租入的设备计入什么科目
  • 房地产销售代理是什么意思
  • 押金未退会计分录
  • bfsvc.exe是什么
  • 免抵退应退税额15栏怎么填进去
  • 苹果手机热点打不开是灰色的
  • php floor()
  • uni app面试题
  • 印花税跨年度缴纳有滞纳金吗
  • 销售费用计提分录
  • 还银行贷款怎么做凭证
  • 什么是对公账户和个人账户
  • 科目汇总表一页不够写怎么办
  • 稿酬的支付方式
  • dedecms默认用户名
  • vj刷题
  • 房租能不能一次性付清
  • 小公司没有财务软件怎么手工记账
  • 外地预缴个人所得税凭证怎么弄
  • 捐赠 赞助 区别
  • 装修费用进什么科目
  • 广告设计合同属于什么合同
  • 增值税农产品免税
  • 厂商租赁公司
  • 材料折扣会计分录
  • 登记现金日记账收入栏的依据有
  • 所得税不退税怎么写情况说明
  • 土地返还金
  • 职工医保门诊一年报销多少钱
  • 长期股权投资减值准备是什么意思
  • 收到红字发票进项税怎么做账务处理
  • 固定资产的折旧年限规定
  • sql server使用教程
  • Navicat连接MySQL报错
  • win8语言栏不见了 怎么调出来
  • win8系统安装步骤
  • 深入理解linux内核架构
  • centos 查看服务
  • debian和ubuntu server
  • ubuntu 配置
  • 新手教程进不去
  • centos如何安装软件
  • naimag32.exe - naimag32是什么进程 有什么用
  • windows8开机启动项在哪里设置
  • 在linux系统中有一个重要的概念
  • 游戏引擎官方平台
  • bootstrap基础
  • 粉碎文件的快捷键
  • html中<
  • js 括号函数
  • IE、FF、Chrome浏览器中的JS差异介绍
  • 会计审计和税务服务属于什么税目
  • 宁波购房契税退税条件
  • 2017企业所得税年度申报表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设