7

Çekmece Düzenleme işlevselliğinden yararlanmak için bir Android uygulaması yazıyorum. Çekmece Düzenini, uygulama boyunca kullanılabilen bir gezinme aracı olarak kullanma becerisine sahip olmak istiyorum. Çekmece Düzeni kullanmak için, benim etkinlik düzeni xml dosyalarında aşağıdaki kullanıyorum:Bir Android uygulamasında PreferenceActivity etrafında DrawerLayout nasıl kaydırılır?

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

Ancak, ben PreferenceActivity etrafında DrawerLayout sarma zorluklar bir çok yaşıyorum. PreferenceActivity, uygulamasındaki Android tercihlerinin görünümünü ve hissini korumamda bana yardımcı olduğu için korumak istediğim özel bir etkinlik türüdür; söyleniyor, addPreferencesFromResource() çağrıları, tercihleri ​​yüklemek için kullanır ve XML dosyalarını yüklemek için addContentView() çağrıları kullanmaz; tercih kaynakları genellikle DrawerLayouts'ta sarılmayı sevmeyen PreferenceScreen etiketleri içerir.

Herkes bu konuyla uğraşmak zorunda kaldı ve bunu nasıl çözdünüz? Android uygulamanızda PreferenceActivity varsa ve aynı etkinlikte DrawerLayout mevcutsa, bunu nasıl yaptığınızı paylaşın. Herhangi bir yardım çok takdir edilecektir.

EDITED: Sonra app id "liste" Tercih Etkinlik için beklediği eşleştiği için PreferenceActivity (yüklendiğinde çökmez

<!-- 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" /> 

değiştirirseniz) bulmak; Ancak, Çekmece göstermiyor. ListView "listesinin" altındaki her şey göz ardı ediliyormuş gibi.

+0

Ayrıca mevcut etkinliklerimi korumak ve çekmeceyi dinamik olarak eklemek istiyorum. PreferenceActivity'den değil, 100'e yakın etkinlik olduğu için ve hepsini parçalara ayırmak biraz zaman alacaktır. Bunu HorizontalScrollView ile yapabildim, ancak DrawerLayout'un daha temiz olacağını hissediyorum. –

cevap

2

Bu biraz zaman aldı, ancak bu çalışmayı uygulamam için yapabiliyordum. Fark yaratıp yaratmadığını bilmiyorum, ancak HoloEverywhere kullanıyorum, bu yüzden bunun sadece standart PreferenceActivity üzerinde çalışacağını farz ediyorum. Benim özel sizinki gibi olup list standart android kimlikli bir ListView sahiptir DrawerLayout yüklemek için setContentView() tüm sürümlerini overrode benim PreferenceActivity yılında

. Ben super.setContentView() denilen sonra geçen yöntemde ben onContentChanged() aramak emin oldum:

@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() yılında hala benim farklı PreferenceScreen s için tüm Header ler oluşturmak için loadHeadersFromResource() arayın.

+0

Teşekkür ederim Jon. Uzun zamandır tercihim var ve PreferenceActivity görünümünü ve hissini taklit etmek için kendi Aktivitemi uyguladım. Cevabınızı "cevaplandı" olarak işaretleyeceğim. – CocoaAficionado

+0

@jon i burada yazdığınızla aynı kodu uygular ama çalışmıyor, lütfen bana yardımcı olabilir misiniz, http://stackoverflow.com/questions/37629855/how-to-set-navigation-drawer -in-preferenceactivity –