Android自定义控件实现
来源:互联网 发布:rc4算法 编辑:程序博客网 时间:2024/04/27 16:14
0 摘要
本文的自定义控件模仿微信的选项条,提供IMAGE/TEXT/MODE属性:
- IMAGE 控制选项条的图标,如果不设置就没有图标;
- TEXT 控制选项条上的文字;
- MODE 控制选项条的背景图案(按理来说,margintop也应该由MODE来控制,由于涉及到另外的接口,所以在本文中没有涉及)
1 定义自定义控件的属性
value/attrs.xml
<resources> <declare-styleable name="ControlOption"> <attr name="Text" format="reference|string"></attr> <attr name="Img" format="reference|integer"></attr> <attr name="Mode" > <enum name="Standalone" value="0"></enum> <enum name="Top" value="1"></enum> <enum name="Middle" value="2"></enum> <enum name="Bottom" value="3"></enum> </attr> </declare-styleable></resources>
2 定义自定义控件布局
layout/control_option.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="wrap_content" android:gravity="center_vertical"> <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="matrix" android:layout_centerVertical="true" android:layout_alignParentLeft="true" android:src="@drawable/find_more_friend_shake" /> <TextView android:id="@+id/text" android:layout_toRightOf="@id/image" android:padding="8dp" android:text="default" android:textSize="17sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:textColor="#000" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="matrix" android:layout_centerVertical="true" android:layout_alignParentRight="true" android:src="@drawable/mm_submenu" /> </RelativeLayout>
3 实现自定义空间类
src/ControlOption.java
public class ControlOption extends RelativeLayout {private static int SRC_BG[] = {R.drawable.preference_single_item,R.drawable.preference_first_item,R.drawable.preference_item,R.drawable.preference_last_item,};private ImageView mImage;private TextView mText;public ControlOption(Context context, AttributeSet attrs) {super(context,attrs);LayoutInflater.from(context).inflate(R.layout.control_option, this, true); mImage = (ImageView)findViewById(R.id.image); mImage.setVisibility(GONE);mText = (TextView)findViewById(R.id.text); int resourceId = -1; TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ControlOption); int N = typedArray.getIndexCount(); for (int i = 0; i < N; i++) { int attr = typedArray.getIndex(i); switch (attr) { case R.styleable.ControlOption_Mode: resourceId = typedArray.getInt(R.styleable.ControlOption_Mode, 0); this.setBackgroundResource(SRC_BG[resourceId]); break; case R.styleable.ControlOption_Text: resourceId = typedArray.getResourceId(R.styleable.ControlOption_Text, 0); mText.setText(resourceId > 0 ? typedArray.getResources().getText(resourceId) : typedArray.getString(R.styleable.ControlOption_Text)); break; case R.styleable.ControlOption_Img: resourceId = typedArray.getResourceId(R.styleable.ControlOption_Img, 0); if(resourceId>0) { mImage.setVisibility(VISIBLE); mImage.setImageResource(resourceId); } break; } } typedArray.recycle(); }};
4 引用自定义控件
<com.shiningstone.myweixin.ControlOption style="@style/option_top" local:Text="个人信息" local:Mode="Top" /><com.shiningstone.myweixin.ControlOption style="@style/option" local:Text="二维码名片" local:Mode="Middle" /><com.shiningstone.myweixin.ControlOption style="@style/option" local:Text="腾讯微博" local:Mode="Bottom" />为了方便起见,增加了style定义,对于自定义控件实现是非必须的。
value/styles.xml
<style name="option"> <item name="android:layout_height">wrap_content</item> <item name="android:layout_width">fill_parent</item> <item name="android:gravity">center_vertical</item> <item name="android:clickable">true</item> </style> <style name="option_top" parent="@style/option"> <item name="android:layout_marginTop">14dp</item> </style>
0 0
- android自定义控件实现
- Android自定义控件实现
- Android自定义控件实现
- Android.自定义控件的实现
- Android.自定义控件的实现
- Android自定义控件的实现
- Android自定义控件的实现
- Android如何实现自定义控件
- Android 自定义控件 实现 创建
- Android.自定义控件的实现
- Android 自定义控件实现分析
- Android自定义控件实现时钟
- Android自定义控件的实现
- Android 自定义实现日历控件
- android自定义View控件,实现自定义进度条控件
- Android自定义控件实现及其布局
- Android实现自定义的 时间日期 控件
- Android自定义控件实现及其布局
- 数据库sql语句练习
- linux 文件操作
- maven POM.xml 标签详解
- 最大限度利用 JavaScript 和 Ajax 性能
- Linux命令简介—mkdir
- Android自定义控件实现
- UNPV22 RPC运行server提示Cannot register service: RPC: Unable to receive; errno = Connection refused
- Android读书笔记------Drawable
- 昌大大神养成计划之网页设计之路第五天
- 【CodeVS P2741】n里的质数
- IOS程序启动原理
- iOS 百度定位实现
- iOS 事件传递流程
- # 欢迎使用Markdown编辑器写博客