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

  • 华为语音助手可以自己设置自定义语音吗(华为语音助手可以直接喊出来吗)

    华为语音助手可以自己设置自定义语音吗(华为语音助手可以直接喊出来吗)

  • 抖音怎么解绑学校(抖音怎么解绑学校认证)

    抖音怎么解绑学校(抖音怎么解绑学校认证)

  • 智慧团建登录有时间要求吗(智慧团建登录有记录吗)

    智慧团建登录有时间要求吗(智慧团建登录有记录吗)

  • word多级标题自动编号怎么办(word多级标题自动编号2后面是1.1)

    word多级标题自动编号怎么办(word多级标题自动编号2后面是1.1)

  • 抖音福袋里边都是什么(抖音福袋里面装什么)

    抖音福袋里边都是什么(抖音福袋里面装什么)

  • fun会员怎么取消自动续费(怎么关闭fun自动续费)

    fun会员怎么取消自动续费(怎么关闭fun自动续费)

  • 设置密码特殊字符是什么(设置密码特殊字符是哪些)

    设置密码特殊字符是什么(设置密码特殊字符是哪些)

  • 一体机键盘没反应(一体机键盘不能用)

    一体机键盘没反应(一体机键盘不能用)

  • 苹果无法充电检测到接口有液体(苹果无法充电检测到接口怎么快速解决)

    苹果无法充电检测到接口有液体(苹果无法充电检测到接口怎么快速解决)

  • 快手没写封禁多久就是永久吗(快手帐号封禁没显示时间会封多久)

    快手没写封禁多久就是永久吗(快手帐号封禁没显示时间会封多久)

  • wifi显示光信号红灯是什么回事(wifi显示光信号是什么意思)

    wifi显示光信号红灯是什么回事(wifi显示光信号是什么意思)

  • 华为手机一年保修包括什么(华为手机一年保修期内可以换屏吗)

    华为手机一年保修包括什么(华为手机一年保修期内可以换屏吗)

  • 钉钉直播开浮窗算不算时间(钉钉直播开浮窗计时吗)

    钉钉直播开浮窗算不算时间(钉钉直播开浮窗计时吗)

  • iphone11应用加密怎么设置(苹果11应用加密码)

    iphone11应用加密怎么设置(苹果11应用加密码)

  • 华为nova5pro能不能开空调(华为nova5pro能不能控制空调)

    华为nova5pro能不能开空调(华为nova5pro能不能控制空调)

  • 华为屏保时间怎么设置(华为屏保时间怎么移动位置)

    华为屏保时间怎么设置(华为屏保时间怎么移动位置)

  • 朋友圈一天能删多少条(朋友圈一天可以删多少条)

    朋友圈一天能删多少条(朋友圈一天可以删多少条)

  • 中国最大的平原(中国最大的平原水库)

    中国最大的平原(中国最大的平原水库)

  • 苹果11辅助功能在哪里(苹果11辅助功能怎么设置返回)

    苹果11辅助功能在哪里(苹果11辅助功能怎么设置返回)

  • oppoa57不显示通话记录(oppoa57来电话不显示号码)

    oppoa57不显示通话记录(oppoa57来电话不显示号码)

  • 美团扫一扫在哪里(美团扫一扫在哪里打开华为手机)

    美团扫一扫在哪里(美团扫一扫在哪里打开华为手机)

  • 淘宝助手如何用(淘宝助手如何用微信登录)

    淘宝助手如何用(淘宝助手如何用微信登录)

  • nimh是什么电池(nicd是什么电池)

    nimh是什么电池(nicd是什么电池)

  • Linux虚拟机怎么拍摄快照并管理?(linux虚拟机怎么输入中文)

    Linux虚拟机怎么拍摄快照并管理?(linux虚拟机怎么输入中文)

  • Win10修改编辑hosts文件无法保存怎么办(windows 修改host)

    Win10修改编辑hosts文件无法保存怎么办(windows 修改host)

  • 国内税和国外税
  • 外债利息支付需要按照天计算吗?
  • 印花税核定征收的计税依据
  • 自建办公楼销售要交土地增值税吗
  • 事业单位破产清算程序规定
  • 冲销主营业务收入后导致发生额变大
  • 酒店怎么付钱
  • 房地产企业用电计入什么科目
  • 税收协助
  • 文化事业建设费税收优惠政策2023
  • 三证合一对纳税有影响吗
  • 投资性房地产其他综合收益递延所得税
  • 股东垫支开办费
  • 企业在开办期间发生的费用如何处理
  • 本月无票收入到下月开具如何申报
  • 未开票收入可以不开票吗
  • 固定资产清理和固定资产减值准备的区别
  • 重装系统j
  • win10双系统删除linux
  • PHP:oci_fetch_assoc()的用法_Oracle函数
  • pavkre.exe - pavkre是什么进程 作用是什么
  • 应收账款怎么做分录
  • php smtp类
  • vue路由跳转原理
  • 企业所得税如何计算应纳税所得额
  • 微信开发获取位置
  • 金碟软件如何查看明细账
  • vuejs性能
  • echarts series name
  • react+go
  • 与http缓存有关的header
  • 应付职工薪酬怎么冲平
  • 企业所得税资产总额根据什么填
  • 哪些情形需要办理会计工作交接
  • 退回的个税手续费计入什么科目
  • 允许从销项税额中扣除的有
  • 所得税费用可以计入税金及附加吗
  • 新公司申请一般纳税人流程
  • 银行存款余额调节表编制
  • 未确认融资费用借贷方向
  • 分公司注销怎么起诉公司
  • 代开发票要带什么资料?
  • 销售退回 所得税
  • 出售抵债资产账务处理
  • 电子商业承兑会不会拿不到钱
  • 安全生产费相关规定
  • 机票改签手续费能报销吗
  • 企业间借贷是否合法2018
  • 超市卡发票可以作为费用吗
  • sql必学必会
  • 苹果mac没有声音怎么办
  • 利用系统的公文有哪些
  • ubuntu安装指南
  • win10怎么预览
  • win10 rs5
  • centos设置永不待机
  • win10搜索功能不好用
  • windows7旗舰版怎样扩大虚拟内存
  • Win7系统怎么打开蓝牙
  • 快速掌握押韵技巧
  • 用原生js写项目
  • jquery 滑块
  • nodejs cgi
  • 背景透明度设置
  • 火狐浏览器自定义滚动条
  • jquery将文本框设置为只读
  • Node.js中的事件循环是什么
  • 后台实时分流文件的shell脚本
  • 以下代码的运行结果是哪一项
  • java编程基础知识入门
  • jquery定位
  • 屏幕模式自适应模式
  • js模拟点击alert()确定
  • 发票专用章和公章编码一样吗
  • 广东省电子学校
  • 征求意见稿 讨论稿 送审稿
  • 匈牙利离中国广东有多远
  • 合肥报税网站
  • 云南省地方税务局公告2011年第6号
  • 浙江省网上税务局总分机构变更流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设