android 自定义view

首页 / 图说知识 / 科技 | 2022-05-16 02:52:53 点击:0

android怎么自定义view呢?不知道的小伙伴来看看小编今天的分享吧!

android可以通过组合控件来实现自定义view。组合控件就是将系统原有的控件进行组合,构成一个新的控件。这种方式下,不需要开发者自己去绘制图上显示的内容,也不需要开发者重写onMeasure,onLayout,onDraw方法来实现测量、布局以及draw流程。

具体操作:

1、定义标题栏布局文件

 定义标题栏的布局文件custom_title_view.xml,将返回按钮和标题文本进行组合。这一步用于确定标题栏的样子,代码如下所示:

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="@android:color/holo_orange_light">

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" />

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" />

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一样拥有。

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/customview_title"

android:layout_width="match_parent"

android:layout_height="wrap_content">

 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() {22             @Override12             public void onClick(View v) {13                 finish();14             }15         });16 17     }18 }

在第8行中,获取到CustomTitleView实例,第9行设置标题文字,第10行自定义“Back”按钮点击事件。

5、效果图

按照如上的4步,就通过组合控件完成了一个比较简单的自定义标题栏。

以上就是小编今天的分享了,希望可以帮助到大家。


本站声明:本站部分文章来自网络,由用户上传分享,如若内容侵犯了您的合法权益,可联系我们进行处理。文章仅供大家学习与参考,不**本站立场。

评论(0)
*评论只允许汉字和全角中文标点符号。 ? ! ,等
相关标签

推荐相关
相关图片
标签索引

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

文章索引

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

