Как обернуть DrawerLayout вокруг PreferenceActivity в приложении для Android?
Я пишу приложение для Android, чтобы использовать функциональность Drawer Layout. Я хочу иметь возможность использовать Drawer Layout в качестве навигационного инструмента, доступного во всем приложении. Чтобы использовать макет ящика, я использую следующее в моих XML-файлах макета активности:
<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 для того же упражнения, поделитесь, как вы это сделали. Любая помощь приветствуется.
Отредактировано: если я изменю
<!-- 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 (поскольку идентификатор "список" совпадает с ожидаемым действием Preference Activity); однако ящик не отображается. Как будто все, что находится под списком ListView, игнорируется.
1 ответ
Это заняло у меня некоторое время, но я смог сделать эту работу для своего приложения. Я не знаю, если это имеет значение, но я использую HoloEverywhere
, поэтому я только предполагаю, что это будет работать на стандартном PreferenceActivity
также.
В моем PreferenceActivity
когда я отверг все версии setContentView()
загрузить мой заказ DrawerLayout
который похож на ваш и имеет ListView
со стандартным идентификатором Android list
, В последнем методе я обязательно позвонил 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.