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

  • 支付宝能量雨在哪里(支付宝能量雨是干嘛的)

    支付宝能量雨在哪里(支付宝能量雨是干嘛的)

  • qq在哪设置声纹气泡(qq在哪设置声音)

    qq在哪设置声纹气泡(qq在哪设置声音)

  • 显卡拆卸安装方法(显卡 拆装)

    显卡拆卸安装方法(显卡 拆装)

  • qq修改实名认证后有什么影响(QQ修改实名认证需要人脸识别吗)

    qq修改实名认证后有什么影响(QQ修改实名认证需要人脸识别吗)

  • oppofindx2能不能无线充电(oppofindx2能不能插内存卡)

    oppofindx2能不能无线充电(oppofindx2能不能插内存卡)

  • 抖音号已重置是什么意思(抖音已重置是什么原因)

    抖音号已重置是什么意思(抖音已重置是什么原因)

  • iphone 拦截记录哪去了(iphone 拦截记录短信哪去了)

    iphone 拦截记录哪去了(iphone 拦截记录短信哪去了)

  • 苹果下载不了钉钉怎么回事(苹果下载不了钉钉怎么办)

    苹果下载不了钉钉怎么回事(苹果下载不了钉钉怎么办)

  • cat是指计算机的什么(cat计算机含义的什么?)

    cat是指计算机的什么(cat计算机含义的什么?)

  • 微信申诉次数达到上限怎么办(微信申诉次数过多怎么办)

    微信申诉次数达到上限怎么办(微信申诉次数过多怎么办)

  • 华莱士微信订单如何取消

    华莱士微信订单如何取消

  • 网关ip地址的作用是什么(ip地址,网关)

    网关ip地址的作用是什么(ip地址,网关)

  • 华为手机小艺怎么叫出来(华为手机小艺怎么召唤出来?)

    华为手机小艺怎么叫出来(华为手机小艺怎么召唤出来?)

  • icp备案怎么注销(icp备案申请流程)

    icp备案怎么注销(icp备案申请流程)

  • 浏览器怎么改成兼容模式(浏览器怎么改成默认浏览器)

    浏览器怎么改成兼容模式(浏览器怎么改成默认浏览器)

  • 微信退群有提示吗(微信退群有提示吗知乎)

    微信退群有提示吗(微信退群有提示吗知乎)

  • 华为4e手环怎么连接(华为4e手环怎么用)

    华为4e手环怎么连接(华为4e手环怎么用)

  • iphonex原装屏和国产屏区别(苹果x原装屏和非原装)

    iphonex原装屏和国产屏区别(苹果x原装屏和非原装)

  • 华为怎么取手机卡(华为怎么取手机卡出来)

    华为怎么取手机卡(华为怎么取手机卡出来)

  • 小米MIX的RAM有几种规格(miui ram)

    小米MIX的RAM有几种规格(miui ram)

  • oppo怎么拍夜景(oppo手机拍夜景参数设置)

    oppo怎么拍夜景(oppo手机拍夜景参数设置)

  • 为什么手机没解锁时会有新闻出现(为什么手机没解锁也能刷视频)

    为什么手机没解锁时会有新闻出现(为什么手机没解锁也能刷视频)

  • 华为vnsal00是什么型号手机(华为vnsal00是什么手机)

    华为vnsal00是什么型号手机(华为vnsal00是什么手机)

  • vue vben admin 使用, (个人感觉这项目封装的太深了!!!!)(vue-admin-master)

    vue vben admin 使用, (个人感觉这项目封装的太深了!!!!)(vue-admin-master)

  • 第十四届蓝桥杯第三期模拟赛 C/C++ B组 原题与详解(第十四届蓝桥杯大赛官网)

    第十四届蓝桥杯第三期模拟赛 C/C++ B组 原题与详解(第十四届蓝桥杯大赛官网)

  • 【集群】Slurm作业调度系统的使用(集群怎么写)

    【集群】Slurm作业调度系统的使用(集群怎么写)

  • 百度地图API的使用(附案例)(百度地图api的使用)

    百度地图API的使用(附案例)(百度地图api的使用)

  • js创建对象的5种方式(js创建对象的三种方式)

    js创建对象的5种方式(js创建对象的三种方式)

  • dedecms织梦tag标签调用方法(织梦logo)

    dedecms织梦tag标签调用方法(织梦logo)

  • 小规模免增值税是普票还是专票
  • 外商投资的企业是民营企业吗
  • 水利基金在哪个科目核算
  • 验钞机怎么做账
  • 什么时候确认应收股利
  • 增值税纳税申报表附列资料(三)
  • 新注册公司开银行卡流程
  • 制造费用计入营业成本吗
  • 房产税收取标准有哪些
  • 取得运输业专用发票可以抵扣进项吗
  • 餐饮赠送菜品怎么说
  • 固定资产折旧提完了之后还要怎么处理吗
  • 调整以前年度多计提的工资
  • 借长期借款贷在建工程
  • 所得税汇算清缴退税会计分录怎么做
  • 纳税申报表如何导出
  • 出售股份是利好吗
  • 企业所得税核定征收怎么计算
  • 软件开发工资低
  • 小规模纳税人不开票收入填在哪里
  • 多转出的进项税怎么做账
  • 怎么利用喜欢自己的人
  • 贷款贴息是什么政策
  • win7旗舰版如何恢复出厂设置
  • 电脑开机时进入bios界面快捷键
  • 分享下会画画是怎样的体验
  • 公司整体收购协议书范本
  • 企业租房租金怎么核算
  • PHP:pg_fetch_assoc()的用法_PostgreSQL函数
  • 企业内部研究开发项目开发阶段的支出
  • 回迁安置房是否有产权
  • 【swinUnet官方代码测试自己的数据集(已训练完毕)】
  • php restful接口
  • 跆拳道馆怎么盈利
  • thinkphp常用函数
  • bootstrap easyui结合
  • 2021mathorcupc题答案
  • 利润表主营业务成本怎么算
  • 打印空白表格怎么制作
  • 其他资本公积核算科目
  • 高新技术产业企业认定
  • 出口业务的会计处理
  • 金蝶软件做账流程图片
  • 2020年增值税税收政策
  • 关联企业能否做法人代表
  • sqlserver2008数据库可疑
  • 开发成本为什么放在存货里
  • 固定资产折旧费用的账务处理
  • 投资收益记账
  • 营改增后建筑业怎么开票
  • 资金退回怎么记账
  • 未取得发票该怎么说明
  • 应收账款提坏账分录
  • 个人应如何进行社会实践
  • 研发支出放在报表哪里
  • 低值易耗品的金额
  • 前程无忧效果怎么样
  • 合作社盈余返还总额是指哪些数据
  • 货拉拉平台收取费用
  • 施工单位月末都需要结转什么
  • 商业企业注销应检查哪方面的问题
  • 新企业如何建帐
  • sqlserver获取数据库名
  • ubuntu系统自动获取ip
  • linux配置java环境变量无法保存并退出
  • winoldap.exe - winoldap进程是什么意思
  • Win7任务栏时间显示秒
  • win11注意
  • ubuntu10.04 root的帐户启用方法
  • po|iceofficer是什么意思
  • bootstrap designer
  • node.js实战
  • 第四章之BootStrap表单与图片
  • js常用排序算法
  • jquery和dom对象之间怎么转换
  • shell脚本 su
  • js如何修改style
  • unity2d寻路
  • 修改jquery版本号不生效
  • 金税三期个税下载官网手机版
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设