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

  • 拼多多怎么做任务领电力(拼多多怎么做任务)

    拼多多怎么做任务领电力(拼多多怎么做任务)

  • 显示器天冷刚开会花屏一会(显示器冬天开机过一会儿才会显示)

    显示器天冷刚开会花屏一会(显示器冬天开机过一会儿才会显示)

  • 抖音取关一个人她会知道么(抖音取关一个人还会刷到吗)

    抖音取关一个人她会知道么(抖音取关一个人还会刷到吗)

  • 微信公众号第三方平台有哪些(微信公众号第三方扫码登录)

    微信公众号第三方平台有哪些(微信公众号第三方扫码登录)

  • 苹果id可以同时登录两台手机吗(苹果id可以一起用吗)

    苹果id可以同时登录两台手机吗(苹果id可以一起用吗)

  • k30pro屏幕刷新率(k30pro刷新率是多少hz)

    k30pro屏幕刷新率(k30pro刷新率是多少hz)

  • 苹果手机打开了蜂窝数据为什么还没有网络(苹果手机打开了蜂窝数据还是用不了网)

    苹果手机打开了蜂窝数据为什么还没有网络(苹果手机打开了蜂窝数据还是用不了网)

  • 华为p40关机键在哪里(华为p40关机键设置)

    华为p40关机键在哪里(华为p40关机键设置)

  • 华为mate30pro超级微距怎么打开(华为mate30pro超级微距)

    华为mate30pro超级微距怎么打开(华为mate30pro超级微距)

  • 华为p30保修期漏液(华为保修期内修不好怎么办)

    华为p30保修期漏液(华为保修期内修不好怎么办)

  • 抖音怎么复制别人的名字(抖音怎么复制别人的作品让自己发一遍)

    抖音怎么复制别人的名字(抖音怎么复制别人的作品让自己发一遍)

  • 回收降权淘宝号有什么用(人家收降权淘宝号有什么用)

    回收降权淘宝号有什么用(人家收降权淘宝号有什么用)

  • 华为nova5pro保修期多久(华为nova5pro保修期在哪里看)

    华为nova5pro保修期多久(华为nova5pro保修期在哪里看)

  • 2010word怎么设置图案样式(2010word怎么设置背景图片)

    2010word怎么设置图案样式(2010word怎么设置背景图片)

  • mde5是什么型号(mde7是什么型号)

    mde5是什么型号(mde7是什么型号)

  • wps如何导出目录(wps如何生成目录)

    wps如何导出目录(wps如何生成目录)

  • 拼多多下单咋看(拼多多下单看不见电话号码)

    拼多多下单咋看(拼多多下单看不见电话号码)

  • 拼多多频繁退货会怎样(拼多多频繁退货会怎么样)

    拼多多频繁退货会怎样(拼多多频繁退货会怎么样)

  • 微信怎么设置评论别人看不见(微信怎么设置评论仅彼此可见)

    微信怎么设置评论别人看不见(微信怎么设置评论仅彼此可见)

  • 淘宝号升3心要几天啊(最新淘宝号升3心方法2020)

    淘宝号升3心要几天啊(最新淘宝号升3心方法2020)

  • 抖音里面说话配音在哪(抖音里面说话配音怎么弄)

    抖音里面说话配音在哪(抖音里面说话配音怎么弄)

  • 快速搞懂Pinia及数据持久化存储(详细教程)

    快速搞懂Pinia及数据持久化存储(详细教程)

  • 前端vue经典面试题78道(重点详细简洁)(vue前端面试官常问的问题)

    前端vue经典面试题78道(重点详细简洁)(vue前端面试官常问的问题)

  • 支持插件的消息中间件【msg broker with plugin】  知然  博客园(插件不支持是什么意思)

    支持插件的消息中间件【msg broker with plugin】 知然 博客园(插件不支持是什么意思)

  • 城建税和教育费附加
  • 增值税欠缴
  • 税金及附加借贷科目
  • 运动会奖品有什么
  • 金税四期对增值税发票的比对
  • 政府补贴的递延收益
  • 发生销售折让可以不开具
  • 承兑汇票丢了如何追回
  • 关联企业如何取消
  • 简易分包抵减的增值税应纳税额怎么做会计分录?
  • 河道维护中心职责
  • 取消国税用什么手续
  • 未分配利润应该在借方还是贷方??
  • 发票代表收据吗
  • 小规模企业所得税税率多少
  • 企业拆迁补偿款要交哪些税
  • 税控技术服务
  • 自然人代人开普票合法吗
  • 商业承兑汇票贴现转让
  • 提高并购成本
  • 个人社保费需要交多少年
  • 收到退回增值税和附加税怎么处理
  • 单位公积金对账单
  • 新准则待摊费用
  • 产供销一体化什么意思
  • win10默认网关不可用总掉线解决方法
  • 从奎雷英山口看到的 Leum na Luirginn湖和Cleat湖,英国斯凯岛 (© Sebastian Wasek/Sime/eStock Photo)
  • 员工出差过程中猝死赔偿
  • 生产型企业出口退税计算案例
  • 酒店客房收入怎么算
  • 占统治地位的英文短语
  • vuex状态丢失
  • chatb
  • ajax和axios区别
  • 年末结转利润分配各明细账户
  • 开票系统在哪
  • 在境外提供的广播影视节目(作品)的播映服务征收增值税
  • 资产负债表和利润表的认定
  • db2比较大小
  • 实收资本需要明细科目吗
  • 申报抵扣
  • 小规模纳税人减按1%政策
  • 审车费用表
  • 什么情况下交劳务税
  • 小规模公司怎样添加员工
  • 独立法人资格是独立核算
  • 忘记MySQL的root密码该怎么办
  • sql server多行添加
  • Ubuntu下MySQL中文乱码的问题解决
  • win2003 IIS6.0+PHP+MySQL的安?配置
  • mac更换软件图标
  • win7如何新建用户
  • 地图是英语如何改为中文
  • win10右键菜单管理在哪打开
  • 怎么安装最新显卡驱动
  • centos硬件配置
  • win8电脑屏幕亮度调节在哪里设置
  • root什么玩意
  • 新买的笔记本电脑需要做什么
  • win8.1技巧
  • win8功能大全介绍
  • cocos creator 碰撞检测
  • 怎么用javascript
  • jquery easyui 教程
  • js继承怎么实现
  • 批处理 修改文件名
  • regedit.exe
  • unity3d最新api
  • jquery控制滚动条位置
  • jquery选择器实例
  • unity全景
  • Python内置的HTTP协议服务器SimpleHTTPServer使用指南
  • jquery的validate前端表单验证
  • jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
  • 河北怎么网上申请无犯罪证明
  • 企业所得税国家和地方分配比例
  • 金税盘联网步骤
  • 中国银行手机银行app官方下载
  • 2021河南省中考英语听力音频
  • 国家税务总局关于新型墙体材料增值税政策的通知
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设