7

Ich schreibe eine Android-App, um die Funktionalität des Schubladenlayouts zu nutzen. Ich möchte die Möglichkeit haben, das Schubladenlayout als Navigationswerkzeug in der gesamten App zu verwenden. Um das Fach-Layout zu verwenden, verwende ich die folgenden in meiner Tätigkeit Layout XML-Dateien:Wie wird DrawerLayout um PreferenceActivity in einer Android App umgebrochen?

<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> 

Allerdings bin ich eine Menge Schwierigkeiten mit Einwickeln DrawerLayout um die PreferenceActivity. PreferenceActivity ist eine besondere Art von Aktivität, die ich beibehalten möchte, da sie mir hilft, das Aussehen der Android-Einstellungen in meiner App zu erhalten. Dazu verwendet es die Aufrufe von addPreferencesFromResource(), um Voreinstellungen zu laden, und verwendet keine addContentView() - Aufrufe, um XML-Dateien zu laden. Die Präferenzressourcen enthalten in der Regel PräferenzScreen-Tags, die nicht in DrawerLayouts eingebettet werden sollen.

Jeder musste sich mit diesem Problem befassen und wie haben Sie es gelöst? Wenn Sie PreferenceActivity in Ihrer Android App haben und DrawersLayout für dieselbe Aktivität verfügbar ist, teilen Sie uns bitte mit, wie Sie es gemacht haben. Jede Hilfe würde sehr geschätzt werden.

EDITED: Wenn ich

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

zu

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

dann die App stürzt nicht ändern, wenn PreferenceActivity geladen wird (weil die id "Liste" übereinstimmt, was die Vorlieben Aktivität erwartet zu finden); Die Schublade wird jedoch nicht angezeigt. Es ist fast so, als ob alles unterhalb der ListView-Liste ignoriert wird.

+0

Ich möchte auch meine vorhandenen Aktivitäten beibehalten und die Schublade dynamisch hinzufügen. Nicht wegen PreferenceActivity, sondern weil es fast 100 Aktivitäten gibt, und ihre Änderung in Fragmente würde eine Weile dauern. Ich konnte dies mit HorizontalScrollView machen, aber ich denke, das DrawerLayout wäre viel sauberer. –

Antwort

2

Dieser dauerte eine Weile, aber ich konnte diese Arbeit für meine App machen. Ich weiß nicht, ob es einen Unterschied macht, aber ich verwende HoloEverywhere, also nehme ich an, dass dies auch auf dem Standard PreferenceActivity funktioniert.

In meiner PreferenceActivity, wenn ich alle Versionen von setContentView() overrode meines benutzerdefinierten DrawerLayout zu laden, die wie das Ihre ist und ein ListView mit der Standard-Android-ID von list hat. Im letzten Verfahren machte ich sicher onContentChanged() anrufen, nachdem ich super.setContentView() genannt:

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

    } 

In onBuildHeaders() noch loadHeadersFromResource() Ich rufe alle Header s für meine verschiedenen PreferenceScreen s zu schaffen.

+0

Danke Jon. Ich bin schon lange fort und habe meine eigene Aktivität implementiert, um das Look & Feel der PreferenceActivity nachzuahmen. Ich werde Ihre Antwort als "beantwortet" markieren. – CocoaAficionado

+0

@jon Ich implementiere den gleichen Code wie Sie hier schreiben, aber es funktioniert nicht, können Sie mir helfen plz, hier ist meine Frage: http://StackOverflow.com/Questions/37629855/How-to-set-Navigation-Drawer Präferenzaktivität –

Verwandte Themen