首选项屏幕背景问题Android

时间:2014-01-08 14:53:07

标签: android xml preferenceactivity

我的应用中有一个首选项屏幕,只有一个项目。屏幕在所有设备上都显示正常,但是当我在10英寸平板电脑上查看时..我看到屏幕的背景。请参考图片......

我没有在布局中添加任何背景。不确定它为什么会出现。

enter image description here

的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();

    }

}

更新了屏幕截图:

enter image description here

2 个答案:

答案 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扩展。

Preference Menu on 10 inch tablet