- 浏览: 627841 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (164)
- android(基础) (81)
- android(进阶) (2)
- android(底层) (7)
- android(面试) (0)
- android(多媒体) (1)
- android(组件学习) (4)
- android(网络相关) (0)
- android(动画) (1)
- android(数据库) (2)
- android(UI样式) (3)
- android(xml) (0)
- android(调试) (14)
- android(环境搭建) (7)
- android(api) (1)
- C++ (1)
- C (0)
- JavaSE (2)
- Objective-c (1)
- JavaScript (0)
- 设计模式 (0)
- eclipse (3)
- javaee (4)
- 其它 (5)
- linux (18)
- Oracle (1)
- mysql (1)
- 嵌入式linux (1)
- 版本控制工具 (3)
- web前端 (1)
- python (1)
最新评论
-
chungehenyy:
android颜色对应的xml配置值,颜色表 -
u011467537:
...
android中用Spannable在TextView中设置超链接、颜色、字体 -
SurpriseLee:
不能更赞了!
android颜色对应的xml配置值,颜色表 -
u012094586:
这个代码是不是不全呀,能不能提供完整版的给予参考呢?xiexi ...
Android VideoView如何播放RTSP的流 -
luechenying:
顶上天!!!!!!!!!!!!!!!!!!
android颜色对应的xml配置值,颜色表
创建自定义控件根据控件的需求主要有一下几种方案:
1、如果现有的控件已经具备了你想要的功能,那么修改或者扩展它们的外观或行为。通过override事件处理函数和onDraw,仍然调用父类的方法,在你定制控件时就不需要重新实现它的功能。
2、组合控件来创建原子的、可重用的widgets,它会引发一些相互关联的控件的功能性发生变化。例如,你可以创建一个下拉的combobox,通过组合一个TextView和一个Button,当点击Button时,显示一个浮动的ListView。
3、当你需要一个完全不同的界面,而不能通过改变和组合现有的控件来达到的时候,选择创建一个全新的控件。
CheckableImageButton
Android自带的ImageButton是不支持像CheckBox, RadioButton拥有的check(选中)状态的,Android提供的组件还算丰富,我们能用这些组件快速开发一个简单的应用程序,但在比较复杂项目中就会感觉捉襟见肘了,但幸好在Android系统上开发者能自由定制自己的UI组件,来弥补现有组件的不足。
创建一个CheckableImageButton需要做的工作:
1. 添加资源文件 res/values/attrs.xml,添加自定义组件CheckableImageButton,声明is_checked和personality属性,以后就能通过这两个属性在XML文件中指定相关属性的值。
2. 创建ImageButton的背景,使用Selector Drawable。
jimi:is_checked="true"是(1)中自定义的属性
3. 创建布局文件,可以指定自定义属性的值。
4. 创建自定义类,继承至ImageButton。让自定义类有ImageButton的所有功能。在构造方法中通过TypedArray读取自定义属性的值。
5. 实现Checkable接口。
接口如下:
自定义类全部代码:
1、如果现有的控件已经具备了你想要的功能,那么修改或者扩展它们的外观或行为。通过override事件处理函数和onDraw,仍然调用父类的方法,在你定制控件时就不需要重新实现它的功能。
2、组合控件来创建原子的、可重用的widgets,它会引发一些相互关联的控件的功能性发生变化。例如,你可以创建一个下拉的combobox,通过组合一个TextView和一个Button,当点击Button时,显示一个浮动的ListView。
3、当你需要一个完全不同的界面,而不能通过改变和组合现有的控件来达到的时候,选择创建一个全新的控件。
CheckableImageButton
Android自带的ImageButton是不支持像CheckBox, RadioButton拥有的check(选中)状态的,Android提供的组件还算丰富,我们能用这些组件快速开发一个简单的应用程序,但在比较复杂项目中就会感觉捉襟见肘了,但幸好在Android系统上开发者能自由定制自己的UI组件,来弥补现有组件的不足。
创建一个CheckableImageButton需要做的工作:
1. 添加资源文件 res/values/attrs.xml,添加自定义组件CheckableImageButton,声明is_checked和personality属性,以后就能通过这两个属性在XML文件中指定相关属性的值。
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- custom checkable imageButton --> <declare-styleable name="CheckableImageButton"> <attr name="is_checked" format="boolean"/> <attr name="personality"> <enum name="radio" value="0"/> <enum name="check" value="1"/> </attr> </declare-styleable> </resources>
2. 创建ImageButton的背景,使用Selector Drawable。
<?xml version="1.0" encoding="UTF-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:jimi="http://schemas.android.com/apk/res/com.seclock.jimi"> <item android:state_pressed="true" android:drawable="@drawable/transparent" /> <item jimi:is_checked="true" android:drawable="@drawable/checkable_image_btn_state_checked" /> <item android:drawable="@drawable/transparent" /> </selector>
jimi:is_checked="true"是(1)中自定义的属性
3. 创建布局文件,可以指定自定义属性的值。
<?xml version="1.0" encoding="UTF-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" xmlns:jimi="http://schemas.android.com/apk/res/com.seclock.jimi" android:layout_width="fill_parent" android:layout_height="fill_parent"> <you.package.name.CheckableImageButton android:layout_width="fill_parent" android:layout_height="fill_parent" jimi:is_check="true" jimi:personality="radio" /> </LinearLayout>
4. 创建自定义类,继承至ImageButton。让自定义类有ImageButton的所有功能。在构造方法中通过TypedArray读取自定义属性的值。
5. 实现Checkable接口。
接口如下:
/** * Change the checked state of the view * * @param checked The new checked state */ void setChecked(boolean checked); /** * @return The current checked state of the view */ boolean isChecked(); /** * Change the checked state of the view to the inverse of its current state * */ void toggle();
自定义类全部代码:
public class CheckableImageButton extends ImageButton implements Checkable { private static final String DEBUG_TAG = CheckableImageButton.class .getSimpleName(); private static final int PERSONALITY_RADIO_BUTTON = 0; private static final int PERSONALITY_CHECK_BUTTON = 1; private static final int[] CHECKED_STATE_SET = { R.attr.checked }; private boolean mChecked; private int personality; private boolean mBroadcasting; private OnCheckedChangeListener mOnCheckedChangeListener; public CheckableImageButton(Context context) { super(context); } public CheckableImageButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public CheckableImageButton(Context context, AttributeSet attrs) { super(context, attrs); // 获取自定义属性的值 TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.checkedImageButton); mChecked = a.getBoolean(R.styleable.checkedImageButton_checked, false); personality = a.getInt(R.styleable.checkedImageButton_personality, PERSONALITY_RADIO_BUTTON); setChecked(mChecked); // Give back a previously retrieved StyledAttributes, for later re-use. a.recycle(); } @Override public boolean performClick() { // 拦截点击事件处理check if (personality == PERSONALITY_CHECK_BUTTON) { toggle(); } else if (personality == PERSONALITY_RADIO_BUTTON) { setChecked(true); } return super.performClick(); } @Override public void setChecked(boolean checked) { Log.d(DEBUG_TAG, "setChecked:" + checked); if (mChecked != checked) { mChecked = checked; // 状态改变刷新视图 refreshDrawableState(); } if (mBroadcasting) { return; } mBroadcasting = true; if (null != mOnCheckedChangeListener) { mOnCheckedChangeListener.onCheckedChanged(this, mChecked); } mBroadcasting = false; } @Override public boolean isChecked() { return mChecked; } @Override public void toggle() { setChecked(!mChecked); } @Override public int[] onCreateDrawableState(int extraSpace) { int[] states = super.onCreateDrawableState(extraSpace + 1); if (isChecked()) { mergeDrawableStates(states, CHECKED_STATE_SET); } return states; } @Override protected void drawableStateChanged() { super.drawableStateChanged(); // invalidate(); } public static interface OnCheckedChangeListener { /** * interface definition for a callback to be invoked when the checked * image button changed * * @param button * @param isChecked * */ public void onCheckedChanged(CheckableImageButton button, boolean isChecked); } /** * @Title: 保存状态. * @author Anders */ static class SaveState extends BaseSavedState { boolean checked; public SaveState(Parcel in) { super(in); checked = (Boolean) in.readValue(null); } public SaveState(Parcelable superState) { super(superState); } @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeValue(checked); } public static final Parcelable.Creator<SaveState> CREATOR = new Creator<CheckableImageButton.SaveState>() { @Override public SaveState[] newArray(int size) { return new SaveState[size]; } @Override public SaveState createFromParcel(Parcel source) { return createFromParcel(source); } }; } @Override protected Parcelable onSaveInstanceState() { Parcelable superParcelable = super.onSaveInstanceState(); SaveState ss = new SaveState(superParcelable); ss.checked = isChecked(); return ss; } @Override protected void onRestoreInstanceState(Parcelable state) { SaveState ss = (SaveState) state; super.onRestoreInstanceState(ss.getSuperState()); setChecked(ss.checked); } public OnCheckedChangeListener getmOnCheckedChangeListener() { return mOnCheckedChangeListener; } public void setmOnCheckedChangeListener( OnCheckedChangeListener mOnCheckedChangeListener) { this.mOnCheckedChangeListener = mOnCheckedChangeListener; } }
发表评论
-
Fragment 横竖屏切换问题
2013-04-24 14:41 1877在默认情况下当发生横 ... -
Android EditText 增加自定义过滤
2012-02-19 22:20 2435在Android中,可以通过对EditText设置setFil ... -
解决android textview自动换行问题
2012-02-16 11:46 10811今天忽然发现android项目中的文字排版参差不齐的情况非常严 ... -
通过adb命令获取Android手机的IP地址
2011-12-30 19:11 4411要获取Android手机的IP地址,必须先保证你的Androi ... -
Android 图形用户界面 之 绘图(二) Paint类 主要方法介绍
2011-12-30 09:10 1482/** * Paint类介绍 * * Pa ... -
ListView底部分隔线的问题
2011-12-20 14:42 4339在工作中遇到了一个难题,就是一个listView在最下面的一个 ... -
android获取手机上的图片和视频缩略图thumbnails
2011-11-03 22:05 10085转贴自:http://www.android123.com.c ... -
Activity中使用AIDL让Service与Activity通信
2011-10-25 00:06 2811简易计算器,默认执行1+1的计算,点击go按钮执行计算,先看效 ... -
Android图形报表之AchartEngine(附开发包+API文档)
2011-10-22 16:49 11425统计报表: Java4Less (http://java4le ... -
android中用Spannable在TextView中设置超链接、颜色、字体
2011-10-21 23:08 50584昨晚研读 ApiDemo 源码至 com.example.an ... -
android动态设置TextView字体颜色
2011-10-21 11:50 6492最近写程序就遇到了这么个难题,在TextView 上,正常字体 ... -
layer-list和include的使用
2011-10-20 10:14 2424layer-list,include,merge使用,记录一下 ... -
自定义AlertDialog样式,根据屏幕大小来显示
2011-10-19 12:43 4642先介绍一些关于AlertDialog的基本知识: ... -
Android获取屏幕分辨率及DisplayMetrics简介
2011-10-19 08:56 2846Android 可设置为随着窗口大小调整缩放比例,但即便如此, ... -
android资源文件访问android.resource
2011-10-17 09:14 4230android.resource使用转自:http://www ... -
ImageView添加边框
2011-10-16 19:37 2130import android.content.Context; ... -
Android 实现TextView中文字链接的方式
2011-10-16 14:08 2538Android 的实现TextView中文字链接的方式有很多种 ... -
android实现TextView多行文本滚动
2011-10-16 13:38 6459Android中我们为了实现文本的滚动可以在ScrollVie ... -
ListView之setEmptyView的问题
2011-10-15 23:19 4988使用listView或者gridView时,当列表为空时,有时 ... -
去掉TabActivity底部默认白线
2011-10-15 16:38 3318经过一翻百度,google终于实现了TabActivity设置 ...
相关推荐
为了解决这个问题,我们可以自定义一个Checkable控件,使得点击ListView的任何一项即可选中或取消选中对应的checkbox。下面将详细介绍如何实现这一功能。 首先,我们需要创建一个新的View类,继承自Checkable接口。...
在Android开发中,自定义控件是提升应用用户体验和界面个性化的重要手段。本教程将深入讲解如何创建一个具有检查状态的自定义ImageView,允许显示"checked"和"unchecked"两种不同的图片状态。虽然当前实现中,这两种...
博客《 带checkbox的ListView实现(二)——自定义Checkable控件的实现方法》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/40475367
- `android:state_checkable`: 如果为`true`,表示控件可被选中或取消选中,如CheckBox。 - `android:state_checked`: 如果为`true`,表示控件当前处于选中状态,如RadioButton或CheckBox。 - `android:state_...
本文将深入探讨如何在Android中创建自定义控件样式,以及如何通过XML文件来实现这些样式。 首先,自定义控件样式通常在项目的`res/drawable`目录下定义,通过XML文件来描述。这些XML文件可以定义多种状态,并为不同...
自定义控件的创建通常涉及到重写onDraw()方法来绘制自定义的UI,或者使用LayoutInflater和XML布局文件来定义控件的外观。 在Android的UI开发中,使用自定义View可以提供更大的灵活性,允许开发者创造出与应用品牌...
通过自定义ImageView,实现了Checkable接口,使用了attrs.xml文件添加自定义属性,实现了图片的切换效果。 知识点1:Android ImageView的基本知识 ImageView是Android中一个基本的控件,用于显示图片。它有多种展示...
了解其属性(如 text、icon、checkable 等)和信号(如 clicked())对于自定义 Button 是必要的起点。 3. **QGraphicsView 和 QGraphicsScene**:为了实现更复杂的自定义效果,可以使用 QGraphicsView 和 ...
如果系统提供的CheckedTextView不能满足需求,可以创建自定义的Checkable布局。实现Checkable接口,覆写其`setChecked()`、`isChecked()`和`toggle()`方法,以实现自定义的选中效果。 8. **优化性能**: 考虑使用...
在Android开发中,自定义控件是一个常见的需求,特别是对于UI元素如CheckBox,有时需要根据设计需求进行定制化。本文将详细介绍如何自定义一个CheckBox,包括处理`wrap_content`问题和实现动画效果。 首先,从描述...
在Android应用开发中,`Chip`控件是一个非常实用的组件,它通常用于展示可选的、标签式的信息。...同时,通过学习这个项目的源码,你还可以学习到如何在Android中创建自定义视图组件,提升你的开发技能。
在本项目中,开发者创建了一个自定义的 `UIPickerView`,名为 "ALPickerView",它增加了选择功能,使得用户界面更加友好且实用。下面我们将详细探讨 `UIPickerView` 的基本概念,以及如何通过自定义来增强其功能。 ...
另外,如果自定义View需要根据用户的选择状态改变显示,可以使用`CheckedTextView`或自定义的Checkable接口。 总的来说,这个示例提供了如何在Android的ListView中实现长按子项添加自定义View的参考。通过学习和...
1. **自定义类**:首先,我们需要创建一个新的Java类,继承自TextView,然后实现Checkable接口。Checkable接口包含三个方法:`isChecked()`, `setChecked(boolean checked)`, 和 `toggle()`。我们需要在这些方法中...
1. **自定义View/布局类**:创建一个继承自Android原生布局(如LinearLayout或RelativeLayout)的自定义布局类。在这个类中,我们可以添加额外的属性和行为,例如选中状态。 2. **选中状态管理**:利用Android的`...
这个"Android高级应用源码-UITableView ios风格控件.rar"压缩包提供了一个专为Android设计的仿iOS UITableView风格的控件,它可以帮助开发者创建具有滚动列表功能的界面,这些界面在视觉和交互上接近于iOS的应用。...
通过以上介绍,我们可以看出DTree作为一款JavaScript树形菜单控件,不仅提供了丰富的功能,还具备良好的扩展性和自定义性。无论是小型项目还是大型应用,DTree都能提供优秀的用户体验。在实际开发中,结合压缩包中的...
在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。自定义ListView的选中效果是一项常见的需求,这可以提升用户体验并增加应用的视觉吸引力。本篇将深入探讨如何实现Android ListView的自定义选中...