我使用Edittextpreference作为设置部分中的首选项之一.我想在用户向其输入数据并单击确定时验证此edittextpreference; 在将其保存在共享首选项之前.
我试图做这样的事情,但这首先保存了我的偏好.
editTextPreference
.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference,
Object newValue) {
if (((newValue.toString().length() == 15) {
// save preference only if length is equal to 15
}
})
});
Run Code Online (Sandbox Code Playgroud)
有人可以指导我如何验证edittextpreference之前保存在sharedpreference中,以便我可以决定是否要保存它.
我想让EditTextPreference不可编辑(例如,单击 "设置"页面中的项目时没有任何反应).我怎么做?
这是我的代码:
<PreferenceCategory android:title="My Account" >
<EditTextPreference
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:key="username_pref"
android:summary=" "
android:title="Username" >
</EditTextPreference>
</PreferenceCategory>
Run Code Online (Sandbox Code Playgroud)
有没有办法为其指定输入法类型android.support.v7.preference.EditTextPreference
?
我是Android的新手,所以我需要一些关于如何以编程方式将EditTextPreference对象添加到PreferenceFragment的指导.
我从Web服务中提取值列表.我已将它们成功保存到我的SharedPreferences中,并使用它们生成URL(路径部分).
我希望我的应用程序的用户能够编辑这些值,但在Google上进行大量搜索之后,我不清楚如何以编程方式将EditTextPreference对象添加到我的PreferenceFragment中.
请注意,我的PreferenceFragment适用于SharedPreferences值,我将其作为名称硬编码到首选项xml文件(PreferenceScreen)中.我也知道如何获取我的SharedPreferences,所以不要担心必须向我解释这部分.
我在PreferenceFragment的onCreate中使用addPreferencesFromResource.我应该在onCreateView中添加它们吗?我以为我可以获得PreferenceCategory并在那里添加它们?但同样,我不知道该怎么做.我真的很感激你的帮助!
//代码
PrefsFragment.java:
package com.example.lorddoineedhelp;
import android.os.Bundle;
import android.preference.PreferenceFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class PrefsFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = super.onCreateView(inflater, container, …
Run Code Online (Sandbox Code Playgroud) 我已经阅读了关于这个问题的许多答案,但我的问题是询问我放置代码的位置.我希望验证一个数字大于100 edittextPreference
.这是我用来填充优先顺序的代码:
public class SettingsFrag extends PreferenceFragment{
//Override onCreate so that the code will run when the activity is started.
@Override
public void onCreate(Bundle savedInstanceState){
//Call to the super class.
super.onCreate(savedInstanceState);
//add the preferences from the XML file.
addPreferencesFromResource(R.xml.preferences);
}
Run Code Online (Sandbox Code Playgroud)
}
它在这里我添加验证还是我必须创建另一个类?
的preferences.xml:
<EditTextPreference
android:key="geofence_range"
android:title="Geofence Size"
android:defaultValue="500"
android:inputType="number"
android:summary="Geofence Size Around User Location"
android:dialogTitle="Enter Size (meters):" />
Run Code Online (Sandbox Code Playgroud) 我检查了EditTextPreference的文档 http://developer.android.com/reference/android/preference/EditTextPreference.html
但我没有在那里找到android:inputType属性.然后如何在此代码段中使用它
<EditTextPreference
android:key="edit"
android:title="@string/location1"
android:summary="@string/summary1"
android:dialogTitle="@string/location1"
android:dialogMessage="@string/message"
android:inputType="text"
android:singleLine="true"
/>
Run Code Online (Sandbox Code Playgroud)
同样怀疑android:singleLine属性.
大约1小时后,在相关主题中寻找我的问题的解决方案,我决定公开我的案例.这是:我每次尝试打开PreferenceActivity时都会出现InflateException.
日志
E/AndroidRuntime: FATAL EXCEPTION: main
Process: lineo.smarteam, PID: 5087
Theme: themes:{}
java.lang.RuntimeException: Unable to start activity ComponentInfo{lineo.smarteam/lineo.smarteam.activity.SettingsActivity}: android.view.InflateException: Binary XML file line #5: Error inflating class lineo.smarteam.preference.MyEditTextPreference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2450)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2510)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5461)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: android.view.InflateException: Binary XML file line #5: Error inflating class lineo.smarteam.preference.MyEditTextPreference
at android.preference.GenericInflater.createItem(GenericInflater.java:388)
at android.preference.GenericInflater.createItemFromTag(GenericInflater.java:432)
at android.preference.GenericInflater.rInflate(GenericInflater.java:483)
at android.preference.GenericInflater.rInflate(GenericInflater.java:495)
at android.preference.GenericInflater.inflate(GenericInflater.java:327)
at android.preference.GenericInflater.inflate(GenericInflater.java:264)
at android.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:273)
at android.preference.PreferenceFragment.addPreferencesFromResource(PreferenceFragment.java:304)
at lineo.smarteam.activity.SettingsActivity$SettingsFragment.onCreate(SettingsActivity.java:57)
at …
Run Code Online (Sandbox Code Playgroud) android preferenceactivity android-preferences inflate-exception edittextpreference
在我的设置中的应用程序中,我使用 EditTextPreference ,并且在 android API 上 uder 11 edittext 字段具有黑色背景和黑色文本颜色。如何更改 EditTextPreferences 背景颜色?
我试过:在主题中:
<item name="android:editTextPreferenceStyle">@style/EditTextAppTheme</item>
Run Code Online (Sandbox Code Playgroud)
很有型:
<style name="EditTextAppTheme" parent="android:Widget.EditText">
<item name="android:background">@drawable/edit_text_holo_light</item>
<item name="android:textColor">#000000</item>
</style>
Run Code Online (Sandbox Code Playgroud)
如果我将样式设置为:
<style name="EditTextPreferences" parent="android:Preference.DeviceDefault.DialogPreference.EditTextPreference">
<item name="android:background">@drawable/edit_text_holo_light</item>
<item name="android:textColor">#FF0000</item>
</style>
Run Code Online (Sandbox Code Playgroud)
和主题:
<item name="android:editTextPreferenceStyle">@style/EditTextPreferences</item>
Run Code Online (Sandbox Code Playgroud)
我有错误:
error: Error retrieving parent for item: No resource found that matches the given name 'android:Preference.DeviceDefault.DialogPreference.EditTextPreference'.
Run Code Online (Sandbox Code Playgroud) 这次在同一个项目中,我面临一个稍微具有挑战性的问题,在res / xml文件夹中的settings.xml文件中:
<EditTextPreference
android:key="weight"
android:title="@string/update_user_weight"
android:persistent="true"
android:dialogTitle="@string/update_user_weight"
android:dialogMessage="@string/update_user_weight_message"
android:defaultValue="" />
<EditTextPreference
android:key="age"
android:title="@string/update_user_age"
android:persistent="true"
android:dialogTitle="@string/update_user_age"
android:dialogMessage="@string/update_user_age_message"
android:defaultValue="" />
Run Code Online (Sandbox Code Playgroud)
并在类文件UserData.java中:
SharedPreferences storeWeightAndAge = getSharedPreferences("WeightAndAgeStorage", Context.MODE_PRIVATE);
Editor store = storeWeightAndAge.edit();
store.putString("weight", weightData);
store.putString("age", ageData);
store.commit();
Run Code Online (Sandbox Code Playgroud)
我想在这里做的是设置在上述两个EditTextPreferences' android:defaultValue
存储weight
并age
在SharedPreferences
分别。
现在,我该怎么做呢?
编辑:提供了使用settings.xml文件的Settings.java文件:
package com.example.drinkup;
import android.content.SharedPreferences;
import android.os.*;
import android.preference.PreferenceFragment;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
public class Settings extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
}
}
Run Code Online (Sandbox Code Playgroud) 我使用的是建立一个设置屏幕PreferenceFragment
内PreferenceActivity
。除烦人的问题外,一切正常,除了在EditTextPreference
对话框关闭后通过单击“取消”,“确定”或在对话框外单击,软键盘仍然可见。
这是我使用API级别15(4.0.3)构建的第一个应用程序。我以前的应用程序是针对API级别8(2.2)的,仅用PreferenceActivity
于其设置(无片段)。在该应用程序中,在单击“取消”,“确定”或在对话框外部时,键盘始终自动关闭-无需输入代码。
现在,在关闭EditTextPreference
对话框后必须对键盘的关闭进行编码是否正常?如果是这样,我需要使用哪个事件来捕获此事件?
keyboard android preferenceactivity android-softkeyboard edittextpreference