关注用户
QQ皮肤 | 唯美图片 | 闪图 | 女生头像 | 女生图片 | 文字图片 | 爱情图片 | 素材图片 | 非主流图片 | 伤感图片 | 游戏图片 | QQ表情 | 流光字 | qq相册封面拼图 | 小清新图片 | lomo图片 | 美女 | 搞笑图片 | 美文 | 卡通图片 | 原创投稿 | 植物图片 | 动物图片 | 风景图片 | 二次元 | 古风图片 | 美食图片 | 手工制作 | 动漫图片 | 手工折纸 | 废物利用 | 儿童手工 | 可爱图片 | 插画 | 欧美图片 | 头像 | 男生头像 | 情侣头像 | 欧美头像 | 卡通头像 | qq说说 | 伤感说说 | 爱情说说 | 搞笑说说 | 心情说说 | 经典说说 | 图片说说 | 纹身图案 | 可爱头像 | 娱乐圈 | 明星图片 | 娱乐八卦 | 影视剧照 | 摄影图片 | 儿童图片 | 女孩图片 | 男孩图片 | 宝宝图片 | cosplay图片 | 图解小知识 | 美女写真 | 性感美女 | 美女校花 | 游戏美女 | 韩国美女 | 清纯美女 | 内衣美女 | 制服美女 | **** | 欧美美女 | 美女模特 | 美女私房 | 电脑壁纸 | 影视壁纸 | 明星壁纸 | 美女壁纸 | 节日壁纸 | 游戏壁纸 | 卡通动漫 | 美食壁纸 | 风景壁纸 | 动物壁纸 | 设计创意 | 汽车壁纸 | 日历壁纸 | 植物壁纸 | 广告壁纸 | 家居壁纸 | 军事壁纸 | 体育壁纸 | 风格壁纸 | 手机壁纸 | 动漫 | 美女 | 明星 | 游戏 | 影视 | 汽车 | 风景 | 唯美 | 植物 | 动物 | 可爱 | 节日 | 卡通 | 创意 | 非主流 | 苹果 | 搞笑 | 爱情 | 动态 | 风格 | 体育 | 美食 | 萌表情 | 文案 范文 曲谱大全 | 美声曲谱 | 合唱曲谱 | 少儿曲谱 | 外国曲谱 | 戏曲曲谱 | 民歌曲谱 | 通俗曲谱 | 器乐乐谱 | 原创曲谱 | 谱友园地 | 个人曲谱 | 吉他乐谱 | 电子琴谱 | 钢琴乐谱 | 胡琴乐谱 | 葫芦丝等 | 琵琶乐谱 | 其他乐谱 | 笛箫乐谱 | 古筝古琴 | 铜管乐谱 | 提琴乐谱 | 长笛乐谱 | 手风琴谱 | 萨克斯谱 | 口琴乐谱 | 扬琴乐谱 | 图说养生 | 运动养生 | 春季养生 | 女性健康 | 夏季养生 | 疾病预防 | 秋季养生 | 养生小妙招 | 减肥瘦身 | 冬季养生 | 母婴保健 | 24节气养生 | 生活常识 | 孕妇养生 | 小偏方 | 幼儿养生 | 美容护肤 | 老人养生 | 中医养生 | 饮食指南 | 青少年养生 | 饮食指南 | 女性养生 | 男性养生 | 白领养生 | 男性健康 | 两性保健 | 生活禁忌 | 穴位养生 | 两性健康 | 风景头像 | 心理健康 | 养生资讯 | 评测 | 图说花草 | 养花知识 | 花卉诊疗 | 植物百科 | 图说娱乐 | 明星 | 影视 | 综艺 | 八卦 | 爆料 | 花边 | 趣事 | 日韩 | 剧情 | 图说女性 | 时尚美妆 | 整容知识 | 丰胸** | 美体知识 | 时尚穿搭 | 化妆技巧 | 发型设计 | 护肤知识 | 美**选 | 保养技巧 | 时尚包包 | 女士内衣 | 运动健身 | 图说社会 | 旅游 | 百态 | 创业 | 职场 | 军事 | 情感 | 健康 | 美食 | 问答 | 图说知识 | 生活 | 资讯 | 影视 | 女性 | 旅游 | 汽车 | 吃喝 | 科技 | 教学 | 食谱 | 特产 | 功效与作用 | 美食 | | 烘焙 | 手机数码 | win7 | word | Excel | 电脑操作 | Photoshop | win10 | PowerPoint | 数码 | 教育 | 手抄报 | 简笔画 | 简笔画大全 | 故事 | 折纸 | 节日节气 | 历史 | 优品 | 家居知识 | 家居 | 母婴 | 星座 | 街拍 | 图说排名 | 生活 | 旅游 | 娱乐 | 城市 | ** | 教育 | 科技 | 行业 | 军事 | 人物 | 体育 | 图说亲子 | 备孕 | 孕期 | 分娩 | 产后 | 新生儿 | 幼儿 | 婴儿 | 早教 | 儿童 | 用品 | 图说发型 | 女生 | 波波头 | 丸子头 | 花苞头 | 男生 | 编发 | 长发 | 圆脸 | 大脸 | 马尾辫 | 蜈蚣辫 | 麻花辫 | 梨花头 | 盘发 | 卷发 | 直发 | 短发 | 刘海 | 非主流 | 夏季 | 发髻 | 纹理烫 | 荷叶头 | 韩式 | 胖脸 | 娃娃脸 | 瓜子脸 | 长脸 | 方脸 | 欧美头像 | 个性头像 | 唯美头像 | 文字头像 | 带字头像 | 伤感头像 | 黑白头像 | 霸气头像 | 超拽头像 | 颓废头像 | 清新头像 | 意境头像 | 背影头像 | 抽烟头像 | 搞笑头像 | 小孩头像 | 游戏头像 | 动物头像 | 汽车头像 | 超萌头像 | 创意头像 | 静物头像 | 非主流头 | 星座头像 | 植物头像 | 节日头像 | 另类头像 | 手绘头像 | 纹身头像 | 明星头像 | 人物头像 | 建筑头像 | 恐怖头像 | 古风头像 | 励志头像 | 风水头像 | 姓氏头像 | 动态头像 | 群头像 | 家用电器 | 手机数码 | 护肤美妆 | 服装饰品 | 食品特产 | 母婴用品 | 时尚生活 | 探索发现 | 科学探寻 | 未解之谜 | 世界之最 | 历史趣闻 | 宇宙探索 | 猎奇八卦 | 世界十大 | 奇异生物 | 图说理财