zoukankan      html  css  js  c++  java
  • [android] 手机卫士自定义控件的属性

    上一节完成的自定义组合控件,灵活性不够,控件的显示信息上,仿照系统属性,自定义自己的属性

    上一节组合控件SettingItemView中有三个控件,分别是TextView大标题,TextView描述,CheckBox复选框

    自定义属性 tsh:title=”大标题” 和tsh:desc_on=”小标题开启”,tsh:desc_off=”小标题关闭”

    添加命名空间,xmlns:tsh=”http://schemas.android.com/apk/res/包名"

    res/values/目录下创建 attrs.xml文件

    添加节点 <declare-styleable name=”TextView”>

    节点下添加节点<attr name=”title” format=”string”/>,添加其他两个属性的节点

    在布局文件使用的时候,会调用带有两个参数的构造方法

    在这个构造方法里面,会传递一个AttributeSet对象

    调用AttributeSet对象的getAttributeValue()方法,得到属性值,参数:索引位置,不推荐

    调用AttributeSet对象的getAttributeValue(namespace,name)方法,参数:命名空间,属性名

    调用TextView对象的setText()方法,直接给设置进去

    描述部分,在setChecked()方法里面,判断,再设置

    SettingItemView.java

    package com.qingguow.mobilesafe.ui;
    
    import android.content.Context;
    import android.util.AttributeSet;
    import android.view.View;
    import android.widget.CheckBox;
    import android.widget.RelativeLayout;
    import android.widget.TextView;
    
    import com.qingguow.mobilesafe.R;
    
    public class SettingItemView extends RelativeLayout {
        private TextView tv_title;
        private TextView tv_desc;
        private CheckBox cb_status;
        private String desc_on;
        private String desc_off;
        /**
         * 初始化View对象
         * @param context
         */
        private void initView(Context context) {
            View.inflate(context, R.layout.setting_item_view, this);
            cb_status=(CheckBox) this.findViewById(R.id.cb_status);
            tv_desc=(TextView) this.findViewById(R.id.tv_desc);
            tv_title=(TextView) this.findViewById(R.id.tv_title);
            
        }
        /**
         * 判断是否选中
         * @return
         */
        public boolean isChecked(){
            return cb_status.isChecked();
        }
        /**
         * 设置是否选中
         * @param status
         */
        public void setChecked(boolean status){
            if(status){
                tv_desc.setText(desc_on);
            }else{
                tv_desc.setText(desc_off);
            }
            cb_status.setChecked(status);
        }
        /**
         * 设置显示文本
         * @param text
         */
        public void setDesc(String text){
            tv_desc.setText(text);
        }
        public SettingItemView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            initView(context);
        }
    
        public SettingItemView(Context context, AttributeSet attrs) {
            super(context, attrs);
            initView(context);
         //获取传递的属性 String title
    =attrs.getAttributeValue("http://schemas.android.com/apk/res/com.qingguow.mobilesafe", "title"); tv_title.setText(title); desc_on=attrs.getAttributeValue("http://schemas.android.com/apk/res/com.qingguow.mobilesafe", "desc_on"); desc_off=attrs.getAttributeValue("http://schemas.android.com/apk/res/com.qingguow.mobilesafe", "desc_off"); } public SettingItemView(Context context) { super(context); initView(context); } }

    activity_setting.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tsh="http://schemas.android.com/apk/res/com.qingguow.mobilesafe"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:background="#ccc"
            android:gravity="center"
            android:text="设置中心"
            android:textSize="20sp" />
    
        <com.qingguow.mobilesafe.ui.SettingItemView
            tsh:title="设置自动更新"
            tsh:desc_on="设置自动更新开启"
            tsh:desc_off="设置自动更新关闭"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/siv_item">
        </com.qingguow.mobilesafe.ui.SettingItemView>
    
    </LinearLayout>

    attrs.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
        <declare-styleable name="TextView">
            <attr name="title" format="string" />
            <attr name="desc_on" format="string" />
            <attr name="desc_off" format="string" />
        </declare-styleable>
    
    </resources>
  • 相关阅读:
    关于回溯与招聘市场
    关于回溯与马
    关于回溯和后宫
    关于兔子
    关于递归和斐波那契数列
    关于递归和汉诺塔
    关于简单汉诺塔
    nodejs报错roll back,because of a error.node.js setup wizard ended prematurel
    fatal error C1859 意外的预编译头错误,只需重新运行编译器
    sqlserver2008 无法设置主体sa的凭据
  • 原文地址:https://www.cnblogs.com/taoshihan/p/5366045.html
Copyright © 2011-2022 走看看