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

  • 华为nova4反应太慢怎么办(华为nova4太卡怎么办)

    华为nova4反应太慢怎么办(华为nova4太卡怎么办)

  • 毒买鞋能退吗(毒买鞋能不能退货)

    毒买鞋能退吗(毒买鞋能不能退货)

  • 修改微信号电脑可以吗(微信号在电脑上怎么改)

    修改微信号电脑可以吗(微信号在电脑上怎么改)

  • 华为手机如何导入旧手机数据(华为手机如何导入u盘)

    华为手机如何导入旧手机数据(华为手机如何导入u盘)

  • 华为P40几倍变焦(华为p40pro几十倍变焦)

    华为P40几倍变焦(华为p40pro几十倍变焦)

  • 苹果x屏幕闪烁怎么回事(苹果x手机屏幕轻微闪)

    苹果x屏幕闪烁怎么回事(苹果x手机屏幕轻微闪)

  • 苹果微信夜间模式怎么取消(苹果微信夜间模式在哪里)

    苹果微信夜间模式怎么取消(苹果微信夜间模式在哪里)

  • 系统文件可以删除吗(系统文件可以删除吗苹果手机)

    系统文件可以删除吗(系统文件可以删除吗苹果手机)

  • 腾讯视频怎么连接电视(腾讯视频怎么连续播放)

    腾讯视频怎么连接电视(腾讯视频怎么连续播放)

  • 频繁开关机对电脑有什么影响(频繁开关机对电脑损害有多大)

    频繁开关机对电脑有什么影响(频繁开关机对电脑损害有多大)

  • 苹果x怎么清理垃圾清理(苹果x怎么清理系统数据)

    苹果x怎么清理垃圾清理(苹果x怎么清理系统数据)

  • 高德地图标记多个地点(高德地图标记多少钱)

    高德地图标记多个地点(高德地图标记多少钱)

  • 如何删除爱奇艺账号(如何删除爱奇艺登录设备)

    如何删除爱奇艺账号(如何删除爱奇艺登录设备)

  • 被拉到亲情号怎么退出(亲情号会被拉黑吗)

    被拉到亲情号怎么退出(亲情号会被拉黑吗)

  • 淘宝如何取消举报(怎么取消淘宝举证)

    淘宝如何取消举报(怎么取消淘宝举证)

  • 视频可以p吗(视频可以p图或修图吗)

    视频可以p吗(视频可以p图或修图吗)

  • network boot是什么意思(network boot选项)

    network boot是什么意思(network boot选项)

  • 怎么找QQ浏览器中加密的文件(怎么找qq浏览器的私密空间)

    怎么找QQ浏览器中加密的文件(怎么找qq浏览器的私密空间)

  • 微微电话呼叫失败是什么原因(微微电话呼叫失败是什么意思)

    微微电话呼叫失败是什么原因(微微电话呼叫失败是什么意思)

  • qq个性签名背景取消(qq个性签名背景图)

    qq个性签名背景取消(qq个性签名背景图)

  • 通话录音保存在哪里(通话录音保存在哪个文件夹)

    通话录音保存在哪里(通话录音保存在哪个文件夹)

  • 主机电源怎么选(主机电源怎么选多少瓦)

    主机电源怎么选(主机电源怎么选多少瓦)

  • asupport.exe是什么进程 asupport进程信息查询(oawrapper.exe是什么)

    asupport.exe是什么进程 asupport进程信息查询(oawrapper.exe是什么)

  • 10分钟搞定win11安卓子系统(10分钟搞定3种网红小吃)

    10分钟搞定win11安卓子系统(10分钟搞定3种网红小吃)

  • telnet命令  控制远程设备(telnet 执行命令)

    telnet命令 控制远程设备(telnet 执行命令)

  • 资金性质生产性是什么意思
  • 单独确认进项税额的情形
  • 福建税务网上办税流程
  • 终止经营的会计处理
  • 电子银行承兑重复背书
  • 员工报销没有发票怎么入账
  • 生鲜配送公司财务制度
  • 所得税可以预交吗现在
  • 预付房租收到发票怎么做
  • 个体户定期定额是什么意思
  • 小规模纳税人转一般纳税人
  • 农产品进项税额计算扣除的方法
  • 金蝶固定资产管理
  • 存货的坏账准备转回吗
  • 个人购买车辆的发票可以贷款吗
  • 为别人开发票先收的税金怎么入帐?
  • 金税盘里的增值税怎么算
  • 公司购买的一次性纸杯计入哪个科目
  • 集团提供厂房是否需要缴纳印花税?
  • 高新创投企业所得税税率
  • 出口报关单中有哪些内容
  • 宝塔linux面板 7.5.2 腾讯云专享版
  • 原材料赔偿会计分录
  • url是什么软件
  • bass boost system
  • 融资租赁印花税怎么缴纳
  • 离职补贴个税计算公式
  • 未实际发生的费用 可否申请赔偿
  • 小规模纳税人的企业所得税税率
  • php function函数的用法
  • 买过来的土地可以确权吗
  • vue axios 拦截器
  • vue做项目的流程
  • 计提医疗保险费的会计分录
  • 公允价值变动损益
  • 存货的会计核算及业务处理
  • 调整以前年度亏损
  • 个人出租非住房房产税
  • mysql5.7压缩包安装配置教程
  • mongodb基础知识
  • phpcms不支持缩略图和水印怎么办
  • 公司没有车加油费怎么报
  • 科研项目财政拨款怎么算
  • 应付职工薪酬在利润表哪里体现
  • 股东退股如何清算表格
  • mysql group by实现原理
  • 货先到发票后到怎么办
  • 高新技术企业认定中介机构
  • 本年利润会计处理流程
  • 应收账款是指的资产吗
  • 挂靠管理费如何入账?
  • 将自产的产品用于非应税项目
  • 住宿发票 抵扣
  • 跨年收入如何做账
  • 社保计入管理费用什么科目
  • 以前年度财务费用漏记
  • 营业外支出处置固定资产损失是坏账
  • 工程施工科目设置
  • 工业企业应收账款减少原因分析
  • sql语句优化之用是什么
  • windows端口占用怎么关闭
  • win7系统删除ie浏览器
  • cocos2djs教程
  • 游戏引擎的重要性
  • linux spid
  • 什么是四个菜
  • cocos2dx官方教程
  • java对象怎么比较
  • jquery循环生成li
  • 安卓手机管家
  • won10安装
  • 税务局稽查科是干什么的工作
  • 郑州房产契税缴纳
  • 江苏省国税电子发票查询
  • 江西国税局电话客服热线
  • 306医院改名什么了
  • 土地二次买卖
  • 百望税控盘怎么导出清单明细
  • 香水与香精有啥不一样
  • 什么是社保补缴的标准
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设