में सही टेक्स्ट रंग/उपस्थिति मैं काफी लंबे समय तक इस समस्या के साथ संघर्ष कर रहा हूं। मैंने समाधान की खोज की और वास्तव में संबंधित समस्याओं के लिए कुछ सुझाव थे, लेकिन वास्तव में मेरे लिए कुछ भी सही ढंग से काम नहीं किया। तो मान लें कि मैं एक (लंबा) संदेश, एक चेकबॉक्स और दो बटन के साथ एक अलर्टडिअलॉग बनाना चाहता हूं।अलर्टडिअलॉग
// create dialog
AlertDialog.Builder dlg = new AlertDialog.Builder(this);
dlg.setTitle(R.string.dlg_title);
dlg.setMessage(R.string.dlg_msg);
// add checkbox
final CheckBox checkbox = new CheckBox(this);
dlg.setView(checkbox);
// add buttons
dlg.setPositiveButton(...);
dlg.setNegativeButton(...);
// show dialog
dlg.show();
यह काम नहीं करेगा, क्योंकि अगर संवाद संदेश बहुत लंबा हो जाता है, चेकबॉक्स पूरी तरह से नहीं दिखाया जाएगा। इसके अतिरिक्त, यह लैंडस्केप मोड में पूरी तरह छुपा जा रहा है।
अगला प्रयास original dialog layout file (मेरे लिए यह एंड्रॉइड-एसडीके-लिनक्स_86/प्लेटफॉर्म/एंड्रॉइड -17/डेटा/रेस/लेआउट/alert_dialog.xml) के अंतर्गत स्थित है और बनाने के लिए प्रासंगिक भाग की प्रतिलिपि बनाने का प्रयास करेगा हमारे अपने भीतर संवाद लेआउट की "क्लोन", बस इस तरह:
dialog_checkbox.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical" >
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:overScrollMode="ifContentScrolls"
android:paddingBottom="12dip"
android:paddingLeft="14dip"
android:paddingRight="10dip"
android:paddingTop="2dip" >
<TextView
android:id="@+id/message"
style="?android:attr/textAppearanceMedium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dip" />
</ScrollView>
<CheckBox
android:id="@+id/checkbox"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
हम इस तरह हमारे संवाद करने के लिए इस दृश्य जोड़ने के लिए कोशिश कर सकते:
// create dialog
AlertDialog.Builder dlg = new AlertDialog.Builder(this);
dlg.setTitle(R.string.dlg_title);
// add checkbox
LinearLayout checkboxLayout = (LinearLayout) View.inflate(mContext, R.layout.dialog_checkbox, null);
((TextView) checkboxLayout.findViewById(R.id.message)).setText(R.string.dlg_msg);
mCheckbox = (CheckBox) checkboxLayout.findViewById(R.id.checkbox);
mCheckbox.setText(R.string.dlg_checkbox_msg);
setView(checkboxLayout);
// add buttons
dlg.setPositiveButton(...);
dlg.setNegativeButton(...);
// show dialog
dlg.show();
यह वास्तव में काफी अच्छी तरह से काम करता है। लगभग। जब तक हम थीम का उपयोग नहीं करेंगे तब तक हमें कोई समस्या नहीं दिखाई देगी। हमारे ऐप के लिए लाइट। लेकिन जैसे ही हम थीम का उपयोग करते हैं। लाइट, डायलॉग टेक्स्ट रंग काले रंग की पृष्ठभूमि पर काले और अपठनीय हो जाएंगे। क्यों ?!
- हमने मूल एंड्रॉइड अलर्ट संवाद xml लेआउट स्रोत कोड को क्लोन कर दिया है। लेकिन हालांकि हम टेक्स्ट शैली के रूप में attr/textAppearanceMedium का उपयोग करते हैं, फिर भी टेक्स्ट रंग थीम के नीचे काला हो जाता है। वैसे भी।
- यदि हम थीम.लाइट का उपयोग करते हैं और setMessage के माध्यम से सामान्य संदेश के साथ "सामान्य" संवाद बनाते हैं, तो टेक्स्ट रंग सफेद और पठनीय होता है।
क्या गलत है? इसे कैसे हल करें? मैं प्रोग्राम को रंग या सफेद रंग या काले रंग में सेट नहीं करना चाहता, यह कस्टम उपयोगकर्ता विषयों पर अच्छा नहीं लगेगा। कोई सुझाव?
जैसा कि कहा गया है, मैं इस समाधान को पसंद नहीं करता हूं। क्या, अगर कोई कस्टम थीम का उपयोग करता है, जहां संवाद में हल्की पृष्ठभूमि और एक गहरा पाठ रंग होता है? उन्हें तब समस्याएं होने वाली हैं। यह समाधान मेरी राय में बिल्कुल साफ नहीं है। – flxapps
नहीं, आप इसे आजमा सकते हैं क्योंकि यदि आप टेक्स्ट रंग सफेद को स्पष्ट रूप से देंगे, तो यह किसी भी थीम के डिफ़ॉल्ट रंग को ओवरराइड करेगा। –
आपको समझ में नहीं आता है। कुछ एंड्रॉइड उपयोगकर्ताओं के पास कस्टम रोम हैं और उनमें से कुछ कस्टम रोम व्यक्तिगत रूप से थीम्ड हैं। और उनमें से कुछ व्यक्तिगत विषयों में बहुत उज्ज्वल रंग हो सकते हैं। और उनमें से कुछ चमकदार रंगीन विषयों में चमकदार संवाद पृष्ठभूमि हो सकती है। और वे थीम जिनके पास उज्ज्वल संवाद पृष्ठभूमि हैं, वे संवाद टेक्स्ट को पठनीय बनाने के लिए तर्कसंगत रूप से काले रंग के रंगों का उपयोग करेंगे। और अगर मैं सफेद रंग के साथ इस पाठ रंग को ओवरराइड करता हूं, तो चमकदार पृष्ठभूमि पर दिखाया गया सफेद टेक्स्ट होगा। क्या आप एक सफेद पृष्ठभूमि पर सफेद पाठ पढ़ने में सक्षम होंगे? मुझे ऐसा नहीं लगता ... – flxapps