我想使用对话框中的数字输入来设置“首选项”设置菜单,以更改显示文本的文本大小。如果我只能为数字输入创建一个文本框,则用户无法键入任何字母字符或特殊符号,因此我将不必处理数字格式错误的异常。
我尝试做的第一件事是通过更改EditTextPreference
的输入类型来制作一个数字输入框。我的第二次尝试是更改首选项的android:dialogLayout
属性(我设法用LinearLayout
制作了自定义对话框),但这导致了错误:java.lang.NullPointerException:尝试调用虚拟空对象引用上的方法'boolean android.view.View.requestFocus()'
我的偏好(在/xml/settings_pref.xml中):
<EditTextPreference
android:id="@+id/number_input"
android:title="@string/pref_text_size"
android:key="key_text_size"
android:inputType="numberDecimal"
android:dialogIcon="@mipmap/ic_android_logo"
android:dialogLayout="@layout/custom_dialog" />
我的对话框(在/layout/custom_dialog.xml中):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="100dp"
android:background="#3E80B4"
android:orientation="vertical" >
<EditText
android:id="@+id/number_input"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="10dp"
android:inputType="numberDecimal"
android:text="@string/pref_text_size_def"
android:textColor="@android:color/white"
android:textSize="15dp"
android:textStyle="bold"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="#3E80B4"
android:orientation="horizontal" >
<Button
android:id="@+id/btn_cancel"
android:layout_width="100dp"
android:layout_height="30dp"
android:background="@android:color/white"
android:clickable="true"
android:text="Cancel"
android:textColor="#5DBCD2"
android:textStyle="bold" />
<Button
android:id="@+id/btn_ok"
android:layout_width="100dp"
android:layout_height="30dp"
android:layout_marginLeft="5dp"
android:background="@android:color/white"
android:clickable="true"
android:text="OK"
android:textColor="#5DBCD2"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>