2014-01-08 2 views
0

У меня есть экран предпочтений в моем приложении, который имеет только один элемент. Экран отображается хорошо на всех устройствах, но когда я просматриваю его на 10-дюймовых планшетах .. Я вижу фон для экрана. Пожалуйста, обратитесь к изображению ...Настройки Экран Фон Проблема Android

Я не добавляю фона в макет. Не уверен, почему он появляется.

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> 

Позвольте мне знать, если вам нужна любая другая информация.

[EDIT]

Вот ява код для настройки:

@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); 

    } 
} 

[EDIT]

я переехал 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

+0

Вы пробовали работает это увидеть выход? Предварительный просмотр макета и фактический макет не всегда одинаковы визуально – Doomsknight

+0

@Doomsknight, Да, изображение взято из самого выхода. –

+0

Извините, вы нарисовали коробки, чтобы скрыть информацию. Достаточно честно, на первый взгляд это выглядело как предварительный просмотр: D Кажется немного странным, почему линия проходит через «настройки» – Doomsknight

ответ

1

Перетяжка происходит также на Android телефон устройств от 4.0+. Я использую, чтобы установить отрицательное дополнение.

Это мое исправление при загрузке мой 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); 

[EDIT ]

Извините! Я не редактировал свой код жизни ...

CLS_Gfx - это класс, где я определяю свой графический материал ... так что CLS_Utils - это еще один , где я определяю другие переменные и методы публичной утилиты.

Это заменить CLS_Gfx.scale:

final DisplayMetrics metrics = 
    Resources.getSystem().getDisplayMetrics(); 

float scale = metrics.density; 

[EDIT]

Это заменить CLS_Utils.BuildVersion:

final int Build_Version = Build.VERSION.SDK_INT; 

[EDIT]

Будучи фрагментом, он ведет себя иначе, чем Activity.
Таким образом, этот код не находится в функции onCreate() (вид может все еще создаваться).
Лично я поместил свой код в свой метод onResume() (потому что я перезагружаю настройки в случае обновления настроек языка, чтобы обновить все строки на новом языке).
Другие хорошие (и более общие) места, где, чтобы переместить код: onCreateView() или onActivityCreated()

+0

О, хорошо, но прокладка не появляется в Nexus 7 с 4.3? Есть идеи? –

+1

также, можете ли вы сообщить мне, что означает CLS_Gfx? –

+0

См. Мой отредактированный ответ ... Я забыл удалить ссылки на классы, которые использует мой проект! ;) –

0

У меня была такая же проблема. Мое решение состояло в том, чтобы перейти от Activity, а не из PreferenceActivity. Конечно, фрагмент должен простираться от PreferenceFragment.

Preference Menu on 10 inch tablet

+0

Он будет работать только на уровне API 11+. –

Смежные вопросы