Android首选项活动字体预览

Android首选项活动字体预览,android,android-preferences,preferenceactivity,listpreference,Android,Android Preferences,Preferenceactivity,Listpreference,我创建了android首选项活动,以这样更改字体 android首选项活动工作正常,但我想在ListPreference 像这样 经过长时间的搜索,我终于想出了办法 在设置页面XML文件中 <com.........ArabicFontNameListPreference android:defaultValue="1" android:entries="@array/pref_font_list_titles_ar" android:e

我创建了android首选项活动,以这样更改字体

android首选项活动工作正常,但我想在
ListPreference

像这样


经过长时间的搜索,我终于想出了办法

在设置页面XML文件中

<com.........ArabicFontNameListPreference
        android:defaultValue="1"
        android:entries="@array/pref_font_list_titles_ar"
        android:entryValues="@array/pref_font_list_titles_values_ar"
        android:key="font_ar"
        android:negativeButtonText="@null"
        android:positiveButtonText="@null"
        android:title="@string/pref_font_title_ar"
        android:summary="@string/pref_font_title_ar_summary">

    </com.........ArabicFontNameListPreference>

和ArabicFontNameListPreference.java

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Typeface;
import android.preference.ListPreference;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckedTextView;



/**
  * Created by Basil on 04-03-2016.
  */
public class ArabicFontNameListPreference extends ListPreference {
private int mClickedDialogEntryIndex;

public ArabicFontNameListPreference(Context context) {
    super(context);
}

public ArabicFontNameListPreference(Context context, AttributeSet attrs) {
    super(context, attrs);
}


@Override
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
    if (getEntries() == null || getEntryValues() == null) {
        super.onPrepareDialogBuilder(builder);
        return;
    }


    ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(getContext(), R.layout.preference_ar_font_name, getEntries()) {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            float fontSizePx = getContext().getResources().getDimension(R.dimen.def_font_size_list_pref);
            Typeface tf = null;
            CheckedTextView view = (CheckedTextView) convertView;
            if (view == null) {
                view = (CheckedTextView) View.inflate(getContext(), R.layout.preference_ar_font_name, null);
            }
            switch (position) {
                case 0:
//                      fontSizePx =       getContext().getResources().getDimension(R.dimen.font_size_small_small);
                    tf =      Typeface.createFromAsset(getContext().getAssets(), "fonts/RobotoRegular.ttf");
                    break;
                case 1:
                    tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/RobotoRegular.ttf");
 //                     fontSizePx = getContext().getResources().getDimension(R.dimen.font_size_medium_medium);
                    break;
//                    case 2:
//                        tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/MADDINA.ttf");
////                        fontSizePx = getContext().getResources().getDimension(R.dimen.font_size_small_medium);
//                        break;
//                    case 3:
//                        tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/trado.ttf");
 //                        break;
//                    case 4:
  //                        tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/ScheherazadeRegOT.ttf");
//                        break;
//                    case 5:
//                        tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/Symbols1_Ver02 (1).otf");
//                        break;
//                    case 6:
//                        tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/UthmanTN1 Ver10.otf");
//                        break;
                default:

            }
            view.setText(getEntries()[position]);
            view.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSizePx);
            view.setTypeface(tf, Typeface.BOLD);
            return view;
        }
    };

    mClickedDialogEntryIndex = findIndexOfValue(getValue());
    builder.setSingleChoiceItems(adapter, mClickedDialogEntryIndex, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            mClickedDialogEntryIndex = which;
            ArabicFontNameListPreference.this.onClick(dialog, DialogInterface.BUTTON_POSITIVE);
            dialog.dismiss();
        }
    });
    builder.setPositiveButton(null, null);


}

