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

  • 小米mix4怎么设置深色模式(小米Mix4怎么设置振动)

    小米mix4怎么设置深色模式(小米Mix4怎么设置振动)

  • 网通和联通是一家吗

    网通和联通是一家吗

  • wps只读文件怎么取消只读(wps只读文件怎么复制)

    wps只读文件怎么取消只读(wps只读文件怎么复制)

  • 抖音评级申诉不通过该怎么办(抖音评级无申诉入口如何解封)

    抖音评级申诉不通过该怎么办(抖音评级无申诉入口如何解封)

  • 苹果xr经常没有网络怎么解决(苹果xr手机怎么没有)

    苹果xr经常没有网络怎么解决(苹果xr手机怎么没有)

  • wps一点打印就卡死(wps一点打印就卡了)

    wps一点打印就卡死(wps一点打印就卡了)

  • autodesk可以删除吗(怎么删除autodesk content service)

    autodesk可以删除吗(怎么删除autodesk content service)

  • 检查网络连通性的应用程序是(检查网络连通性的应用程序)

    检查网络连通性的应用程序是(检查网络连通性的应用程序)

  • 华为相机延迟拍照怎么设置(华为相机延迟拍摄关闭)

    华为相机延迟拍照怎么设置(华为相机延迟拍摄关闭)

  • 手机屏幕闪绿屏能修吗(手机屏幕闪绿屏怎么办)

    手机屏幕闪绿屏能修吗(手机屏幕闪绿屏怎么办)

  • word红色波浪线表示什么意思(word红色波浪线打印会出现吗)

    word红色波浪线表示什么意思(word红色波浪线打印会出现吗)

  • 云端文件不存在什么意思(秒传云端文件不存在)

    云端文件不存在什么意思(秒传云端文件不存在)

  • 微信收不到验证消息怎么回事(微信收不到验证码怎么登录)

    微信收不到验证消息怎么回事(微信收不到验证码怎么登录)

  • 苹果11pro第一次充电多久(苹果11pro第一次开机与激活指南)

    苹果11pro第一次充电多久(苹果11pro第一次开机与激活指南)

  • mac截图保存在哪里(mac截图保存在哪里了,不在桌面)

    mac截图保存在哪里(mac截图保存在哪里了,不在桌面)

  • 磁盘清理程序是系统软件吗(磁盘清理是清理什么)

    磁盘清理程序是系统软件吗(磁盘清理是清理什么)

  • 淘宝性别年龄在哪里看(淘宝性别年龄在哪设置)

    淘宝性别年龄在哪里看(淘宝性别年龄在哪设置)

  • 手机导航键怎么设置(手机导航键怎么调出来)

    手机导航键怎么设置(手机导航键怎么调出来)

  • 三星专属管家怎么激活(三星专属管家怎么关闭)

    三星专属管家怎么激活(三星专属管家怎么关闭)

  • airpods可以改名吗(airpods可以改名字么)

    airpods可以改名吗(airpods可以改名字么)

  • oppoa83禁止安装怎么解除(oppo禁止安装程序,要怎么设置才能解除?)

    oppoa83禁止安装怎么解除(oppo禁止安装程序,要怎么设置才能解除?)

  • 无法找到脚本文件c:usersadministrator(无法找到脚本文件vbs怎么办)

    无法找到脚本文件c:usersadministrator(无法找到脚本文件vbs怎么办)

  • 雪后的布拉格,捷克共和国 (© benkrut/Getty Images)(布拉格下雪)

    雪后的布拉格,捷克共和国 (© benkrut/Getty Images)(布拉格下雪)

  • 坏账损失计入什么
  • 什么经营范围可以开电费发票
  • 社保局的员工是公务员吗
  • 二手车固定资产
  • 增值税免税是否计入营业外收入
  • 出差怎么订机票
  • 一般纳税人差额征税申报表怎么填
  • 代理缴费业务主要包括
  • 账户未认证
  • 企业支付小额劳务费税率
  • 材料的销售成本计算公式
  • 商标的费用能抵扣吗
  • 税控盘白盘和黑盘图标
  • 税务稽查的四个环节
  • 购车时服务费用怎么算
  • 车间改造用的材料有哪些
  • 多计提的费用怎么调整
  • 银行承兑汇票到期后多长时间失效
  • 城建税上月少计提本月怎么做账
  • 物业预收的物业费怎么做会计分录?
  • 员工给公司代垫的款项分录
  • 建安企业收取管理费虚开怎么处理
  • 如何预防计算机病毒的方法
  • 财务红冲是什么意思
  • 持有至到期投资减值准备
  • php教程视频
  • CVE-2016-1000027分析
  • yii2框架从入门到精通
  • laravel视频教程
  • 终身职业技能培训
  • php java c#
  • 固定资产加速折旧方法
  • 公司员工的车加油可以开公司发票吗
  • 强化学习——Q-Learning算法原理
  • 做了几年前端基础还是很差
  • php数组降序排列
  • 给兼职员工的劳动补贴
  • 小企业会计准则没有以前年度损益调整科目
  • 合作社计提工资
  • 职工教育经费具体比例
  • 取得了水电费发票怎么做
  • 其他应付款贷方余额表示谁欠谁
  • 先款还是先票
  • 对公账户每笔钱都得做账吗
  • 要求供应商赔偿说明函范本
  • 债券回售手续费是多少
  • 附有销售退回条件的商品销售,如果不能对退货
  • 审计外聘人员支付标准
  • 非居民企业的所得一律适用20%的企业所得税税率
  • 一般纳税人开普票和专票有什么区别
  • 三证合一指的是什么意思
  • 应交税费进项税额转出期末怎么结转
  • 公司购车按揭利率是多少
  • 第三方平台佣金账务处理
  • 老板买私人飞机可以避税吗
  • 应收账款管理制度
  • 营改增后,建筑行业与供应商签合同才怎样签没风险?
  • 报销冲抵什么意思
  • 低值易耗品五五摊销法报废
  • 会计一般月初忙几天
  • windows server 2008 64位MySQL5.6免安装版本配置方法图解
  • windows 10预览版
  • fedora系统安装教程
  • 哪款系统重装软件比较好
  • windows提示滑动以关闭电脑
  • windows 10 mobile apk
  • 电脑系统重装win8
  • win8删除软件在哪里
  • javascript.info
  • ExtJS 2.0实用简明教程 之Ext类库简介
  • [置顶]公主大人接下来是拷问时间31
  • 网站渗透违法吗
  • js相等和全等
  • js操作对象的方法
  • JavaScript中的this
  • linux装python环境
  • python怎么画子图
  • 江苏增值税发票代码
  • 房屋出租到哪里挂出去
  • 企业间借款合同印花税怎么交
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设