7

私は引き出しレイアウト機能を利用するためにAndroidアプリを書いています。 Drawing Layoutをアプリ全体で利用可能なナビゲーションツールとして使用したいと思っています。引き出しのレイアウトを使用するには、私は私の活動のレイアウトxmlファイルに次のように使用しています:AndroidアプリでPreferenceActivityを使ってDrawerLayoutをラップする方法は?

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

しかし、私はPreferenceActivity周りDrawerLayout包む多くの困難が生じています。 PreferenceActivityは、私のアプリでAndroidの設定の外観と感じを維持するのに役立ちますので、私が保存したいと思う特殊なアクティビティです。つまり、addPreferencesFromResource()呼び出しを使用してプリファレンスをロードし、XMLファイルをロードするためにaddContentView()コールを使用しません。プリファレンスリソースには、通常、DrawerLayoutsにラップされたくないPreferenceScreenタグが含まれています。

誰もがその問題に対処しなければならず、どのように解決しましたか?あなたのAndroidアプリにPreferenceActivityを持っていて、同じアクティビティでDrawerLayoutを利用できる場合は、どうやってそれをしたか教えてください。どんな助けでも大歓迎です。

EDITED:私は

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

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

を変更した場合はPreferenceActivityがロードされるときに、ID「リスト」は優先活動がに期待しているものと一致するので、その後アプリが(クラッシュしません見つける);ただし、引き出しが表示されていません。これは、ListViewの「リスト」の下のすべてが無視されているかのようです。

+0

また、既存のアクティビティを保存して、ドロワを動的に追加したいと考えています。 PreferenceActivityのためではなく、約100のアクティビティがあり、それらをすべてフラグメントに変更するとしばらく時間がかかるためです。私はHorizo​​ntalScrollViewでこれを行うことができましたが、私はDrawerLayoutがはるかにクリーンであると感じています。 –

答えて

2

これは私にはしばらく時間がかかりましたが、私のアプリでこの作業をすることができました。違いがあるのか​​どうかは分かりませんが、HoloEverywhereを使用していますので、これは標準のPreferenceActivityでも有効です。私は私のカスタムあなたのようなもので、listの標準アンドロイドidのListViewを持ってDrawerLayoutをロードするためにsetContentView()のすべてのバージョンをオーバーライド私のPreferenceActivity

。私はsuper.setContentView()を呼び出した後、最後の方法では、私はonContentChanged()を呼び出すことを確認しました:

@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()では、私はまだ私の異なるPreferenceScreen秒間すべてHeader Sを作成するためにloadHeadersFromResource()を呼び出します。

+0

ありがとうございました。私はずっと前に移動し、自分のアクティビティを実装してPreferenceActivityのルック・アンド・フィールを模倣しました。私はあなたの返信を「回答済み」とマークします。 – CocoaAficionado

+0

@jon私はここに書くのと同じコードを実装しますが、うまくいきません、あなたが私に質問してくださいplzを助けることができます:http://stackoverflow.com/questions/37629855/how-to-set-navigation-drawerイン・プレアタクティビティ –

関連する問題