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