[英]How can I get the default value of a ListPreference as defined in the XML?
[英]How do I enable a disabled (in xml) ListPreference object in .java code?
编辑3
这是我在onCreate
确定设备是否为平板电脑的主要Activity
:
public static boolean isTablet(Context ctx){
return (ctx.getResources().getConfiguration().screenLayout
& Configuration.SCREENLAYOUT_SIZE_MASK
)
>= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
我不知道这是否是一种破解并且不可靠,但是无论如何,我都不知道如何在Fragment
onCreate
中使用它(如下),因为我不知道将什么Context
传递给isATablet
。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);Preference p = getPreferenceManager().findPreference("orientation");
p.setEnabled(isTablet(????????????????));
编辑显示按要求在strings.xml
定义的数组:
<string-array name="modes">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
<string-array name="indices">
<item>Portrait</item>
<item>Landscape</item>
<item>Rotate</item>
</string-array>
*结束编辑*
如何在.java
代码中enable
此ListPreference
对象?
<PreferenceCategory>
<ListPreference
android:key="orientation"
android:title="Orientation (for tablets only)"
android:enabled="false"
android:summary="Lock in portrait or landscape mode or neither (allow rotation to determine)?"
android:defaultValue="0"
android:entries="@array/indices"
android:entryValues="@array/modes"
>
</ListPreference>
</PreferenceCategory>
我不能让Android Studio 1.1.0让我给它一个id
; 但是如果有办法,那就是我的解决方案-我该怎么办?
编辑
解决方法:
android:enabled="true"
if(isATablet) { // ***************************
switch (preferences.getString(ORIENTATION, "0")) {
case "0":
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
break;
case "1":
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
break;
case "2":
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
break;
default:
Toast.makeText(getApplicationContext(), "Bad orientation", Toast.LENGTH_SHORT).show();
}
}
else{ // ***************************
editor = preferences.edit(); // ***************************
editor.putString(ORIENTATION,"0"); // ***************************
editor.commit(); // ***************************
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
很la脚 请帮忙!
看来您可以只使用PreferenceManager并基于key
获得Preference。 在此处和此处查看文档。
您可以使用此处描述的方法来确定它是否是平板电脑。
然后,就像获得首选项一样简单,如果是平板电脑则启用它!
编辑:
为了使用您的方法并为其提供有效的Context
,您可以这样做。 请注意,我对isTablet()
方法使用了此处发布的代码的修改版本:
public class SettingsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
Preference p = getPreferenceManager().findPreference("orientation");
p.setEnabled(isTablet(getActivity()));
}
private boolean isTablet(Context context) {
int screenLayout = context.getResources().getConfiguration().screenLayout;
screenLayout &= Configuration.SCREENLAYOUT_SIZE_MASK;
switch (screenLayout) {
case Configuration.SCREENLAYOUT_SIZE_SMALL:
return false;
case Configuration.SCREENLAYOUT_SIZE_NORMAL:
return false;
case Configuration.SCREENLAYOUT_SIZE_LARGE:
return true;
case 4: // Configuration.SCREENLAYOUT_SIZE_XLARGE is API >= 9
return true;
default:
return false;
}
}
//...................
感谢Daniel Nugent的慷慨慷慨,这才是最终成功的方法。
preferences.xml
(不启用或禁用定向):
<PreferenceCategory>
<ListPreference
android:key="orientation"
android:title="Orientation (for tablets only)"
android:summary="Lock in portrait or landscape mode or neither (allow rotation to determine)?"
android:defaultValue="0"
android:entries="@array/indices"
android:entryValues="@array/modes"
>
</ListPreference>
</PreferenceCategory>
</PreferenceScreen>
SettingsFragment.java
:
public class SettingsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
// next two lines ****************************************************
Preference p = getPreferenceManager().findPreference("orientation");
p.setEnabled(isTablet(getActivity()));
// Let java code enable or disable orientation ***********************
}
@Override
public void onResume() {
super.onResume();
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity());
}
}
isTablet.java
:
private boolean isTablet(Context context) {
int screenLayout = context.getResources().getConfiguration().screenLayout;
screenLayout &= Configuration.SCREENLAYOUT_SIZE_MASK;
switch (screenLayout) {
case Configuration.SCREENLAYOUT_SIZE_SMALL:
return false;
case Configuration.SCREENLAYOUT_SIZE_NORMAL:
return false;
case Configuration.SCREENLAYOUT_SIZE_LARGE:
return true;
case 4: // Configuration.SCREENLAYOUT_SIZE_XLARGE is API >= 9
return true;
default:
return false;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.