• Observations:
Посмотрев на исходный код DialogPreference
, который является суперклассом EditTextPreference
, мы увидим, что нет атрибутов для размера текста кнопки,Это означает, что невозможно изменить размер текста кнопок с style
и xml
обычно.
public DialogPreference(
Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
final TypedArray a = context.obtainStyledAttributes(attrs,
com.android.internal.R.styleable.DialogPreference, defStyleAttr, defStyleRes);
mDialogTitle = a.getString(com.android.internal.R.styleable.DialogPreference_dialogTitle);
if (mDialogTitle == null) {
// Fallback on the regular title of the preference
// (the one that is seen in the list)
mDialogTitle = getTitle();
}
mDialogMessage = a.getString(com.android.internal.R.styleable.DialogPreference_dialogMessage);
mDialogIcon = a.getDrawable(com.android.internal.R.styleable.DialogPreference_dialogIcon);
mPositiveButtonText = a.getString(com.android.internal.R.styleable.DialogPreference_positiveButtonText);
mNegativeButtonText = a.getString(com.android.internal.R.styleable.DialogPreference_negativeButtonText);
mDialogLayoutResId = a.getResourceId(com.android.internal.R.styleable.DialogPreference_dialogLayout,
mDialogLayoutResId);
a.recycle();
}
• Solution:
Таким образом, единственный способ выполнить такую настройку - это расширение EditTextPreference
.Я написал собственный класс, унаследованный от EditTextPreference
, который переопределяет showDialog()
, чтобы внести в него изменения.Посмотрите на это, пожалуйста:
MyEditTextPreference.java
package com.aminography;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.TypedArray;
import android.os.Build;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.support.annotation.RequiresApi;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.widget.Button;
import com.aminography.R;
public class MyEditTextPreference extends EditTextPreference {
private float buttonTextSize = 0;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public MyEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(context, attrs, defStyleAttr, defStyleRes);
}
public MyEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs, defStyleAttr, 0);
}
public MyEditTextPreference(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs, 0, 0);
}
public MyEditTextPreference(Context context) {
super(context);
}
private void init(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyEditTextPreference, defStyleAttr, defStyleRes);
buttonTextSize = typedArray.getDimension(R.styleable.MyEditTextPreference_buttonTextSize, 0);
typedArray.recycle();
}
@Override
protected void showDialog(Bundle state) {
super.showDialog(state);
AlertDialog dialog = (AlertDialog) getDialog();
if (dialog != null && buttonTextSize > 0) {
Button positiveButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
positiveButton.setTextSize(TypedValue.COMPLEX_UNIT_PX, buttonTextSize);
}
}
}
xml / preferences.xml
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<com.aminography.MyEditTextPreference
android:key="@string/pref_key_username"
android:summary="Please enter your username:"
android:title="Your Name"
app:buttonTextSize="30sp" />
</PreferenceScreen>
values / attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyEditTextPreference">
<attr name="buttonTextSize" format="dimension"/>
</declare-styleable>
</resources>
.
Визуальный результат:
Вы также можете установить размер текста на BUTTON_NEGATIVE
в showDialog()
.