我的应用中有一个首选项屏幕,只有一个项目。屏幕在所有设备上都显示正常,但是当我在10英寸平板电脑上查看时..我看到屏幕的背景。请参考图片......
我没有在布局中添加任何背景。不确定它为什么会出现。
的Settings.XML
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="@string/generalSettings" />
<EditTextPreference
android:title="@string/distance_title"
android:inputType="number"
android:summary="@string/distance_text"
android:key="@string/distance_key"
android:defaultValue="5"/>
</PreferenceScreen>
如果您需要任何其他信息,请与我们联系。
[编辑]
以下是设置的java代码:
@TargetApi(11)
public class SettingsFragment extends PreferenceFragment implements
OnPreferenceClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
addPreferencesFromResource(R.xml.settings);
init();
findPreference(Const.Prefs.DISTANCE_KEY).setOnPreferenceClickListener(
this);
}
@Override
public boolean onPreferenceClick(Preference preference) {
return false;
}
private void init() {
// Fix PreferenceFragment's padding...
final DisplayMetrics metrics = Resources.getSystem()
.getDisplayMetrics();
float scale = metrics.density;
int paddingSize = 0;
if (android.os.Build.VERSION.SDK_INT < 14) {
paddingSize = (int) (-32 * scale);
} else {
paddingSize = (int) (-16 * scale);
}
final View v = getView();
v.setPadding(paddingSize, 0, paddingSize, 0);
}
}
[编辑]
我将init()移动到onActivityCreated(),但我仍然看到了填充。以下是当前代码。还可以找到最新的截图。
@TargetApi(11)
public class SettingsFragment extends PreferenceFragment implements
OnPreferenceClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
addPreferencesFromResource(R.xml.settings);
findPreference(Const.Prefs.DISTANCE_KEY).setOnPreferenceClickListener(
this);
}
@Override
public boolean onPreferenceClick(Preference preference) {
return false;
}
private void init() {
// Fix PreferenceFragment's padding...
final DisplayMetrics metrics = Resources.getSystem()
.getDisplayMetrics();
float scale = metrics.density;
int paddingSize = 0;
if (android.os.Build.VERSION.SDK_INT < 14) {
paddingSize = (int) (-32 * scale);
} else {
paddingSize = (int) (-16 * scale);
}
final View v = getView();
v.setPadding(paddingSize, 0, paddingSize, 0);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
init();
}
}
更新了屏幕截图:
答案 0 :(得分:1)
在4.0以上的Android手机设备上也会出现填充。我用来设置一些负填充。
这是我加载PreferenceFragment时的修复:
// Fix PreferenceFragment's padding...
int paddingSize = 0;
if (CLS_Utils.Build_Version < 14)
{
paddingSize = (int) (-32 * CLS_Gfx.scale);
}
else
{
paddingSize = (int) (-16 * CLS_Gfx.scale);
}
final View v = getView();
v.setPadding(paddingSize, 0, paddingSize, 0);
我将此代码放在一个名为init()的方法中,该方法又在行
之后调用addPreferencesFromResource(R.xml.prefs);
<强> [编辑] 强>
抱歉!我没有编辑我的生活代码......
CLS_Gfx是我定义图形内容的类...所以CLS_Utils是另一个 我定义其他变量和公用事业方法的地方。
这是替换CLS_Gfx.scale:
final DisplayMetrics metrics =
Resources.getSystem().getDisplayMetrics();
float scale = metrics.density;
<强> [编辑] 强>
这是替换CLS_Utils.BuildVersion:
final int Build_Version = Build.VERSION.SDK_INT;
<强> [编辑] 强>
作为片段,它的行为方式与活动不同
因此,此代码不驻留在onCreate()函数中(视图可能仍在创建中)
就个人而言,我将我的代码放在我的 onResume()方法中(因为我在更新语言设置的情况下重新加载了首选项,因此要将所有字符串刷新为新语言)。
其他好的(也是更常见的)移动代码的位置: onCreateView()或 onActivityCreated()
答案 1 :(得分:0)
我遇到了同样的问题。我的解决方案是从Activity扩展而不是从PreferenceActivity扩展。片段当然应该从PreferenceFragment扩展。