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

  • 申报无票收入次月红冲有没有风险
  • 质保金一年怎么写
  • 预提车间租入固定资产租金800元
  • 加油票怎么记账凭证
  • 以前年度亏损弥补会计分录
  • 费用化支出期末结转
  • 债务重组的会计处理方法
  • 物资采购账务处理方法
  • 会员卡收费怎么办理
  • 分公司往子公司投资如何做税务处理?
  • 未开票收入如何申报增值税,下个月怎么操作
  • 境外付汇代扣代缴
  • 股东分红个人所得税怎么申报
  • 不征税发票报税怎么报
  • 机动车销售统一票据可以抵扣吗
  • 可以自行设计的软件
  • 地税退税怎么做分录
  • 发生工伤事故先怎么办
  • 持续经营净利润是什么意思
  • 企业增速怎么算
  • 在Win10系统中卸载最近更新的补丁并重启电脑
  • 微软输入法突然变成繁体字怎么改回来
  • 城镇土地使用税优惠政策
  • 初中英语的学科知识与能力主要考什么
  • 怎么升级鸿蒙系统3.1
  • ajax+json
  • php copy函数
  • 企业发给员工的工资要交税吗
  • 收取增值税一般是多少
  • php xml转字符串
  • 投资性房地产的主要构成内容为
  • 租赁公司的
  • Diffusion models代码实战:从零搭建自己的扩散模型
  • 没有计提坏账如何披露
  • 帝国cms怎么上传图片
  • 劳务费支出计入什么会计科目
  • 一笔购入多项固定资产
  • hadoop集群状态
  • 挂靠设计公司费用标准怎么记账
  • 建造合同收入的会计处理
  • 资产负债表应付职工薪酬是负数是什么原因
  • 货款未转到公司怎么处理
  • 进项税额转出的会计分录怎么做
  • 生产成本科目期末怎么结转
  • 主营业务成本是什么科目
  • 房地产企业怎么预缴企业所得税
  • 融资租赁业务如何高效拓展
  • 印花税的征税范围口诀
  • 出差发生的招待费计入差旅费吗
  • 购进无偿赠送
  • 如果没有抵扣要交多少税
  • 跨年的管理费用可以直接冲吗
  • 固定资产计提折旧的会计科目
  • sql server数据库版本
  • win 9x
  • bios设置第一启动项图解
  • wrme.exe是什么
  • 如何调整心态和正确处理情绪
  • win7怎么启用显卡
  • hkcmd是什么进程
  • windows8设置自动关机
  • ssh远程登录设置
  • win8系统修复在哪里
  • win10安全问题
  • [置顶] 关于在vs2013中配置opengl红宝书第八版环境
  • easyui搜索框
  • 有关于月亮的诗句
  • unity openvr
  • 深入理解新发展理念,推进供给侧结构性改革
  • js有哪些作用域,分别是什么意思
  • nodejs中使用HTTP分块响应和定时器示例代码
  • 批处理文件
  • shell脚本检查输入参数
  • python 的多线程
  • unity接入安卓sdk
  • 黑龙江税务局副局长
  • 没有代理记账资质做代理记账业务
  • 实木地板什么
  • 电子税务局使用率低的原因
  • 重庆税务电子发票登录
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设