我无法弄清楚如何在EditTextPreference对话框弹出框中的按钮上更改文本大小。我希望我的应用程序中的所有文本都精简到24 sp。除PreferenceScreen中的此对话框外,其他任何地方都发生这种情况。正如您在ListPreference中看到的那样,我弄清楚了如何隐藏positiveButtonText和negativeButtonText。
如果可能的话,我想在xml中执行此操作。我还希望避免创建自定义对话框布局。在EditTextPreference标记中,我可以在对话框中编辑标题和布局,只是无法弄清楚如何“触摸”默认按钮。
这是我的pref_connection.xml:
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:title="Connection">
<ListPreference
android:defaultValue="box1"
android:entries="@array/pref_box_type_list_titles"
android:entryValues="@array/pref_box_type_list_values"
android:key="box_types_list"
android:negativeButtonText="@null"
android:positiveButtonText="@null"
android:layout="@layout/preference_screen_layout"
android:title="@string/pref_title_box_type"/>
<EditTextPreference
android:defaultValue="@string/pref_default_internet_addr"
android:digits="0123456789."
android:inputType="number|numberDecimal"
android:key="internet_addr"
android:selectAllOnFocus="true"
android:singleLine="true"
android:layout="@layout/preference_screen_layout"
android:textSize="@dimen/text_size"
android:title="@string/pref_title_internet_addr"/>
<...>
</PreferenceScreen>
这是布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@android:id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/large_margin"
android:paddingBottom="@dimen/margin"
android:textSize="@dimen/text_size"/>
<TextView android:id="@android:id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/large_margin"
android:textSize="@dimen/text_size"/>
</LinearLayout>
想做一些简单的样式:
<style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:textSize">24sp</item>
</style>
或在EditTextPreference内部使用dialogLayout:
android:dialogLayout="@layout/dialogLayout"
但是似乎无法使其中任何一个起作用。
希望我的应用程序的屏幕截图有助于理解我要完成的工作。
这显示单击EditTextPreference后弹出的对话框。我正在尝试更改“取消”和“确定”按钮上的文本大小。见红色箭头。此对话框中的其他文本由EditTextPreference中的属性控制。
任何帮助将不胜感激。
我发现要使用的正确样式参数:
AppTheme定义:
<style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="android:editTextPreferenceStyle">@style/DialogPreferenceStyle</item>
</style>
<style name="DialogPreferenceStyle" parent="Preference.DialogPreference.EditTextPreference">
<item name="android:positiveButtonText">TEST TEXT</item>
</style>
屏幕截图:
从屏幕截图中可以看到,我能够更改按钮的文本,只是不能更改文本大小。
答案 0 :(得分:3)
Observations:
通过查看EditTextPreference
的超类DialogPreference
的源代码,我们将看到按钮文本大小没有属性。这意味着无法正常地将按钮的文本大小从style
和xml
更改。
DialogPreference.java
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()
。
答案 1 :(得分:0)
这项工作可以吗?
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="First Category"
android:textSize="20px"
android:layout="@layout/mylayout">