2010-01-27 14 views
6

मैं नेक्सस वन पर अपने एप्लिकेशन का परीक्षण कर रहा हूं और मुझे कुछ समस्याएं हैं। मेरी थीम लाइट और है जब एक आंतरिक उप वरीयता स्क्रीन प्रदर्शित होती है, विंडो पृष्ठभूमि वरीयता सक्रियता को रखने के बजाय काला हो जाती है।वरीयता सक्रियता से पृष्ठभूमि उप-वरीयता स्क्रीन पर लागू नहीं है

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

समस्या क्या है?

Wouter

+0

क्या आप दूसरी वरीयता स्क्रीन जोड़ने और उसके बाद जोड़ने के समान दिखने के स्क्रीन शॉट दिखा सकते हैं? – CaseyB

+0

यह मेरी मुख्य वरीयता स्क्रीन http://snapplr.com/fqxc है, इसलिए जब मैं "Herinneringen" (अधिसूचनाओं के लिए डच) पर क्लिक करता हूं तो यह मुझे यह दिखाता है http://snapplr.com/gjzd (और कोई तीर नहीं है Herinneringen के बगल में, जहां एक होना चाहिए!) यहाँ क्या समस्या है? – wouter88

+0

क्या आप एक नई गतिविधि लोड कर रहे हैं या आप सिर्फ एक दृश्य को बढ़ा रहे हैं और ओवरले कर रहे हैं? – CaseyB

उत्तर

1

सबसे अच्छा समझने के लिए यहां क्या हो रहा है आप PreferenceScreen वर्ग के लिए स्रोत कोड से कोड के इस टुकड़े का उल्लेख कर सकते हैं:

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

तरह से है कि मैं इसे हल करने के स्थापित करने के लिए है पहली वरीयता में क्रिएटिव्यू को ओवरराइड करके अभिभावक पृष्ठभूमि रंग वरीयता स्क्रीन में जोड़ा गया। बेशक यह कुछ कस्टम कोड की आवश्यकता है, लेकिन यह, बहुत जटिल नहीं है उदाहरण के एक सफेद पृष्ठभूमि सेट करने के लिए के लिए:

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); 
    } 
} 

फिर आप निश्चित रूप से अपने xml बदलकर कि कस्टम श्रेणी का उपयोग करने की आवश्यकता होगी, अर्थात्:

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

इसके अलावा, यदि आप देखते हैं कि एंड्रॉइड वरीयता स्क्रीन शीर्षक को सेट करता है या नहीं, इस पर आधारित विषय बदलता है, यानी यदि कोई शीर्षक मौजूद है तो यह शीर्षक थीम को शामिल करने वाली थीम को सक्षम बनाता है। इसलिए यदि आप कोई शीर्षक पट्टी नहीं चाहते हैं तो आपको वरीयता स्क्रीन शीर्षक सेट करने से रोकना चाहिए और इसे स्थिर रूप से xml या गतिशील रूप से कोड के माध्यम से सेट करना चाहिए।

2

इस का उपयोग करें:

मैनिफ़ेस्ट फ़ाइल उपयोग में style.xml फ़ाइल

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

में थीम बनाएं और फिर:

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

सभी उप गतिविधियों जो आप चाहते हैं के लिए ऐसा करें।

+0

मेरे लिए काम किया, बहुत धन्यवाद –

1

क्या आपने यह कोशिश की है?

@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; 
    } 

इस विधि को अपने PreferenceActivity में जोड़ें।

इस source से टिप्पणी # 35 पर।

संबंधित मुद्दे