关于自定义单选框InfoPreference的笔记
时间:2022-07-26
本文章向大家介绍关于自定义单选框InfoPreference的笔记,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.介绍
InfoPreference实现了自定义单选项,效果如下
2.代码
2.1 Preference界面
首先InfoPreference是继承自TwPreference
public class InfoPreference extends TwPreference
而TwPreference继承自RelativeLayout
public abstract class TwPreference extends RelativeLayout
如果要修改Preference的那么在InfoPreference中就可以自定义我们需要的界面
对应的是preference_information.xml
2.2Preference属性
既然是自定义view,自然需要定义自己的属性AttributeSet,具体备注如下
arrts.xml中
<attr name="key" format="string" />
<attr name="title" format="string" />
<attr name="summary" format="string" />
<attr name="show_value" format="boolean" />
<attr name="show_divider" format="boolean" />
<attr name="show_right_icon" format="boolean" />
<attr name="save_data" format="boolean" />
<declare-styleable name="InfoPreference">
<attr name="key"/>
<attr name="title" /> 这个是标题
<attr name="summary" /> 这个是提示
<attr name="show_value"/> 这个是值
<attr name="show_divider"/> 这个用于是否显示下划线
<attr name="show_right_icon" /> 这个用于是否显示右边的 > 图标
<attr name="android:entries" format="reference" /> 这个是选项标题
<attr name="android:entryValues" format="reference" /> 这个用于是选项对应的值
<attr name="save_data" />
</declare-styleable>
拿到属性
@Override
protected void initAttribute(AttributeSet attrs){
TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.InfoPreference);
....
}
2.3点击弹出的dialog
InfoPreference.java中showChooseDialog方法
/**点击弹出的dialog*/
private void showChooseDialog(String title){
界面dialog_single_choose.xml
其中标题会自动引用title,其中选项使用的方法是根据entries自动添加到RadioGroup
for(int i = 0;i < dialogItems.size();i++){
dialogItems.get(i).setTextColor(getResources().getColor(R.color.white));
radioGroup.addView(dialogItems.get(i));
}
3.传值
接口方法在IPreference.java中
public interface IPreference {
boolean onPreferenceChange(TwPreference preference, Object newValue);
}
newValue就是点击后的值
这个回过来的值是android:entryValues中设置的对应的值
值回传的逻辑在showChooseDialog方法中的radioGroup点击方法内
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(RadioGroup group, int checkedId){
try{
RadioButton radioButton = dialogItems.get(checkedId);
if(radioButton == null || !radioButton.isPressed()){
return;
}
saveUserData(checkedId);
if(iPreference != null){
iPreference.onPreferenceChange(InfoPreference.this,mEntryValues[checkedId]); //传entryValues的值出去
}
}catch(Exception e){
Log.e(TAG,"onCheckedChanged: " + e.getMessage());
}
}
});
4.示例
public class MainActivity extends AppCompatActivity implements IPreference{
InfoPreference mIp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mIp = findViewById(R.id.ip1);
mIp.setOnPreferenceChangeListener(this);
mIp.setValue("0");
}
@Override
public boolean onPreferenceChange(TwPreference preference, Object newValue) {
switch (preference.getId()){
case R.id.ip1:
Toast.makeText(this,""+newValue,Toast.LENGTH_LONG).show();
break;
}
return false;
}
}
使用的地方注册IPreference就行了
对应的xml
<com.tw.custom.widget.InfoPreference
android:id="@+id/ip1"
android:key="@+id/ip1"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:summary="这个是提示"
app:show_divider="true"
app:pref_value_icon="@drawable/ic_launcher"
app:show_right_icon="true"
app:title="这个是标题"
android:entries="@array/close_open_entries"
android:entryValues="@array/close_open_entries_value"
/>
- 无锁编程(六) - seqlock(顺序锁)
- 无锁编程(七) - 实战
- zookeeper的python客户端安装
- 事件(Event),绝大多数内存泄漏(Memory Leak)的元凶[上篇]
- 震撼:1分钟带你看完IC0的爆炸视频
- 事件(Event),绝大多数内存泄漏(Memory Leak)的元凶[下篇] (提供Source Code下载)
- bt、磁力怎么下载?老司机飙车终极思路……
- Linux进程间通信(五) - 信号灯(史上最全)及其经典应用案例
- 写出完美的snprintf
- 计算CPU利用率
- 详解Hadoop HA 如何运作
- Linux时间时区详解与常用时间函数
- 基于Linux整形时间的常用计算思路
- 如何追踪每一笔记录的来龙去脉:一个完整的Audit Logging解决方案[上篇]
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法