android自定义ListPreference字体大小
来源:互联网 发布:小说小偷源码 编辑:程序博客网 时间:2024/06/05 15:15
这篇博客算是自己的一个记录吧,组长给了一个任务,需要实现一个紧急广播的一系列设置功能,但是客户那边设置界面的字体大小有特殊的要求,看了一下,对于ListPreference这样的控件,android系统没有提供直接的属性来设置,只好自己重写一个了.
自定义属性
<?xml version="1.0" encoding="utf-8"?><resources> <attr name="titleTextSize" format="dimension" /> <attr name="summaryTextSize" format="dimension" /> <declare-styleable name="CustomTitleView"> <attr name="titleTextSize" /> <attr name="summaryTextSize" /> </declare-styleable></resources>
这里,我定义了ListPreference中title和summary的字体大小的属性,很简单,这里就不在多说了。
编写类继承自ListPreference
import android.annotation.SuppressLint;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Color;import android.os.Parcel;import android.os.Parcelable;import android.preference.ListPreference;import android.preference.Preference.BaseSavedState;import android.text.TextUtils;import android.util.AttributeSet;import android.util.TypedValue;import android.view.View;import android.widget.TextView;@SuppressLint("NewApi") public class MyListPreference extends ListPreference{ private int mTitleTextSize; private int mSummaryTextSize; private String mValue; private String mSummary; private int mDefaultValue; public MyListPreference(Context context, AttributeSet attrs) { this(context, attrs,0); } @SuppressLint("NewApi") public MyListPreference(Context context, AttributeSet attrs, int defStyleAttr) { this(context, attrs, defStyleAttr,0); } public MyListPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); TypedArray arrayPreference = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.Preference, defStyleAttr, defStyleRes); // 获取默认的值 mDefaultValue = arrayPreference.getInt(com.android.internal.R.styleable.Preference_defaultValue, 1); arrayPreference.recycle(); TypedArray appearance = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomTitleView, defStyleAttr, 0); // 获取所有自定义属性的值 for (int i = appearance.getIndexCount(); i >= 0; i--) { int attr = appearance.getIndex(i); switch (attr) { case R.styleable.CustomTitleView_titleTextSize: mTitleTextSize = px2dip(context,appearance.getDimensionPixelSize(attr,13)); break; case R.styleable.CustomTitleView_summaryTextSize: mSummaryTextSize = px2dip(context,appearance.getDimensionPixelSize(attr,11)); break; } } appearance.recycle(); } @Override protected void onBindView(View view) { final TextView titleView = (TextView) view.findViewById(com.android.internal.R.id.title); if (titleView != null) { titleView.setTextSize(mTitleTextSize); final CharSequence title = getTitle(); if (!TextUtils.isEmpty(title)) { titleView.setText(title); titleView.setVisibility(View.VISIBLE); } else { titleView.setVisibility(View.GONE); } } final TextView summaryView = (TextView) view.findViewById( com.android.internal.R.id.summary); summaryView.setTextSize(mSummaryTextSize); if (summaryView != null) { final CharSequence summary = getSummary(); if (!TextUtils.isEmpty(summary)) { summaryView.setText(summary); summaryView.setVisibility(View.VISIBLE); } else { summaryView.setVisibility(View.GONE); } } } @Override public CharSequence getSummary() { final CharSequence entry = getEntry(); return entry; } @Override public void setSummary(CharSequence summary) { super.setSummary(summary); mSummary = (String) summary; } public int px2dip(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); }}
上面的代码是,在构造方法里获取自定义的属性,然后在重写的onBindView方法中设置其title和summary的文字大小和颜色。
布局使用
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res/com.test.settings" android:key="cell_broadcast_settings"> ..... <com.test.settings.MyListPreference android:defaultValue="2" android:dialogTitle="@string/alert_reminder" android:entries="@array/alert_sound_duration_entries" android:entryValues="@array/alert_sound_duration_values" android:key="alert_reminder_type" android:title="@string/alert_reminder" custom:titleTextSize="13sp" custom:summaryTextSize="11sp" /></PreferenceScreen>
此时效果如下:
以上算是自己的一个记录吧,可以看到虽然实现了这样的效果,但是由于在MyListPreference中使用了系统的资源,比如”com.android.internal.R.styleable.Preference”,所以必须在源码下编译才可以,大家如果有更高的处理方法,也欢迎一起讨论。
0 0
- android自定义ListPreference字体大小
- Android 自定义ListPreference
- Android ListPreference
- Android自定义控件字体大小设置。
- Android ListPreference的用法
- Android ListPreference的用法
- android Preference ListPreference EditTextPreference
- Android ListPreference的用法
- Android ListPreference的用法
- Android ListPreference的用法
- Android ListPreference的用法
- Android ListPreference处理%问题
- Android ListPreference的用法
- Android listpreference 使用笔记
- Android ListPreference的用法
- android.inputmethodservice.KeyboardView 自定义键盘 字体大小设置
- Android首选项框架ListPreference
- Android设置Settings:ListPreference【3】
- java基础—java的Io操作学习(3)
- redis源码阅读(2)---- adlist分析
- Oracle字符集修改
- u-boot向linux内核传递启动参数(详细)
- 诺看看图王 (基于DUI SOUI 库开发而成)
- android自定义ListPreference字体大小
- BZOJ1170 Balkan2007 Cipher
- linux下的五个查找命令
- 建立双链表
- 蓝桥杯 算法训练-结点选择
- Android NFC的使用
- innodb B+树的分裂
- LeetCode OJ - Implement strStr()
- window基础编程 --绘图