- 浏览: 618452 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (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 1791在默认情况下当发生横 ... -
Android EditText 增加自定义过滤
2012-02-19 22:20 2391在Android中,可以通过对EditText设置setFil ... -
解决android textview自动换行问题
2012-02-16 11:46 10599今天忽然发现android项目中的文字排版参差不齐的情况非常严 ... -
通过adb命令获取Android手机的IP地址
2011-12-30 19:11 4332要获取Android手机的IP地址,必须先保证你的Androi ... -
Android 图形用户界面 之 绘图(二) Paint类 主要方法介绍
2011-12-30 09:10 1425/** * Paint类介绍 * * Pa ... -
ListView底部分隔线的问题
2011-12-20 14:42 4292在工作中遇到了一个难题,就是一个listView在最下面的一个 ... -
android获取手机上的图片和视频缩略图thumbnails
2011-11-03 22:05 10010转贴自:http://www.android123.com.c ... -
Activity中使用AIDL让Service与Activity通信
2011-10-25 00:06 2760简易计算器,默认执行1+1的计算,点击go按钮执行计算,先看效 ... -
Android图形报表之AchartEngine(附开发包+API文档)
2011-10-22 16:49 11330统计报表: Java4Less (http://java4le ... -
android中用Spannable在TextView中设置超链接、颜色、字体
2011-10-21 23:08 50415昨晚研读 ApiDemo 源码至 com.example.an ... -
android动态设置TextView字体颜色
2011-10-21 11:50 6423最近写程序就遇到了这么个难题,在TextView 上,正常字体 ... -
layer-list和include的使用
2011-10-20 10:14 2387layer-list,include,merge使用,记录一下 ... -
自定义AlertDialog样式,根据屏幕大小来显示
2011-10-19 12:43 4557先介绍一些关于AlertDialog的基本知识: ... -
Android获取屏幕分辨率及DisplayMetrics简介
2011-10-19 08:56 2796Android 可设置为随着窗口大小调整缩放比例,但即便如此, ... -
android资源文件访问android.resource
2011-10-17 09:14 4148android.resource使用转自:http://www ... -
ImageView添加边框
2011-10-16 19:37 2074import android.content.Context; ... -
Android 实现TextView中文字链接的方式
2011-10-16 14:08 2477Android 的实现TextView中文字链接的方式有很多种 ... -
android实现TextView多行文本滚动
2011-10-16 13:38 6368Android中我们为了实现文本的滚动可以在ScrollVie ... -
ListView之setEmptyView的问题
2011-10-15 23:19 4953使用listView或者gridView时,当列表为空时,有时 ... -
去掉TabActivity底部默认白线
2011-10-15 16:38 3257经过一翻百度,google终于实现了TabActivity设置 ...
相关推荐
通过自定义Checkable控件,来实现点击ListView中的Item来监听其中的cheakbox.体验效果更好
博客《 带checkbox的ListView实现(二)——自定义Checkable控件的实现方法》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/40475367
checkable-chip-view,适用于Android的可检查小部件,博客附件,效果请查看博客相对应项目。
CheckableTextView Checkable TextView [KOTLIN]:high_voltage:用Kotlin编写的简单灵活的Checked TextView或Checkable TextView:high_voltage:新增功能CheckableTextView Checkable TextView [KOTLIN]:high_voltage:...
自定义的一个uipickerview,实现可以选择的功能,还是蛮好用的,需要的可以下下来研究下。
AndroidCheckableButton ... 在默认和选定状态下为边框创建两个形状 checkable_default_border.xml <? xml version = " 1.0 " encoding = " utf-8 " ?> < stroke android : width = " 1dp
不过CheckBox的超类CompoundButton实现了Checkable接口,这一点值得借鉴。 下面记录一下遇到的问题,并从源码的角度解决。 问题一: 支持 wrap_content 由于是直接继承自View,wrap_content需要进行特殊处理。 View...
博客《带checkbox的ListView实现(三)——CheckableImageView的实现方法》源码,博客地址:http://blog.csdn.net/harvic880925/article/details/41948211
相当可检查 - Meteor Smart 包 这是一个作为一个流星智能包。 如何使用? 安装 mrt add pretty-checkable
Android的可检查小部件。基于Google I/O 2018应用程序的EventFilterView。
CheckableTextView:简单灵活的Checked TextView或Checkable TextView
或者,通过 Bower 安装: bower install m-checkable ,通过 NPM npm install m-checkable : npm install m-checkable通过 NuGet PM> Install-Package mCheckable 执照 在 MIT 许可下发布 - 由巴兰·米罗斯拉夫...
OneBottomNavigationBar 是自定义的一个实现App应用底部导航栏功能的View,可以实现底部 2-5 个导航菜单(一般不会有更多),可以实现某一个菜单凸起的效果,如,有5个菜单,可以选择让第三个菜单凸起(floating),...
这是由美联储经济数据库(FRED)托管的美联储数据集。FRED有一个数据平台,它们根据数据更新的频率来更新其信息。 TCD.csv TCDSL.csv total-checkable-deposits_...total-checkable-deposits_metadata_1.json
草稿js可检查列表插件 ... yarn add draft-js-checkable-list-plugin用法例子 import React , { Component } from 'react'import { EditorState } from 'draft-js'import Editor from 'draft-js-plugins-editor'import ...
自定义动画、颜色、自定义,使其成为您武器库中的必备组件。 它是高度可配置的,适用于手机和平板电脑。 CheckableView 仅适用于 API 级别 15+,但是,您可以分叉/克隆并修改它。 有关用法和示例,请参见下文。 ...
NULL 博文链接:https://yingzhuo.iteye.com/blog/1740617
QTreeView Checkboxes 需要实现一个功能:在QT的TreeView中,能够使用复选框,并且选中父节点的复选框可以全选或取消子节点的复选框。 参考链接: http://blog.csdn.net/ajaxhe/article/details/7518285
2. 其列表项包含多个checkable的部件,当选择某一行时,该行包含的checkable的部件需要作出相应的变化; 3. 可以选择多个列表项,并且这些列表项可被读出 结果图: 实现: 1. 创建主layout用于规划列表显示。对于...
一个简单灵活的Checked TextView或Checkable TextView