zoukankan      html  css  js  c++  java
  • 自定义ItemToggleView

    极力推荐文章:欢迎收藏
    Android 干货分享

    阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android

    本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

    1. 自定义View类实现
    2. 自定义View标签
    3. 自定义View 布局
    4. 自定义View 选择器
    5. 自定义View 素材
    6. Activity 自定义view布局引用
    7. Activity使用自定义View

    自定义ItemToggleView 常用于Settings中,主要控制开关的开启与关闭。

    自定义ItemToggleView实现效果如下:

    开启.jpg
    关闭.jpg

    1. 自定义View类实现

    public class ItemToggleView extends RelativeLayout {
    	private static final String TAG = "ItemToggleView";
    	private TextView tv_title;
    	private TextView tv_des;
    	private static final String NAMESPACE = "http://schemas.android.com/apk/res/com.programandroid";
    	private String mDesTitle;
    	private String mDesOff;
    	private String mDesOn;
    	private ImageView mImageView;
    	private boolean isOnOFF;
    
    	public ItemToggleView(Context context, AttributeSet attrs, int defStyle) {
    		super(context, attrs, defStyle);
    		initAttrs(attrs);
    		initUI(context);
    	}
    
    	public ItemToggleView(Context context, AttributeSet attrs) {
    		super(context, attrs);
    		initAttrs(attrs);
    		initUI(context);
    	}
    
    	public ItemToggleView(Context context) {
    		super(context);
    		initUI(context);
    	}
    
    	// 单独抽取出来的 xml--->view
    	private void initUI(Context context) {
    		View.inflate(context, R.layout.item_toggle_view, this);
    
    		tv_title = (TextView) findViewById(R.id.tv_title);
    		tv_des = (TextView) findViewById(R.id.tv_des);
    
    		mImageView = (ImageView) findViewById(R.id.switch_imageview);
    
    		tv_title.setText(mDesTitle);
    	}
    
    	public boolean getCheck() {
    		return isOnOFF;
    	}
    
    	/**
    	 * @param isCheck
    	 *            传递一个选中未选中的状态变量(true 选中 false未选中)
    	 */
    	public void setCheck(boolean isCheck) {
    		// mSwitchControlView.setChecked(isCheck);
    		if (isCheck) {
    			tv_des.setText(mDesOn);
    			mImageView.setImageDrawable(getResources().getDrawable(
    					R.drawable.toggle_on));
    
    		} else {
    			tv_des.setText(mDesOff);
    			mImageView.setImageDrawable(getResources().getDrawable(
    					R.drawable.toggle_off));
    		}
    		isOnOFF = isCheck;
    	}
    
    	/**
    	 * @param attrs
    	 *            包含了属性名称和属性值的set集合
    	 */
    	private void initAttrs(AttributeSet attrs) {
    		// 打印属性总个数
    		/*
    		 * Log.i(tag, "attrs.getAttributeCount() = "+attrs.getAttributeCount());
    		 * for(int i=0;i<attrs.getAttributeCount();i++){ //获取所有的属性名称 Log.i(tag,
    		 * "属性名称 = "+attrs.getAttributeName(i)); Log.i(tag,
    		 * "属性值 = "+attrs.getAttributeValue(i)); }
    		 */
    
    		mDesTitle = attrs.getAttributeValue(NAMESPACE, "desTitle");
    		mDesOff = attrs.getAttributeValue(NAMESPACE, "desOff");
    		mDesOn = attrs.getAttributeValue(NAMESPACE, "desOn");
    
    		Log.i(TAG, mDesTitle);
    		Log.i(TAG, mDesOff);
    		Log.i(TAG, mDesOn);
    	}
    }
    

    2. 自定义View标签

    1.注意 :自定义 Android 命名空间

    Android 命名空间(xmlns:android="http://schemas.android.com/apk/res/android" )方法一样,想使用自定义view的属性,必须声明自定义view的命名空间
    (xmlns:programandroid="http://schemas.android.com/apk/res/com.programandroid")

    2. 注意:自定义View 属性

    自定义View 属性如下:

      programandroid:desOff="  不选中"
      programandroid:desOn="  选中"
      programandroid:desTitle=" WIFI " 
    

    属性声明在res/values/attrs.xml中定义

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    	<declare-styleable name="ItemCheckView"><!--SettingItemView申明控件,内部可以包含自定义属性-->
    		<attr name="desTitle" format="string"/><!--标题描述属性-->
    		<attr name="desOff" format="string"/><!--关闭更新属性-->
    		<attr name="desOn" format="string"/><!--开启更新属性-->
    	</declare-styleable>
    </resources>
    

    3. 自定义View 布局

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp" >
    
        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@android:color/primary_text_light"
            android:textSize="18sp" />
    
        <TextView
            android:id="@+id/tv_des"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/tv_title"
            android:textColor="@android:color/secondary_text_light"
            android:textSize="14sp" />
    
        <ImageView
            android:id="@+id/switch_imageview"
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:src="@drawable/toggle_on" />
    
    </RelativeLayout>
    

    4. 自定义View 选择器

    <?xml version="1.0" encoding="UTF-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <!-- 按下去的背景颜色显示效果 -->
        <item android:drawable="@drawable/list_item_bg_light_pressed" android:state_pressed="true"/>
        <!-- 获取焦点时背景颜色显示效果 -->
        <item android:drawable="@drawable/list_item_bg_light_pressed" android:state_focused="true"/>
        <!-- 没有任何状态下的背景颜色 -->
        <item android:drawable="@drawable/list_item_bg_light_normal"/>
    
    </selector>
    

    5. 自定义View 素材

    toggle_off.png
    toggle_on.png

    6. Activity 自定义view布局引用

        <com.programandroid.CustomView.ItemToggleView
            xmlns:programandroid="http://schemas.android.com/apk/res/com.programandroid"
            android:id="@+id/custom_item_toggle_view"
            android:layout_width="wrap_content"
            android:layout_height="55dp"
            android:background="@drawable/listview_item_selector"
            programandroid:desOff="  关闭"
            programandroid:desOn="  开启"
            programandroid:desTitle=" WIFI " />
    

    7. Activity使用自定义View

    	/**
    	 * 自定义 ItemToggleView
    	 */
    	private void InitItemToggleView() {
    		// TODO Auto-generated method stub
    		final ItemToggleView mItemToggleView = (ItemToggleView) findViewById(R.id.custom_item_toggle_view);
    		mItemToggleView.setCheck(false);
    		mItemToggleView.setOnClickListener(new OnClickListener() {
    
    			@Override
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				mItemToggleView.setCheck(!mItemToggleView.getCheck());
    			}
    		});
    	}
    

    至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

    微信关注公众号:  程序员Android,领福利

  • 相关阅读:
    WebStorm 使用过程中出现的一些问题以及解决方案
    常用软件工具收集
    个人博客运营策略总结
    OpenGL glMatrixMode() 函数解释与例子
    让搭建在 Github Pages 上的 Hexo 博客可以被 Google 搜索到
    使用 statcounter 统计 Hexo 博客访问量
    使用 Hexo,Material Theme 以及 Github Pages 搭建个人博客
    Ubuntu 16.04下配置 Nginx 与 Node.js 以及服务的部署
    一个简单的在线代码编辑器的实现
    在已有 Windows10 系统的基础上,安装 Ubuntu17.10 系统(新版 BIOS)
  • 原文地址:https://www.cnblogs.com/wangjie1990/p/11310695.html
Copyright © 2011-2022 走看看