在android中有时我们需要根据需求自定义控件,自定义组合控件是较简单的一种,下面我们来实现一下设置里面的常用效果:
首先,自定义组合空间主要分为以下几个步骤:
1,编写自定义控件的布局文件.
2,在values目录下,添加自定义控件相对应的,属性资源文件attrs.xml.用来自定义一些属性.
3,创建自定义控件的View对象继承ViewGroup的一个子类就可以了(一般选择RelativeLayout或者LinearLayout),重写参数列表为(Context context, AttributeSet attrs)的构造方法.
4,在构造方法中通过context上下文的obtainStyledAttributes方法找到自定义的属性数组TypedArray(获取结束后记得调用TypedArray.recycle()方法,释放资源.)
5,通过引用自定义组合控件的完整类名就可以在其他布局文件中使用自定义组合控件了,
6,添加自定义组合控件的命名空间声明,就可以在xml布局文件中直接设置第2步中自定义的属性了.
下面一步一步来试试看:
0,创建一个android工程.
1,编写自定义控件的布局文件.
ui_setting.xml:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" > <RelativeLayout android:layout_width="wrap_content" android:layout_height="60dp" > <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="5dp" android:paddingTop="5dp" android:text="设置的说明" android:textSize="26sp" /> <TextView android:id="@+id/tv_desc" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tv_title" android:layout_marginLeft="10dp" android:text="状态" android:textColor="@android:color/darker_gray" android:textSize="14sp" /> </RelativeLayout> <CheckBox android:id="@+id/cb_status" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="5dp" android:clickable="false" android:focusable="false" /> </RelativeLayout>
2.在values目录下,添加自定义控件相对应的属性资源文件attrs.xml.用来自定义一些属性.
attrs.xml:
<resources> <declare-styleable name="MyView"> <attr name="title" format="string" /> <attr name="desc_on" format="string" /> <attr name="desc_off" format="string" /> </declare-styleable> </resources>
3,创建自定义控件的View对象继承ViewGroup的一个子类就可以了(一般选择RelativeLayout或者LinearLayout),重写参数列表为(Context context, AttributeSet attrs)的构造方法.
4,在构造方法中通过context上下文的obtainStyledAttributes方法找到自定义的属性数组TypedArray(获取结束后记得调用TypedArray.recycle()方法,释放资源.)
public class MyView extends LinearLayout { private CheckBox cb_status; private TextView tv_desc; private TextView tv_title; private String title; private String desc_on; private String desc_off; private void init(Context context) { //为当前view对象设置布局 View.inflate(context, R.layout.ui_setting , this); cb_status = (CheckBox) findViewById(R.id.cb_status); tv_desc = (TextView) findViewById(R.id.tv_desc); tv_title = (TextView) findViewById(R.id.tv_title); } //复写父类的构造方法 public MyView(Context context, AttributeSet attrs) { super(context, attrs); //初始化view对象 init(context); // 通过上下文context获取自定义属性 TypedArray typeArr = context.obtainStyledAttributes(attrs,R.styleable.MyView); // 获取在xml文件中,自定义属性的值 title = typeArr.getString(R.styleable.MyView_title); desc_on = typeArr.getString(R.styleable.MyView_desc_on); desc_off = typeArr.getString(R.styleable.MyView_desc_off); //释放资源 typeArr.recycle(); // 设置title setTitle(title); // 设置选中状态 if(isChecked()){ setDesc(desc_on); }else{ setDesc(desc_off); } // 添加点击事件 this.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { setChecked(!isChecked()); } }); } public boolean isChecked() { return cb_status.isChecked(); } public void setChecked(boolean checked){ this.cb_status.setChecked(checked); if(checked){ setDesc(desc_on); }else{ setDesc(desc_off); } } public void setTitle(String title){ tv_title.setText(title); } public void setDesc(String desc){ this.tv_desc.setText(desc); } }
5,通过引用自定义组合控件的完整类名就可以在其他布局文件中使用自定义组合控件,
6,添加自定义组合控件的命名空间声明,就可以在xml布局文件中直接设置第2步中自定义的属性.
自定义控件的命名空间一般这样定义:
xmlns : "别名" = "http://schemas.android.com/apk/res/" + "应用程序包名"
activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:myui="http://schemas.android.com/apk/res/com.***.myview" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <!-- 引用自定义控件的完整类名 --> <com.***.myview.MyView android:id="@+id/mview" android:layout_width="wrap_content" android:layout_height="wrap_content" myui:desc_off="关闭" myui:desc_on="开启" myui:title="自定义的组合控件01" > </com.***.myview.MyView> </LinearLayout>
2014年1月7日 17:50:13 笔记---end
相关推荐
手机安全卫士--Android自定义组合控件实现设置功能,界面采用Android自定义组合控件的方式实现,更多详细信息请访问 http://blog.csdn.net/qq_20889581?viewmode=contents 文明的小流氓的博客
自定义组合控件实现title栏.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
本文将深入探讨如何在Android中实现自定义组合控件,以提高应用的用户体验和界面设计的灵活性。 首先,理解自定义View的基本概念至关重要。自定义View是通过继承已有的View或 ViewGroup 类,然后重写其方法来实现的...
在Android开发中,自定义组合控件是一种常见的需求,它能够帮助我们实现独特且复杂的界面设计,提升用户体验。本文将深入探讨自定义组合控件的概念、实现方式以及它如何体现XML布局思想,同时通过分析提供的文件`...
本文将深入探讨如何根据【标题】"Android自定义组合控件"和【描述】中的内容,结合【标签】"android 自定义控件 组合控件 自定义属性",来创建一个自己的自定义组合控件。 首先,我们要明白什么是自定义控件。在...
本文将深入探讨如何在Android中实现自定义组合控件,以及这一过程中的关键知识点。 首先,我们要理解什么是组合控件。在Android中,组合控件是指由多个基础UI元素(如TextView、ImageView、Button等)组合而成的...
"一套C# 2008 自定义组合控件源码" 提供了五种基本控件的实现:TextBox、Numeric、DateTime、Checkbox和Button,这些都是Windows Forms开发中的基础组件。下面我们将详细探讨这些控件以及如何通过自定义来扩展它们的...
以下将详细介绍Android自定义组合控件的相关知识点。 一、自定义控件的分类 1. 组件扩展:对现有控件进行功能增强或样式修改,例如自定义Button增加动画效果。 2. 组合控件:结合多个基础控件,形成新的复合控件,...
总结起来,Android自定义组合控件的实现涉及到了对Android UI框架的深入理解和实践,包括继承自定义View或ViewGroup、测量与布局、绘制、事件处理等关键步骤。通过这样的方式,开发者可以构建出功能强大、交互丰富的...
3.)第三种方式:)第三种方式:自定义组合控件 定义一个继承自ViewGroup的自定义组合控件,将标题栏的所有元素封装到一个自定义控件中。这样每次需要标题栏时,只需要在布局文件中添加该自定义控件即可,无需关心...
综上所述,自定义组合控件的实现涉及Android View体系结构、XML布局设计、属性定义、Gradle构建配置等多个方面。通过学习和实践这些知识点,开发者能够更灵活地打造满足特定需求的Android应用界面。
总结来说,实现Android自定义组合控件涉及以下几个步骤: 1. 在`attrs.xml`中定义自定义属性。 2. 创建布局文件,使用自定义属性。 3. 编写Java代码,处理自定义控件的行为,解析并应用属性值。 通过以上步骤,你将...
本文将通过一个实例——“自定义组合控件一例”来探讨如何创建一个带斜分的表头,以此加深对Android自定义控件的理解。我们将涵盖以下几个关键知识点: 1. **自定义控件基础**:在Android中,自定义控件通常是通过...
在Android开发中,自定义组合控件是一种常见的技术实践,它可以帮助我们实现更灵活、更具个性化的用户界面。自定义组合控件的本质是通过继承已有的Android基础组件或ViewGroup,然后结合自己的业务需求,扩展出具有...