簡體   English   中英

首選項屏幕背景問題Android

[英]Preferences Screen Background Issue Android

我的應用程序中有一個首選項屏幕,只有一個項目。 屏幕在所有設備上均顯示正常,但是當我在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();

    }

}

更新的屏幕截圖:

在此處輸入圖片說明

從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()

我有同樣的問題。 我的解決方案是從Activity而不是PreferenceActivity擴展。 片段當然應該從PreferenceFragment擴展。

10英寸平板電腦上的“首選項”菜單

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM