2010-01-27 34 views
6

Uygulamamı Nexus One'da test ediyorum ve bazı sorunlarım var. Bir iç alt PreferenceScreen görüntülendiğinde, temam Işık ve , PreferenceActivity değerini korumak yerine pencere arka planı siyah olur.PreferenceActivity arka planı, Alt Tercihler Ekranına uygulanmadı

<PreferenceScreen android:title="main preferences"> 
    ... 
    <PreferenceScreen android:title="sub screen"> 
    </PreferenceScreen> 
</PreferenceScreen> 

Sorun nedir?

Wouter

+0

İkinci PreferenceScreen'i eklemeden önce ve sonra nasıl göründüğünün ekran görüntüsünü gösterebilir misiniz? – CaseyB

+0

Bu benim ana tercihlerim http://snapplr.com/fqxc, Bu yüzden "Herinneringen" (bildirimleri için Hollandaca) tıkladığınızda bana bu http://snapplr.com/gjzd gösterir (Ve bir ok yok Herinneringen'in yanında, orada bir tane olmalı!) Burada sorun nedir? – wouter88

+0

Yeni bir etkinlik mi yüklüyorsunuz yoksa sadece bir görünümü şişiriyor ve üstleniyor musunuz? – CaseyB

cevap

1

en iyisi PreferenceScreen sınıf için kaynak kodundan kod parçası başvurabilir burada neler olduğunu anlamak için:

@Override 
    protected void onClick() { 
     if (getIntent() != null || getPreferenceCount() == 0) { 
      return; 
     } 

     showDialog(null); 
    } 

    private void showDialog(Bundle state) { 
     Context context = getContext(); 
     ListView listView = new ListView(context); 
     bind(listView); 

     // Set the title bar if title is available, else no title bar 
     final CharSequence title = getTitle(); 
     Dialog dialog = mDialog = new Dialog(context, TextUtils.isEmpty(title) 
       ? com.android.internal.R.style.Theme_NoTitleBar 
       : com.android.internal.R.style.Theme); 
     dialog.setContentView(listView); 
     if (!TextUtils.isEmpty(title)) { 
      dialog.setTitle(title); 
     } 
     dialog.setOnDismissListener(this); 
     if (state != null) { 
      dialog.onRestoreInstanceState(state); 
     } 

     // Add the screen to the list of preferences screens opened as dialogs 
     getPreferenceManager().addPreferencesScreen(dialog); 

     dialog.show(); 
    } 

yolu bunu geçici bir çözüm ayarlamak için olduğu tercih ekranına eklenen ilk tercihte onCreateView öğesini geçersiz kılarak ana arka plan rengi. Tabii bu, bazı özel kod gerektirir ama örnek bir beyaz arka plan ayarlamak için, korkunç karmaşık değil:

package com.justinbuser.livewallpapers; 

import android.preference.PreferenceCategory; 

public class VideoChooserPreferenceCategory extends PreferenceCategory{ 

    public VideoChooserPreferenceCategory(Context context) { 
     super(context); 
    } 

    @Override 
    protected View onCreateView(ViewGroup parent) 
    { 
     parent.setBackgroundColor(0xFFFFFFFF); 
     return super.onCreateView(parent); 
    } 
} 

Daha sonra tabii sizin xml değiştirerek bu özel kategorisi kullanmak gerekir, yani:

<PreferenceScreen android:title="main preferences"> 
    <PreferenceScreen android:title="sub screen"> 
    <com.justinbuser.livewallpapers.VideoChooserPreferenceCategory android:title="sub screen category" /> 
    </PreferenceScreen> 
</PreferenceScreen> 

Ayrıca, Android PreferenceScreen öğesinin, bir başlığın ayarlanıp ayarlanmadığına bağlı olarak temayı değiştirdiğini fark ederseniz, yani bir başlık varsa, başlık çubuğunu içeren bir temayı etkinleştirir. Bu nedenle, başlık çubuğu istemiyorsanız, tercihler ekranını ayarlamaktan kaçınmalısınız ve statik olarak xml veya dinamik olarak kod aracılığıyla ayarlamalısınız.

2

bunu kullanın:

bildirim dosyası kullanımda sonra style.xml dosyası

<style name="Theme.SettingsBackground" parent="@android:style/Theme.NoTitleBar"> 
<item name="android:windowBackground">@android:color/black</item> 
</style> 

yılında tema oluşturma ve:

<activity android:name=".Settings" android:theme="@style/Theme.SettingsBackground"></activity> 

istediğiniz tüm alt faaliyetleri için bunu yapın.

+0

Benim için çalıştı, çok teşekkürler –

1

Bunu denediniz mi?

@Override 
    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference){ 
     super.onPreferenceTreeClick(preferenceScreen, preference); 
     if (preference!=null) 
      if (preference instanceof PreferenceScreen) 
       if (((PreferenceScreen)preference).getDialog()!=null) 
        ((PreferenceScreen)preference).getDialog().getWindow().getDecorView().setBackgroundDrawable(this.getWindow().getDecorView().getBackground().getConstantState().newDrawable()); 
     return false; 
    } 

Bu yöntemi PreferenceActivity ürününüze ekleyin.

Bu source numaralı telefondan # 35 adresinde.

İlgili konular