2012-12-04 15 views
11

मेरे पास "greenhighlight" नामक एक थीम है — यह विषय Android Action Bar Style Generator का उपयोग करके उत्पन्न किया गया था, और डिफ़ॉल्ट एक्शनबारशेल थीम से विरासत में मिला है। थीम एक्शनबार के नीचे नीले रंग से हरे रंग के हाइलाइट को छोड़कर कुछ भी नहीं करता है।मेरे संवाद के नीले हाइलाइट रंग को बदलने के लिए मुझे किन थीम विशेषताओं को ओवरराइड करने की आवश्यकता है?

विषय के लिए

मेरे सभी गतिविधियों, मैं सिर्फ कार्य करें:

<application android:theme="@style/Theme.greenhighlight"... 

यह गतिविधियों के लिए बहुत अच्छी तरह से काम करता है (ActionBar के तल पर हरे प्रकाश डाला ध्यान दें):

themed Android activity

हालांकि , मुझे अपनी गतिविधियों से मेल खाने के लिए अपने संवादों में मदद करने में कठिनाई हो रही है:

default theme Android list dialog

<style name="greenhighlight_Dialog" parent="@style/Theme.Sherlock.Dialog"> 
    <item name="android:progressBarStyleHorizontal"> 
     @style/greenhighlight_ProgressBar 
    </item> 
</style> 

मैं डिफ़ॉल्ट शर्लक संवाद विषय से इनहेरिट कर रहा हूँ, और प्रगति बार शैली का उपयोग प्रगति बार अधिभावी के रूप में मेरे उत्पन्न द्वारा परिभाषित:

default theme Android progress dialog

मेरे "greenhighlight_Dialog" विषय के रूप में परिभाषित किया गया है "ग्रीनहाइटलाइट" थीम — आप देख सकते हैं कि प्रगति पट्टी ऊपर स्क्रीनशॉट में हरे रंग की सही छाया है।

विषय का उपयोग करने के लिए, मैं निम्नलिखित कोड चल रहा हूँ:

ContextThemeWrapper ctw = 
    new ContextThemeWrapper(this, R.style.greenhighlight_Dialog); 
AlertDialog.Builder builder = new AlertDialog.Builder(ctw); 
... 
ProgressDialog pd = new ProgressDialog(this, R.style.greenhighlight_Dialog); 
... 

मेरे समस्या मुझे नहीं पता कि मैं क्या ओवरराइड करने के लिए की जरूरत है गुण होता है। और themes.xml को Styles and Themes डॉको द्वारा अनुशंसित किया गया है (जो नोट करता है कि "आर। स्टाइल संदर्भ, हालांकि, अच्छी तरह से प्रलेखित नहीं है और शैलियों का पूरी तरह वर्णन नहीं करता है") — लेकिन कई शैलियों को परिभाषित किया गया है थीम पर। डायलॉग और मुझे यकीन है कि मुझे जो परिवर्तन चाहिए, उसे पाने के लिए मुझे ओवरराइड करने की आवश्यकता है।

मेरे संवाद के लिए हरे रंग के शीर्षक पाठ, शीर्षक के नीचे एक हरे रंग की हाइलाइट बार और चेक किए गए सूची आइटमों के लिए हरे रंग के चेक अंक रखने के लिए मुझे किन गुणों को ओवरराइड करने की आवश्यकता है?

+0

