[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>

 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/5434.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论