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

  • 美团外卖红包哪里领取(美团外卖红包哪个视频会员送)

    美团外卖红包哪里领取(美团外卖红包哪个视频会员送)

  • 华为nova5怎么设置屏幕常亮(华为nova5怎么设置门禁卡功能)

    华为nova5怎么设置屏幕常亮(华为nova5怎么设置门禁卡功能)

  • 显卡会转,可屏幕不亮(显卡还能转屏幕不显示)

    显卡会转,可屏幕不亮(显卡还能转屏幕不显示)

  • 账号被永久封号怎么解(手机号被永久封号怎么办)

    账号被永久封号怎么解(手机号被永久封号怎么办)

  • 苹果x手机屏幕不受控制乱跳(苹果x手机屏幕失灵解决方法)

    苹果x手机屏幕不受控制乱跳(苹果x手机屏幕失灵解决方法)

  • 第一次保存word文档时会弹出什么对话框(word文档忘了保存,如何恢复最近)

    第一次保存word文档时会弹出什么对话框(word文档忘了保存,如何恢复最近)

  • 微信安全登录提醒是什么意思(微信安全登录提醒怎么办)

    微信安全登录提醒是什么意思(微信安全登录提醒怎么办)

  • xr进水面容不能用了怎么办(xr进水面容不能用了维修多少钱)

    xr进水面容不能用了怎么办(xr进水面容不能用了维修多少钱)

  • 进PE提示获取硬盘分区失败(进pe提示获取硬盘分区失败,可能缺少硬盘驱动)

    进PE提示获取硬盘分区失败(进pe提示获取硬盘分区失败,可能缺少硬盘驱动)

  • 淘宝618外围和会场的区别(淘宝618外围报名)

    淘宝618外围和会场的区别(淘宝618外围报名)

  • medal00是什么手机型号(medal00是什么型号多少钱)

    medal00是什么手机型号(medal00是什么型号多少钱)

  • 做微信辅助有什么影响(做微信辅助有什么坏处)

    做微信辅助有什么影响(做微信辅助有什么坏处)

  • 探探左滑的人还会不会出现第二次(探探左滑的人还会出现吗)

    探探左滑的人还会不会出现第二次(探探左滑的人还会出现吗)

  • 在windows7中对系统文件的维护的工具是(下列对windows7的叙述,错误的是)

    在windows7中对系统文件的维护的工具是(下列对windows7的叙述,错误的是)

  • 官方applecare+版是什么意思(官方apple care+版啥意思)

    官方applecare+版是什么意思(官方apple care+版啥意思)

  • 小米9屏占比(小米九屏幕比例)

    小米9屏占比(小米九屏幕比例)

  • icc是什么意思(groshong picc是什么意思)

    icc是什么意思(groshong picc是什么意思)

  • wifi里的unknown是什么(无线网unknown是什么意思)

    wifi里的unknown是什么(无线网unknown是什么意思)

  • 让手机锁屏后显示时钟(让手机锁屏后显示时钟红米)

    让手机锁屏后显示时钟(让手机锁屏后显示时钟红米)

  • 拼多多满返的钱在哪里(拼多多满返的钱怎么提现)

    拼多多满返的钱在哪里(拼多多满返的钱怎么提现)

  • 苹果手机怎么设置垃圾广告信息拦截(苹果手机怎么设置门禁卡NFC)

    苹果手机怎么设置垃圾广告信息拦截(苹果手机怎么设置门禁卡NFC)

  • excel开发工具选项卡在哪(excel开发工具选项按钮如何设置 二选一)

    excel开发工具选项卡在哪(excel开发工具选项按钮如何设置 二选一)

  • wps表格图表设置xy轴(wps表格图表设置在哪里)

    wps表格图表设置xy轴(wps表格图表设置在哪里)

  • 微信小程序自定义组件(超详细)(微信小程序自定义tabbar)

    微信小程序自定义组件(超详细)(微信小程序自定义tabbar)

  • 劳务报酬个税的税率是多少
  • 小规模纳税人滚动累计
  • 业务员报销差旅费会计分录怎么做
  • 包工包料怎么开税票合适
  • 如何知道一家公司是否可靠
  • 安装服务费发票需要备注地址吗
  • 季度企业所得税可以不预缴吗
  • 印花税小于1元显示无需申报
  • 小规模房产税减免
  • 2020年关于住房公积金的新规定
  • 退运出口货物的报关流程
  • 企业间资金往来 人员派驻
  • 递延所得税如何申报
  • 劳务所得税税率表最新
  • 银行付款退回重新开户
  • 合并报表编织原则
  • 行政机关作出下列行为属于行政复议的范围
  • 零售汽油费发票需要交印花税吗?
  • 公司车辆高速费用能开增值税专用发票吗
  • 企业每月纳税申报流程
  • 远洋船员如何征收个人所得税?
  • 电梯的运行与维护
  • 一月份开的票可以算到12月吗
  • 先入库发票未到分录
  • 外地餐费计入什么账户
  • 个人代收工程款分录
  • 前两个月亏损第三个月盈利所得税怎么计算
  • 苹果手机录音怎么转换成mp3格式
  • win10系统白名单怎么设置
  • php img
  • linux中链接
  • kernel32在哪个文件夹
  • ps工具栏失灵
  • 最小的蓝牙鼠标是哪款
  • yolov5 workers
  • batset命令
  • javascript零基础
  • 既简单又安全的小实验
  • css3题目
  • 应收账款的平均余额怎么计算
  • 增值税专用发票有几联?
  • mysql存二进制用哪个字段
  • 印花税的税率变动
  • 给员工购买住房公积金是先办卡吗?
  • 企业费用发票有哪些可以入账
  • 个人提供劳务报酬如何交税
  • 地下车库的成本包括哪些
  • 滞纳金比例多少
  • 注册资本及构成
  • 员工自己承担的社保费用进入管理费用吗
  • 网吧的收入怎么做账
  • 未入账的记账凭证填错了怎么办
  • 兼职费计入什么科目
  • 如何避免电子发票重复报销的情况
  • 预付押金是否可以退回
  • xp系统开机自动运行程序
  • mac os怎么删除用户
  • linuxvlc安装
  • 神之浩劫能玩吗
  • win7系统的摄像功能在哪
  • win8应用显示错误
  • win批处理命令
  • windows屏幕上有多个窗口时
  • windows8怎么装
  • cocos2dx框架
  • perl and
  • 自定义仪表盘的价值
  • python基础开发
  • pycharm配置pyqt
  • js校验姓名
  • python jose
  • js的自定义属性
  • 怎么用js实现滑动效果
  • Activity与Theme
  • 双色球兑奖方式选法
  • 小规模纳税人购买车辆如何入账
  • 自己建造房屋
  • 一般纳税人资格查询
  • 税务局直属机构
  • 临汾的公司需要交社保吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设