Intereting Posts
Как реализовать onclick в javascript и html для устройств с более низкими версиями Android? Видеофрагменты iframe не будут отображаться в полноэкранном режиме в веб-браузере Android Видео-просмотр поворачивается на 90 градусов в Android Ошибка раздувания класса android.support.v7.widget.Toolbar? Android – Загрузка и установка файла apk в Webview Создание случайного поплавка между отрицательным и положительным opengl es java Просмотреть getVisibility () isShown () вернуть неправильную видимость Android-технологии для Mock Data Source в тестировании Unit Unit Android google analytics easytracker – вызов события вызова в onCreate метод сбоев активности запуска Уведомления Realm.io – Как слушать изменения только в определенной таблице? Кинжал 2 проблемы @ Инъекция FirebaseMessagingService Дублируемое значение в заголовке NavigationView после обновления текста заголовка NullPointerException – попытка вызвать виртуальный метод RecyclerView $ ViewHolder.shouldIgnore () 'для ссылки на нулевой объект KSoap2 Android получает массив объектов Каким должен быть размер значка пусковой установки по умолчанию

Как обернуть DrawerLayout вокруг PreferenceActivity в приложении для Android?

Я пишу приложение для Android, чтобы воспользоваться функциональностью Layer Layout. Я хочу иметь возможность использовать Layer Layout в качестве навигационного инструмента, доступного во всем приложении. Чтобы использовать Layer Layout, я использую следующие в XML-файлах my layout layout:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- The main content view --> <LinearLayout android:id="@+id/main_content_layout" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- The navigation drawer --> <ListView android:id="@+id/navigational_drawer" android:layout_width="220dp" android:layout_height="match_parent" android:layout_gravity="start" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:background="#FFFFFF"/> </android.support.v4.widget.DrawerLayout> 

Тем не менее, у меня много трудностей, связанных с DrawerLayout вокруг PreferenceActivity. PreferenceActivity – это особый вид активности, который я хотел бы сохранить, потому что он помогает мне поддерживать внешний вид Android-настроек в моем приложении; При этом он использует вызовы addPreferencesFromResource () для предпочтений загрузки и не использует вызовы addContentView () для загрузки файлов XML; Ресурсы предпочтений обычно содержат теги PreferenceScreen, которые не любят быть обернутыми в DrawerLayouts.

Кто-нибудь должен был решить эту проблему и как вы ее разрешили? Если у вас есть приложение PreferenceActivity в вашем приложении для Android, и у вас есть DrawerLayout, доступный в одном и том же действии, сообщите, как вы это сделали. Любая помощь приветствуется.

EDITED: Если я изменю

 <!-- The main content view --> <LinearLayout android:id="@+id/main_content_layout" android:layout_width="match_parent" android:layout_height="match_parent" /> 

в

 <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" /> 

То приложение не сбой при загрузке PreferenceActivity (поскольку список «id» соответствует тому, что ожидает функция предпочтения); Однако ящик не отображается. Это почти похоже на то, что все, что ниже списка ListView, игнорируется.

Solutions Collecting From Web of "Как обернуть DrawerLayout вокруг PreferenceActivity в приложении для Android?"

Это заняло у меня некоторое время, но я смог сделать эту работу для своего приложения. Я не знаю, имеет ли это значение, но я использую HoloEverywhere , поэтому я предполагаю, что это будет работать и над стандартной HoloEverywhere PreferenceActivity .

В моей PreferenceActivity когда я перегрузил все версии setContentView() чтобы загрузить мой пользовательский DrawerLayout который похож на ваш, и имеет ListView со стандартным идентификатором Android. В последнем методе я убедился, что вы вызываете onContentChanged() после того, как я вызвал super.setContentView() :

 @Override public void setContentView(int layoutResID) { setContentView( getLayoutInflater().inflate( layoutResID ) ); } @Override public void setContentView(View view) { setContentView( view, new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT ) ); } @Override public void setContentView(View view, LayoutParams params) { // inflate the drawer layout super.setContentView( R.layout.navigation_drawer_base_layout ); DrawerLayout dl = findViewById(R.id.drawer_layout); // do stuff here initialize the DrawerLayout like add a DrawerToggle, etc ...STUFF // Call onContentsChanged() to let the Activity know it needs to refresh itself. onContentChanged(); } 

В onBuildHeaders() я все еще вызываю loadHeadersFromResource() чтобы создать все Header для моих разных PreferenceScreen s.