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

  • 2023深圳注册个体户办理过程需要多少钱

    2023深圳注册个体户办理过程需要多少钱

  • 微信视频怎么转发到QQ(微信视频怎么转发到抖音里面)

    微信视频怎么转发到QQ(微信视频怎么转发到抖音里面)

  • 微信运动怎么用(微信运动怎么用watch)

    微信运动怎么用(微信运动怎么用watch)

  • 微信语音信息如何转发给别人(微信语音信息如何自动播放)

    微信语音信息如何转发给别人(微信语音信息如何自动播放)

  • 抖音pc端在哪里打开(抖音pc端在哪里开直播)

    抖音pc端在哪里打开(抖音pc端在哪里开直播)

  • hd6850相当于什么显卡(hd6850相当于什么集显)

    hd6850相当于什么显卡(hd6850相当于什么集显)

  • 文件被覆盖了还能恢复吗(文件被覆盖了还能找到吗?)

    文件被覆盖了还能恢复吗(文件被覆盖了还能找到吗?)

  • 华硕z390哪个m2接口速度快(华硕z390a哪个m2接口速度快)

    华硕z390哪个m2接口速度快(华硕z390a哪个m2接口速度快)

  • 剪映的镜像在哪(剪映中的镜像在哪里)

    剪映的镜像在哪(剪映中的镜像在哪里)

  • 换手机登qq聊天记录还在吗(换手机登qq聊天背景会变吗)

    换手机登qq聊天记录还在吗(换手机登qq聊天背景会变吗)

  • 华为荣耀20怎么拍全景(华为荣耀20怎么开空调遥控器)

    华为荣耀20怎么拍全景(华为荣耀20怎么开空调遥控器)

  • 电话号码拉黑了还能收到短信吗(电话号码拉黑了在哪里找)

    电话号码拉黑了还能收到短信吗(电话号码拉黑了在哪里找)

  • qq音乐试听的音乐删除会怎样(qq音乐试听的音乐删除,歌单会有影响呢)

    qq音乐试听的音乐删除会怎样(qq音乐试听的音乐删除,歌单会有影响呢)

  • iphone6支持无线充电吗(iphone6s支持无线)

    iphone6支持无线充电吗(iphone6s支持无线)

  • 苹果xs几个卡(苹果12pro max是单卡还是双卡)

    苹果xs几个卡(苹果12pro max是单卡还是双卡)

  • 手机摄像头坏了怎么扫二维码(手机摄像头坏了可以修复吗)

    手机摄像头坏了怎么扫二维码(手机摄像头坏了可以修复吗)

  • 怎么永久删除抖音官方消息(怎么永久删除抖音里的人)

    怎么永久删除抖音官方消息(怎么永久删除抖音里的人)

  • 共享单车怎么注册(共享单车怎么注销实名认证)

    共享单车怎么注册(共享单车怎么注销实名认证)

  • 闲鱼怎么举报(闲鱼怎么举报盗版电影)

    闲鱼怎么举报(闲鱼怎么举报盗版电影)

  • 苹果快传在哪打开(苹果快传在哪里)

    苹果快传在哪打开(苹果快传在哪里)

  • 小程序开发需注意哪些事项(小程序开发注意点)

    小程序开发需注意哪些事项(小程序开发注意点)

  • 硬盘温度高(电脑硬盘温度高)

    硬盘温度高(电脑硬盘温度高)

  • ezSP_Px.exe是什么进程?ezSP_Px.exe是不是病毒?(exescope是什么软件)

    ezSP_Px.exe是什么进程?ezSP_Px.exe是不是病毒?(exescope是什么软件)

  • 【Vue+element-ui搭建前端页面】适用于初学者学习(vue+element-ui项目)

    【Vue+element-ui搭建前端页面】适用于初学者学习(vue+element-ui项目)

  • autrace命令  跟踪指定进程(autocut跟踪调节)

    autrace命令 跟踪指定进程(autocut跟踪调节)

  • 10-Ajax&Vue

    10-Ajax&Vue

  • 个体工商户核定征收
  • 不含税买货合法吗
  • 未交增值税借方表示什么意思
  • 申报表货物及劳务是什么
  • 不动产增值税税率变化
  • 应收账款和应付账款的关系
  • 经营性投资是什么
  • 兼职是属于劳动报酬吗
  • 税费四舍五入的怎么做帐
  • 个税抵扣租房能抵扣多少
  • 被客户扣钱怎么办
  • 进项税发票认证期限多长时间
  • 支付临时工劳务费700元需要开发票吗
  • 企业撤资的所得税处理
  • 企业的党员活动有哪些
  • 作业成本管理的作用
  • 股权转让如何避免印花税
  • 借款利息支出账务处理
  • 没有抵扣的发票怎么入账
  • 公允价值变动是减值吗
  • 税率和征收率的含义和区别
  • 代扣个税手续费返还怎么申请
  • 营改增的主要内容
  • 收到报废车款要交什么税
  • 进口缴纳关税
  • 买酒 专票
  • 增值税普通发票怎么开
  • 脚手架出租生意
  • 混营纳税人有什么影响
  • 国税网上三方协议流程 个人所得税
  • 金税盘一直更新登陆不进去
  • 企业净资产指的是什么?
  • 收到不开票的返利如何记账?
  • 利润的三个计算口径
  • 海关票怎么认证
  • 生产成本可以结转到其他业务成本吗
  • 给对方发短信显示imessage
  • 打开软件窗口后如果没有出现属性面板可执行
  • 公司车辆违章怎么办
  • 买水果送什么赠品
  • PHP:xml_parser_create()的用法_XML解析器函数
  • windows 11什么时候
  • 其他应收款年末怎么处理
  • groove.exe是什么
  • 房产开发企业涉及税种
  • 售后租回融资租赁帐务处理怎么做?
  • php rsa
  • 超市购物增值税怎么算
  • php 反代
  • 深入理解php中的数字
  • css怎样设置行间距
  • 蓝桥杯b组2020
  • js写数组去重
  • ssh -o命令
  • 年底本年利润需要结转吗
  • 什么时间可以开发票
  • phpcms使用教程
  • access 运行sql
  • 合作经营利润分配协议
  • 债权投资有哪些科目
  • 新准则下企业开什么发票
  • 在windows中打开一个窗口后
  • centos7搜索
  • win8系统开机启动项怎么设置
  • centos编译环境
  • centos7版本推荐
  • win7系统笔记本摄像头在哪里打开
  • neotrace.exe - neotrace是什么进程 有什么用
  • 批处理命令教程 pdf
  • 批处理文件如何运行
  • unity3d跨平台
  • python自动化部署k8s集群
  • javascript的dom操作
  • js跨域请求有哪些方式
  • 发票查询为什么查不出来
  • 如何查询税务是否变更
  • 支持国税普通发展的原因
  • 电子增值税专用发票和纸质增值税专用发票的区别
  • 记账凭证编制的依据可以用
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设