自定义组件学习与总结

通过将两个textview 一个checkbox,一个view,组合成一个自定义控件,并能够实现对其属性的自定义

1首先给出布局文件set_item_view.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="65dip" >

<TextView
        android:id="@+id/tv_tittle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dip"
        android:layout_marginTop="10dip"
      
        android:textColor="#000000"
        android:textSize="20sp" />

<TextView
        android:id="@+id/tv_des"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tv_tittle"
        android:layout_marginLeft="10dip"
    
        android:textColor="#88000000"
        android:textSize="18sp" />

<CheckBox
        android:clickable="false"
       
        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="10dip" />

<View
        android:layout_width="fill_parent"
        android:layout_height="0.2dip"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="5dip"
        android:layout_marginRight="5dip"
        android:background="#000000" />

</RelativeLayout>

2 自定义一个类,并集成RelativeLayout,并实现其中的一些方法

public class SetItemView extends RelativeLayout {
    private CheckBox cb_status;
    private TextView tv_tittle;
    private TextView tv_des;
    private String deson;
    private String desoff;

    private void initview(Context context) {
        View.inflate(context, R.layout.set_item_view, SetItemView.this);
        cb_status = (CheckBox) findViewById(R.id.cb_status);
        tv_tittle = (TextView) findViewById(R.id.tv_tittle);
        tv_des = (TextView) findViewById(R.id.tv_des);
    }

    public SetItemView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        initview(context);
    }

    public SetItemView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initview(context);
        String tittle = attrs.getAttributeValue(
                "http://schemas.android.com/apk/res/com.djf.mobilesafty",
                "tittle");
        deson = attrs.getAttributeValue(
                "http://schemas.android.com/apk/res/com.djf.mobilesafty",
                "deson");
        desoff = attrs.getAttributeValue(
                "http://schemas.android.com/apk/res/com.djf.mobilesafty",
                "desoff");
        tv_tittle.setText(tittle);
        SetDesc(desoff);
    }

    public SetItemView(Context context) {
        super(context);
        initview(context);
    }

    // 判断组件是否被选中
    public boolean isChecked() {
        return cb_status.isChecked();
    }

    // 设置组件状态
    public void SetChecked(boolean checked) {
        if (checked) {
            tv_des.setText(deson);
        }
        else {
            tv_des.setText(desoff);
        }
        cb_status.setChecked(checked);
    }

    // 设置描述信息
    public void SetDesc(String string) {
        tv_des.setText(string);
    }

}

3 实现自定义组合控件的属性
先定义一个自定义的命名空间xmlns:djf="http://schemas.android.com/apk/res/com.djf.mobilesafty"

红色字体需要特别注意,一个为命名控件,一个为包名

然后就可以自定义属性

<com.djf.mobilesafty.ui.SetItemView
        android:id="@+id/siv_update"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        djf:desoff="自动升级已经关闭"
        djf:deson="自动升级已经开启"
        djf:tittle="设置自动升级状态" >
    </com.djf.mobilesafty.ui.SetItemView>

<com.djf.mobilesafty.ui.SetItemView
        android:id="@+id/siv_update"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        djf:desoff="手机防盗状态已经关闭"
        djf:deson="手机防盗状态已经开启"
        djf:tittle="设置手机防盗状态" >
    </com.djf.mobilesafty.ui.SetItemView>

其中上面红色字体为上面自定义类的包名~~~~

至此一个简单的自定义组件及其属性介绍完毕,还可以为该自定义组件定义单击属性等~~~~

时间: 2024-10-14 15:54:22

自定义组件学习与总结的相关文章

Vue1.0学习总结(4)———Vue1.0自定义组件、Vue1.0组件之间的通信

