Android - ExportableSview تغيير خلفية للأطفال
-
19-09-2019 - |
سؤال
أنا استخدم ExpandableListView
في تطبيقي وأحد الشكاوى التي أحصل عليها من المستخدمين هي أنه عندما List
يتم توسيع عنصر من الصعب التمييز بصريا حيث ينتهي عنصر الطفل ويبدأ عنصر المجموعة التالي.
لذلك أود تغيير خلفية الطفل List
عنصر إلى الظل المختلفة.
كانت المحاولات الوحشية التي أدلت بها حتى الآن استنادا إلى تغيير لون الخلفية مباشرة ونص العناصر داخل الطفل View
البند ولكن هذا يؤدي إلى فقدان التحميم ويبرز. لذلك سؤالي - ما هي استراتيجية جيدة لتحقيق ما سبق؟
حاولت styles
و selectors
ولكن ما هي Bums Me حقا إذا قمت بتغيير الخلفية عن البند الطفل، فأنا بحاجة إلى إضافة selectors
لجميع مجموعات التركيز / الممكن إلخ. عندما كل ما أحاول القيام به للكتابة فوق شيء واحد.
هل هناك طريقة لرث الوالد style
وحدد background
فقط لعنصر الطفل غير المركزة مع الآخرين styles
المحتجزة؟
المحلول
نحن سوف. إليك ما نجح لي:
- إنشاء List_background.xml في مشروعك
res/drawable
الدليل - قم بتعيين قيمة الخلفية لتخطيط المستوى العلوي من عنصر طفلك إلى أعلى قابل للشرح أعلاه. إذا كنت تخدش رأسك في هذه المرحلة - أشير إلى ملف تخطيط XML الذي يستخدمه عند إنشاء عرض إطفائي لقائمتك القابلة للتوسيع في
ExpandableListAdapter#getChildView
هنا ملف كامل الملف
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:state_enabled="true"
android:drawable="@drawable/list_highlight_active" />
<item android:state_enabled="true" android:state_selected="true"
android:state_window_focused="true"
android:drawable="@drawable/list_highlight_inactive" />
<item android:state_enabled="true" android:state_window_focused="true"
android:drawable="@color/item_body" />
<item android:drawable="@color/item_body" />
</selector>
اضطررت إلى نسخ list_highlight_active.xml
و list_highlight_inactive.xml
من /android-sdk-windows-1.6_r1/platforms/android-1.5/data/res/drawable
إلى الدليل القابل للشرح لمشروعي. @color/item_body
هو مجرد ظلال رمادية
نصائح أخرى
لقد اكتشفت طريقة "إلى حد ما" وضع لون الخلفية دون الحاجة إلى القفز من خلال الأطواق المحددة.
كما لاحظت، وضع الخلفية لطلاء الألوان الصلبة من يبرز المحدد لأن لون الخلفية الجديد يحجبه. Droidin لديه ما هو الحل الطبيعي: توفير محدد الخلفية الخاصة بك مع الألوان الدقيقة التي تريدها. إنه لألم أن أقول أقل.
ولكن إذا كان كل ما تريده هو تمايز اللون قليلا، فهناك طريقة أبسط: مزيج ألفا. اضبط لون الخلفية الخاص بك مع قيمة ألفا. على سبيل المثال، تعيين الخلفية إلى "#BBFFFFFF". أول رقمين يشيران إلى مستوى ألفا. ستكون جميعها مزيجا لذا فإن الخلفية لن تكون بيضاء نقية ولن يكون التحديد هو البرتقال الساطع العادي ولكن الأطفال سيكونون لون مختلف ويعمل الضوء. الفوز الفوز.
أنا أبحث عن محلول مماثلة. يمكنك محاولة الحصول على عرض الأصل على طريقة محول GetChieldView. أعتقد أن هذا الوالد هو منظر الوالد على جميع درجاتك. وتعيين خلفية من الموارد إلى هذا الوالد. أنا جعلها مثل هذا:
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.fa_report_sub_item, null);
View parentGroup=(View) convertView.getParent();
parentGroup.setBackgroundResource(R.drawable.fa_summ_report_main_item);
}