编写自定义的 Android Preference 组件
16lz
2021-01-23
Android SDK 提供好几个 Preference 组件,例如 CheckBoxPreference、EditTextPreference、DialogPreference、ListPreference 等,这些组件是跟 Android 提供的 Preference 存储机制绑定的,你可以通过这些组件来修改应用的一些配置,如下图所示,这是 Android 自带的系统设置界面:
但这些组件毕竟还不能满足100%的要求,假设我们需要为应用程序提供一个选择不同图片做为应用背景图的设置,我们需要一个很直观的就可以看到当前所选择的图片,然后点击后可以浏览其他图片并选择。那么这些 Preference 就无法满足这个需求,因此我们需要对 Preference 进行扩展,下图是扩展后的效果:
请看中间选项的效果,在右边显示当前选择的图片。
代码如下:
import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceActivity; import android.util.AttributeSet; import android.view.View; import android.widget.ImageView; /** * 图片选项,用于设置图片和边框 * @author Winter Lau */ public class ImageOptionPreference extends Preference { private PreferenceActivity parent; private int mImage = R.drawable.car; private ImageView preview_img; public ImageOptionPreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public ImageOptionPreference(Context context, AttributeSet attrs) { super(context, attrs); } public ImageOptionPreference(Context context) { super(context); } void setActivity(PreferenceActivity parent) { this.parent = parent; } @Override public boolean isPersistent() { return false; } /** * 修改图片 * @param newImage * @return */ boolean ChangeGamePic(int newImage ){ if(this.mImage == newImage) return false; GameGlobal.save_pic(newImage); this.mImage = newImage; preview_img.setImageResource(newImage); return true; } @Override protected void onBindView(View view) { super.onBindView(view); this.mImage = GameGlobal.get_pic(); preview_img = (ImageView)view.findViewById(R.id.pref_current_img); preview_img.setImageResource(this.mImage); } @Override protected void onClick() { super.onClick(); Bundle bundle = new Bundle(); bundle.putInt(GameGlobal.PREF_KEY_IMAGE, this.mImage); Intent intent = new Intent(parent, ImageSelector.class); intent.putExtras(bundle); parent.startActivityForResult(intent, MagicSetting.REQUEST_CODE_GAME_IMAGE); } }
对应的 Perference 配置信息如下
而 preference_widget_image 的信息如下
<?xml version="1.0" encoding="utf-8"?>
而这个 ImageView 的 Layout 就是在选项右边显示的图片。
转载出处:http://www.oschina.net/bbs/thread/2175
更多相关文章
- SDK3.0 组件属性
- 在android中显示网络图片及查看页面源代码
- android之调用webservice实现图片上传
- Android App开发基础篇—四大组件之Activity简介
- Android消息传递之组件间传递消息
- Untity3D项目调用Android 图片错乱问题
- android shape ring 画一个多层嵌套的圆环和圆角图片
- Android中图片压缩分析(上)
- android中图片的三级cache策略(内存、文件、网络)之三:文件缓存策略