位置: 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函数用法)

  • 抖音送礼记录怎么不显示了(抖音送礼记录怎么恢复)

    抖音送礼记录怎么不显示了(抖音送礼记录怎么恢复)

  • 电脑没有自带摄像头怎么办(电脑没有摄像头该怎么办)

    电脑没有自带摄像头怎么办(电脑没有摄像头该怎么办)

  • 电脑如何下载excel(电脑如何下载EXCEL客户端)

    电脑如何下载excel(电脑如何下载EXCEL客户端)

  • 扫码加微信好友找不到怎么查找(扫码加微信好友的步骤)

    扫码加微信好友找不到怎么查找(扫码加微信好友的步骤)

  • ps2020一打开就闪退(ps打开一闪一闪的)

    ps2020一打开就闪退(ps打开一闪一闪的)

  • 爱奇艺关联账号管理怎么删除?(爱奇艺关联账号是什么意思)

    爱奇艺关联账号管理怎么删除?(爱奇艺关联账号是什么意思)

  • 知乎浏览记录别人能看到吗(知乎里的浏览记录别人看不到吧)

    知乎浏览记录别人能看到吗(知乎里的浏览记录别人看不到吧)

  • 笔记本电脑cpu温度90度正常吗(笔记本电脑cpu温度100度怎么办)

    笔记本电脑cpu温度90度正常吗(笔记本电脑cpu温度100度怎么办)

  • 计算机的操作系统是(计算机的操作系统有哪些功能)

    计算机的操作系统是(计算机的操作系统有哪些功能)

  • nova7pro有红外线吗(nova7带红外线)

    nova7pro有红外线吗(nova7带红外线)

  • 哈罗顺风车平台抽成是多少(哈罗顺风车平台规则)

    哈罗顺风车平台抽成是多少(哈罗顺风车平台规则)

  • 腾讯课堂摄像头模式是什么(腾讯课堂摄像头打不开)

    腾讯课堂摄像头模式是什么(腾讯课堂摄像头打不开)

  • e980什么处理器(ex980是什么处理器)

    e980什么处理器(ex980是什么处理器)

  • 华为tit-al00什么型号(华为 trt-al00)

    华为tit-al00什么型号(华为 trt-al00)

  • 华为荣耀20s返回键怎么设置(华为荣耀20s返回键怎么更换)

    华为荣耀20s返回键怎么设置(华为荣耀20s返回键怎么更换)

  • ip地址是电脑的还是网络的(如何改自己的ip地址)

    ip地址是电脑的还是网络的(如何改自己的ip地址)

  • 微信权限仅聊天是什么意思(微信权限仅聊天和不让他看有什么区别)

    微信权限仅聊天是什么意思(微信权限仅聊天和不让他看有什么区别)

  • iphone 7机身多大(苹果7机身尺寸多少厘米)

    iphone 7机身多大(苹果7机身尺寸多少厘米)

  • 华为屏幕组件包括什么(华为屏幕组件包括电池吗)

    华为屏幕组件包括什么(华为屏幕组件包括电池吗)

  • 手机电流声怎么消除(手机电流声怎么解决)

    手机电流声怎么消除(手机电流声怎么解决)

  • 魅族16s怎么安装flash插件(魅族16s安装双卡)

    魅族16s怎么安装flash插件(魅族16s安装双卡)

  • 苹果6怎样设置双击亮屏(苹果6怎样设置悬浮球)

    苹果6怎样设置双击亮屏(苹果6怎样设置悬浮球)

  • 电脑前面板耳机没声音(电脑前面板耳机孔插了没反应)

    电脑前面板耳机没声音(电脑前面板耳机孔插了没反应)

  • 0x0000001e蓝屏代码意思(0x0000001e蓝屏代码的含义)

    0x0000001e蓝屏代码意思(0x0000001e蓝屏代码的含义)

  • 进项税额比销项税额多怎么填申报表
  • 应收账款平均余额包括应收票据吗
  • 非税收入票据能否税前扣除
  • 资产负债表的累计折旧期末数怎么填
  • 增值税改革后增值税申报表怎么填写
  • 2019年1月份到现在几个月了
  • 固定资产折旧购买日期还是使用日期呢
  • 房地产开发公司排名
  • 外管证报验核销
  • 员工就诊发票可以报销吗
  • 公户买理财产品怎么做账
  • 股权减资会计处理
  • 定期存款利息税是多少
  • 小规模纳税人咨询服务费的税率是多少
  • 暂估成本和实际成本的分录
  • 小规模税局代增值税专用发票怎么交税
  • 铝模租赁是怎么计算费用的,报价明细为你揭晓
  • 钱已确定收不回怎么办
  • 无法访问移动网络怎么办
  • 如何修改电脑默认打印机
  • 维修机器设备买什么好
  • 党政机关接收企业赞助的规定
  • 所有者权益变动表图片
  • 物业管理费发票图片
  • ecap.exe是什么意思
  • 如何利用路由器登陆花生壳
  • 德比郡在哪
  • 防伪税控风险纳税人
  • yii2框架优秀在哪里
  • 在妈妈身边的说说
  • 支付产品运输费怎么入账
  • node.js什么意思
  • 企业一次性收取租金如何缴纳增值税
  • react 入门
  • 推荐几个比较好用的
  • 办公室清洁费计算公式
  • 公司购买家电开什么发票
  • 每年结息一次,到期一次还本是单利
  • 金蝶本月金额公式
  • 详解九章算法
  • 固定资产清理是什么科目
  • 工会费的会计分录是什么
  • 盈余公积转增资本所有者权益会变吗
  • 内账需要哪些单据
  • 住宿费收入会计分录
  • 完税凭证抵扣进项税额分录
  • 银行电子承兑到期后怎么操作
  • 计提的坏账应该计入哪个科目
  • 创投收入
  • 绩效工资定义及标准
  • 委外加工半成品入库的会计分录
  • 酒店酒水成本核算表
  • 原始单据的重要性
  • 苹果电脑定制键盘
  • ubuntu系统防火墙状态
  • ubuntu操作系统入门
  • xp系统自动升级win7
  • win10系统哪款好
  • win10系统虚拟机安装教程win7
  • 服务win10
  • win8.1应用商店不能装软件,提示此项应用不在提供
  • win8鼠标右键无法弹出菜单
  • linux ssh gui
  • jQuery实现ctrl+enter(回车)提交表单
  • 批处理应用实例
  • django orm sqlalchemy
  • nodejs word
  • python2.7和3.8
  • js实现时间
  • jquery validation
  • shell脚本入门详解
  • js判断ua
  • 图片在线预览html5
  • 安卓 自动更新
  • u3d地形编辑贴图
  • 原生js常用的方法
  • js中如何弹出提示框
  • python3.7怎么安装pil
  • 长春国税局科员工资是多少
  • 棚户区改造的房子和商品房有什么区别
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设