Vue自定义组件: 组件:就是一个大的对象:new Vue({})就是一个组件定义一个组件:1.全局组件: <div id="box"> <aaa></aaa> </div> var Aaa=Vue.extend({ template:'<h3>我是一个标题</h3>' }); Vue.component('aaa',Aaa); a)给自定义的组件添加数据: data必须是函数的形式,函数必须返回一个对象(json

vue2.0学习笔记之自定义组件

step one:    推荐结构 step two:    Loading.vue <template> <h3>{{msg}}</h3> </template> <script> export default { data(){ return { msg: "loading" } } } </script> <style scoped> h3 { color: #699; } </style&

Qsys自定义组件的开始-Avalon总线规范(中文)

学习FPGA这么长时间了,一直没有整理自己的学习内容,这回要把每一段时间的学习内容总结一下,就从自定义组件开始吧.一定要坚持下来呀!! Avalon 总线规范 参考手册   (Avalon从端口传输与流模式从端口传输部分)  //*************************************    http://www.altera.com 免责声明: 本手册原自Altera 公司发布的<Avalon Bus Specification-Reference Manual>,一切权力

安卓开发_浅谈自定义组件

在Android中,所有的UI界面都是由View类和ViewGroup类及其子类组合而成.其中,View类是所有UI组件的基类,而ViewGroup类是容纳这些UI组件的容器. 其本身也是View类的子类. 在实际开发中,View类还不足以满足程序所有的需求.这时,便可以通过继承View类来开发自己的组件. 开发自定义组件的步骤: 1.创建一个继承android.view.View类的View类,并且重写构造方法. 2.根据需要重写相应的方法. 3.创建并实例化自定义View类,并将其添加到布局

自定义组件之卫星Button(一)

方案来自慕课网,因水平和记忆力有限,将方案记录于此. 移动开发一个好的应用离不开漂亮的UI,漂亮的UI离不开充满想象力的UI组件.在此记录一个自定义UI组件的案例,也是学习自定义UI的开始.本例是satellite-menu的一种实现.satellite-menu效果如下图: 我们需要认识这个组件.这个组件相较于其他组件有两个特别的属性.一个是组件的位置,另一个是组件Item与Button的距离.这两个属性,我们希望开发者能自定. 第一步,我们在value文件夹下,建立一个xml文件attr.x

Android自定义组件系列【5】——进阶实践(2)

上一篇<Android自定义组件系列[5]--进阶实践(1)>中对任老师的<可下拉的PinnedHeaderExpandableListView的实现>前一部分进行了实现,这一篇我们来看看ExpandableListView的使用并实现剩下的部分. 原文出处:http://blog.csdn.net/singwhatiwanna/article/details/25546871 一.ExpandableListView的用法 ExpandableListView是ListView的

GitHub--FoldAbleLayout可折叠组件学习(二)

接上文: GitHub–FoldAbleLayout可折叠组件学习(一) 遗留问题 同样是使用Picasso,图片存于drawable文件夹中,RecycleView的界面滑动十分卡顿.查看Github作者的例子,图片存在assets文件夹中存放图片,通过Picasso传入图片的路径就可以很流畅的加载出图片. 我分别实验了两种:图片放在drawable文件夹下和asset文件夹下. Drawable文件夹下,AS内存使用情况: 显示内存消耗过多,程序运行卡顿. 在Asset文件夹下,AS的内存使

Vue组件的操作-自定义组件,动态组件,递归组件

作者 | Jeskson 来源 | 达达前端小酒馆 v-model双向绑定 创建双向数据绑定,v-model指令用来在input,select,checkbox,radio等表单控件.v-model指令在内部使用不同的属性为不同的输入元素抛出不同的事件. v-mdel指令实现数据的双向绑定: <div> 用户名:<input type="text" v-model="name"> </div> 输入用户名是:{{name}} &l

【ExtJS】自定义组件datetimefield(一)

目的: ExtJS中提供了下拉日期选择控件Ext.form.field.Date与下拉时间选择控件Ext.form.field.Time.不过没有一个在选择日期时选择时间的控件datetimefield.目的就是运用自定义组件的方法,来扩展下拉日期选择控件Ext.form.field.Date,在下拉框中添加时间选择的组件.目标效果: 第一步:继承Ext.picker.Date,创建My.picker.DateTime类 1 Ext.define('My.picker.DateTime', {