zoukankan      html  css  js  c++  java
  • android自定义控件(五) 自定义组合控件

    转自http://www.cnblogs.com/hdjjun/archive/2011/10/12/2209467.html 代码为自己编写

    目标:实现textview和ImageButton组合,可以通过Xml设置自定义控件的属性。 

          通过代码或者通过xml设置自定义控件的属性

    1.控件布局:以Linearlayout为根布局,一个TextView,一个ImageButton。 
      

    Xml代码
    1. < ?xml version="1.0" encoding="utf-8"?>    
    2.     LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"    
    3.     android:layout_width="fill_parent" android:layout_height="fill_parent"    
    4.     android:gravity="center_vertical">    
    5.     TextView android:layout_height="wrap_content" android:id="@+id/text1"    
    6.     android:layout_width="wrap_content">< /TextView>    
    7.     ImageButton android:layout_width="wrap_content"    
    8.     android:layout_height="wrap_content" android:id="@+id/btn1">< /ImageButton>    
    9.     < /LinearLayout>  
    2.自定义控件代码,从LinearLayout继承: 
      
    Java代码
    1. public class ImageBtnWithText extends LinearLayout {    
    2.      }    
    3.       public ImageBtnWithText(Context context) {    
    4.       this(context, null);    
    5.       }    
    6.          
    7.       public ImageBtnWithText(Context context, AttributeSet attrs) {    
    8.       super(context, attrs);    
    9.        //在构造函数中将Xml中定义的布局解析出来。   
    10.       LayoutInflater.from(context).inflate(R.layout.imagebtn_with_text, this, true);  
    11.         }    
    12.       }  
     
    3.在主界面布局xml中使用自定义控件: 
      
    Xml代码 
    1. com.demo.widget2.ImageBtnWithText    
    2.    android:id="@+id/widget"    
    3.    android:layout_width="fill_parent"    
    4.    android:layout_height="fill_parent" />  
    即使用完整的自定义控件类路径:com.demo.widget2.ImageBtnWithText定义一个元素。 
      运行可以看到控件已经能够被加载到界面上。 
    4.给按钮设置图片和文本 
      如果图片是固定不变的,那么直接在控件布局中设置ImageButton的src属性即可。 
      4.1通过Java代码设置,在控件代码中提供函数接口: 
      
    Java代码
    1. public void setButtonImageResource(int resId) {    
    2.    mBtn.setImageResource(resId);    
    3.    }    
    4.       
    5.    public void setTextViewText(String text) {    
    6.    mTv.setText(text);    
    7.    }  
    然后再在主界面的onCreate()通过函数调用设置即可。 
      4.2通过Xml设置属性 
      4.2.1首先定义Xml可以设置的属性集合,在values下创建attrs.xml,文件名可随意,一般都叫attrs.xml 
      
    Xml代码
    1. < ?xml version="1.0" encoding="utf-8"?>    
    2.   resources>    
    3.    declare-styleable name="ImageBtnWithText">    
    4.    attr name="android:text"/>    
    5.    attr name="android:src"/>    
    6.    < /declare-styleable>    
    7.    < /resources>  
    属性集合名字:ImageBtnWithText,自己可根据实际来定义; 
      集合中包含的属性列表,每行一个属性。 
      4.2.2修改自定义控件实现代码,以获取xml中定义的属性 
      
    Java代码
    1. TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ImageBtnWithText);    
    2.   CharSequence text = a.getText(R.styleable.ImageBtnWithText_android_text);    
    3.   if(text != null) mTv.setText(text);    
    4.   Drawable drawable = a.getDrawable(R.styleable.ImageBtnWithText_android_src);    
    5.   if(drawable != null) mBtn.setImageDrawable(drawable);    
    6.   a.recycle();  
    首先通过context.obtainStyledAttributes获得所有属性数组; 
      然后通过TypedArray类的getXXXX()系列接口获得相应的值。 
      4.2.3在主界面布局中设置自定义控件的属 
      android:text="ABC" android:src="@drawable/icon 
      4.3自定义名称属性: 
      在4.2中使用的属性名是Android系统命名空间的,都以android开头,比如android:text等。 
    实际开发中会自定义一些属性名,这些属性名仍然定义在4.2.1提到的attrs.xml中: 
      4.3.1定义属性名 
      
    Xml代码 
    1. attr name="appendText" format="string"/>  
    和直接使用系统的attr不同的是要增加一个format属性,说明此属性是什么格式的。format可选项可参见注1 
      4.3.2使用自定义属性 
      
    Xml代码
    1. < ?xml version="1.0" encoding="utf-8"?>    
    2.    LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
    3.    xmlns:myspace="http://schemas.android.com/apk/res/com.demo.customwidget"    
    4.    android:orientation="vertical" android:layout_width="fill_parent"    
    5.    android:layout_height="fill_parent">    
    6.    com.demo.widget2.ImageBtnWithText    
    7.    android:text="ABC" android:src="@drawable/icon" android:id="@+id/widget"    
    8.    android:layout_width="fill_parent" android:layout_gravity="center"    
    9.    android:layout_height="fill_parent" myspace:appendText="123456">    
    10.    < /com.demo.widget2.ImageBtnWithText>    
    11.    < /LinearLayout>  
    效果图
  • 相关阅读:
    LINQ使用的一点心得 子曰
    Extjs的grid的单元格中加载超链接和按钮 子曰
    关于建立“高保真模型”的必要性 子曰
    DHL:jQuery框架学习使用总结,插件,继续中...
    dhl:mvc用户登陆身份验证
    thickbox.js 及 将thickbox "close or esc key "改为 中文"关闭"
    在 jQuery 中如何判断对象是否存在
    jquery弹出层实例
    dhl:jquery select下拉框,checkbox,选择
    asp.net mvc 中"未找到路径“/favicon.ico”的控制器或该控制器未实现 IController。"
  • 原文地址:https://www.cnblogs.com/chengzhengfu/p/4574092.html
Copyright © 2011-2022 走看看