अच्छा सवाल। लेकिन कृपया इस लाइन को [एक्शनबैरशेलॉक - थमिंग] (http://actionbarsherlock.com/theming.html) पर पढ़ें: * कोई अतिरिक्त संवाद थीम शामिल नहीं की जाएगी। यदि आपको संवाद की कुछ और अधिक उन्नत विशेषताओं की आवश्यकता है तो उन्हें स्वयं लागू किया जाना चाहिए। * –

+1

@PareshMayani: हाँ, मैंने उस पंक्ति को पढ़ा है - यही कारण है कि मैं अपनी खुद की संवाद विषय लागू कर रहा हूं। – George

उत्तर

23

मैं स्रोत के चारों ओर खुदाई कर गया और alert_dialog_holo.xml लेआउट फ़ाइल में आया। ,

<View android:id="@+id/titleDivider" 
    android:layout_width="match_parent" 
    android:layout_height="2dip" 
    android:visibility="gone" 
    android:background="@android:color/holo_blue_light" /> 

AlertController वर्ग में यह दृश्यता VISIBLE के लिए निर्धारित है अगर वहाँ एक शीर्षक मौजूद है: यह विभक्त दृश्य है। चूंकि रंग हार्डकोड किया गया है, इसलिए स्टाइल विशेषता के साथ इसे ओवरराइट करने का कोई तरीका नहीं होगा।

<com.android.internal.widget.DialogTitle android:id="@+id/alertTitle" 
    style="?android:attr/windowTitleStyle" 
    android:singleLine="true" 
    android:ellipsize="end" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

तो यह windowTitleStyle उपयोग करता है:

यह शीर्षक दृश्य है।यह पीछा का एक बहुत ले लिया है, लेकिन मैं अंत में शैली का उपयोग करता है पाया:

<style name="TextAppearance.Holo.DialogWindowTitle"> 
    <item name="android:textSize">22sp</item> 
    <item name="android:textColor">@android:color/holo_blue_light</item> 
</style> 

माता पिता शैलियों वापस के बाद, मैं पाठ रंग शैलियों के माध्यम से ही बदलने में सक्षम था: के लिए अब

<style name="AppTheme" parent="@android:style/Theme.Holo"> 
    <item name="android:alertDialogTheme">@style/AlertDialogStyle</item> 
</style> 

<style name="AlertDialogStyle" parent="@android:style/Theme.Holo.Dialog"> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item> 
    <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item> 
    <item name="android:windowTitleStyle">@style/DialogWindowTitle</item> 
</style> 

<style name="DialogWindowTitle"> 
    <item name="android:maxLines">1</item> 
    <item name="android:scrollHorizontally">true</item> 
    <item name="android:textAppearance">@style/DialogWindowTitleAppearance</item> 
</style> 

<style name="DialogWindowTitleAppearance" parent="@android:style/TextAppearance.Holo.DialogWindowTitle"> 
    <item name="android:textColor">#00ff00</item> 
</style> 

विभक्त, आप शैलियों के माध्यम से इसे बदल नहीं सकते हैं, लेकिन चूंकि आप आईडी को जानते हैं, इसलिए आप AlertDialog कक्षा का विस्तार कर सकते हैं और इसे लेआउट (ऑनक्रेट) बनाते समय इसे रोक सकते हैं और इसका रंग बदल सकते हैं। हालांकि इसे निजी AlertController कक्षा में संभाला जाता है, इसलिए मुझे यकीन नहीं है कि आपके पास कितनी किस्मत होगी। मैं इसे और अधिक देखूंगा और अगर मैं कुछ भी लेकर आऊंगा तो वापस आऊंगा।

+0

हाय जेसन आपको इस तरह के एक महान काम के लिए धन्यवाद .. यह अन्य सभी चीजों के लिए ठीक काम कर रहा है जैसे कि हेडर टेक्स्ट रंग और इत्यादि बदलना। लेकिन जब मैंने हेडर डिवाइडर ऊंचाई या विभाजक के रंग को बदलने की कोशिश की तो यह दृश्य में दिखाई देता है। क्या आप यह बता सकते हैं कि यह कैसे करें .. मदद की ज़रूरत है ... धन्यवाद ... – nilkash

+1

@nilkash, मैं इस बारे में जानने के लिए क्या कर रहा था, शीर्षक सेट नहीं करना और कस्टम संदेश लेआउट का उपयोग करना था। मेरे कस्टम संदेश लेआउट में मैंने अपना खुद का विभक्त बनाया जो मेरी थीम से मेल खाता है। –

+0

@pegisys आपको धन्यवाद। लेकिन मुझे नहीं पता कि विभाजक रंग मेरे ऐप से मेल खाता है .. मैंने बहुत सी चीजें की लेकिन ऐसा करने में सक्षम नहीं था। मुख्य रूप से संदर्भ विंडो और संवाद के लिए। मैं टेक्स्ट बदलने और पाठ सुनने या संदर्भ के लिए कस्टम हेडर सेट करने में सक्षम हूं लेकिन अभी भी हेडर डिवाइडर का रंग बदलने में सक्षम नहीं हूं ... आपकी मदद की ज़रूरत है धन्यवाद ... – nilkash

2

मैं विभक्त दूर करने के लिए एक समाधान पाया: बस (जेसन रॉबिन्सन जवाब में AlertDialogStyle का संदर्भ लें) अपने कस्टम अलर्ट संवाद शैली में निम्नलिखित पंक्ति जोड़ें:

<item name="android:divider">@null</item>" 

तो विभक्त चला गया होगा।

यदि आप अभी भी एक कस्टम विभक्त जोड़ना चाहते हैं, तो आप इसे अपने कस्टम सामग्री लेआउट में जोड़ सकते हैं।

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

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