@Override
protected void onDialogClosed(boolean positiveResult) {
    super.onDialogClosed(positiveResult);

    if (positiveResult && mClickedDialogEntryIndex >= 0 && getEntryValues() != null) {
        String val = getEntryValues()[mClickedDialogEntryIndex].toString();
        if (callChangeListener(val)) {
            setValue(val);
        }
    }
 }
}
导入android.app.AlertDialog;
导入android.content.Context;
导入android.content.DialogInterface;
导入android.graphics.Typeface;
导入android.preference.ListPreference;
导入android.util.AttributeSet;
导入android.util.TypedValue;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.CheckedTextView;
/**
*Basil于2016年3月4日创建。
*/
公共类ArabicFontNameListPreference扩展了ListPreference{
私有的国际货币指数;
公共ArabicFontNameListPreference(上下文){
超级(上下文);
}
公共ArabicFontNameListPreference(上下文、属性集属性){
超级(上下文,attrs);
}
@凌驾
受保护的无效onPrepareDialogBuilder(AlertDialog.Builder){
如果(getEntries()==null | | getEntryValues()==null){
super.onPrepareDialogBuilder(建造商);
返回;
}
ArrayAdapter=新的ArrayAdapter(getContext(),R.layout.preference\u ar\u font\u name,getEntries()){
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
float fontSizePx=getContext().getResources().getDimension(R.dimen.def\u font\u size\u list\u pref);
字体tf=null;
CheckedTextView视图=(CheckedTextView)convertView;
如果(视图==null){
视图=(CheckedTextView)视图。充气(getContext(),R.layout.preference\u ar\u font\u name,null);
}
开关(位置){
案例0:
//fontSizePx=getContext().getResources().getDimension(R.dimen.font\u size\u small\u small);
tf=Typeface.createFromAsset(getContext().getAssets(),“font/robotregular.ttf”);
打破
案例1:
tf=Typeface.createFromAsset(getContext().getAssets(),“font/robotregular.ttf”);
//fontSizePx=getContext().getResources().getDimension(R.dimen.font\u size\u medium\u medium);
打破
//案例2:
//tf=Typeface.createFromAsset(getContext().getAssets(),“font/MADDINA.ttf”);
////fontSizePx=getContext().getResources().getDimension(R.dimen.font\u size\u small\u medium);
//中断;
//案例3:
//tf=Typeface.createFromAsset(getContext().getAssets(),“font/trado.ttf”);
//中断;
//案例4:
//tf=Typeface.createFromAsset(getContext().getAssets(),“fonts/scheherazaderGet.ttf”);
//中断;
//案例5:
//tf=Typeface.createFromAsset(getContext().getAssets(),“字体/符号1_Ver02(1.otf));
//中断;
//案例6:
//tf=Typeface.createFromAsset(getContext().getAssets(),“font/UthmanTN1 Ver10.otf”);
//中断;
违约:
}
view.setText(getEntries()[position]);
view.setTextSize(TypedValue.COMPLEX\u UNIT\u PX,fontSizePx);
view.setTypeface(tf,Typeface.BOLD);
返回视图;
}
};
mClickedDialogEntryIndex=findIndexOfValue(getValue());
setSingleChoiceItems(适配器,mClickedDialogEntryIndex,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
mClickedDialogEntryIndex=其中;
ArabicFontNameListPreference.this.onClick(对话框,DialogInterface.BUTTON_阳性);
dialog.dismise();
}
});
builder.setPositiveButton(null,null);
}
@凌驾
受保护的无效onDialogClosed(布尔正结果){
super.onDialogClosed(阳性结果);
if(positiveResult&&mClickedDialogEntryIndex>=0&&getEntryValues()!=null){
字符串val=getEntryValues()[mClickedDialogEntryIndex].toString();
if(callChangeListener(val)){
设定值(val);
}
}
}
}
和preference_ar_font_name.xml作为

 <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeightSmall"
    android:height="48dp"
    android:checkMark="@null"
    android:drawableLeft="?android:attr/listChoiceIndicatorSingle"
    android:drawableStart="?android:attr/listChoiceIndicatorSingle"
    android:gravity="center_vertical"
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
    android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
    android:paddingRight="?android:attr/listPreferredItemPaddingRight"
    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    android:textAppearance="?android:attr/textAppearanceListItemSmall" />

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Typeface;
import android.preference.ListPreference;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckedTextView;



/**
  * Created by Basil on 04-03-2016.
  */
public class ArabicFontNameListPreference extends ListPreference {
private int mClickedDialogEntryIndex;

public ArabicFontNameListPreference(Context context) {
    super(context);
}

public ArabicFontNameListPreference(Context context, AttributeSet attrs) {
    super(context, attrs);
}


@Override
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
    if (getEntries() == null || getEntryValues() == null) {
        super.onPrepareDialogBuilder(builder);
        return;
    }


    ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(getContext(), R.layout.preference_ar_font_name, getEntries()) {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            float fontSizePx = getContext().getResources().getDimension(R.dimen.def_font_size_list_pref);
            Typeface tf = null;
            CheckedTextView view = (CheckedTextView) convertView;
            if (view == null) {
                view = (CheckedTextView) View.inflate(getContext(), R.layout.preference_ar_font_name, null);
            }
            switch (position) {
                case 0:
//                      fontSizePx =       getContext().getResources().getDimension(R.dimen.font_size_small_small);
                    tf =      Typeface.createFromAsset(getContext().getAssets(), "fonts/RobotoRegular.ttf");
                    break;
                case 1:
                    tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/RobotoRegular.ttf");
 //                     fontSizePx = getContext().getResources().getDimension(R.dimen.font_size_medium_medium);
                    break;
//                    case 2:
//                        tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/MADDINA.ttf");
////                        fontSizePx = getContext().getResources().getDimension(R.dimen.font_size_small_medium);
//                        break;
//                    case 3:
//                        tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/trado.ttf");
 //                        break;
//                    case 4:
  //                        tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/ScheherazadeRegOT.ttf");
//                        break;
//                    case 5:
//                        tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/Symbols1_Ver02 (1).otf");
//                        break;
//                    case 6:
//                        tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/UthmanTN1 Ver10.otf");
//                        break;
                default:

            }
            view.setText(getEntries()[position]);
            view.setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSizePx);
            view.setTypeface(tf, Typeface.BOLD);
            return view;
        }
    };

    mClickedDialogEntryIndex = findIndexOfValue(getValue());
    builder.setSingleChoiceItems(adapter, mClickedDialogEntryIndex, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            mClickedDialogEntryIndex = which;
            ArabicFontNameListPreference.this.onClick(dialog, DialogInterface.BUTTON_POSITIVE);
            dialog.dismiss();
        }
    });
    builder.setPositiveButton(null, null);


}

@Override
protected void onDialogClosed(boolean positiveResult) {
    super.onDialogClosed(positiveResult);

    if (positiveResult && mClickedDialogEntryIndex >= 0 && getEntryValues() != null) {
        String val = getEntryValues()[mClickedDialogEntryIndex].toString();
        if (callChangeListener(val)) {
            setValue(val);
        }
    }
 }
}
 <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/listPreferredItemHeightSmall"
    android:height="48dp"
    android:checkMark="@null"
    android:drawableLeft="?android:attr/listChoiceIndicatorSingle"
    android:drawableStart="?android:attr/listChoiceIndicatorSingle"
    android:gravity="center_vertical"
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
    android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
    android:paddingRight="?android:attr/listPreferredItemPaddingRight"
    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    android:textAppearance="?android:attr/textAppearanceListItemSmall" />