سؤال

أنا استخدم ExpandableListView في تطبيقي وأحد الشكاوى التي أحصل عليها من المستخدمين هي أنه عندما List يتم توسيع عنصر من الصعب التمييز بصريا حيث ينتهي عنصر الطفل ويبدأ عنصر المجموعة التالي.

لذلك أود تغيير خلفية الطفل List عنصر إلى الظل المختلفة.

كانت المحاولات الوحشية التي أدلت بها حتى الآن استنادا إلى تغيير لون الخلفية مباشرة ونص العناصر داخل الطفل View البند ولكن هذا يؤدي إلى فقدان التحميم ويبرز. لذلك سؤالي - ما هي استراتيجية جيدة لتحقيق ما سبق؟

حاولت styles و selectors ولكن ما هي Bums Me حقا إذا قمت بتغيير الخلفية عن البند الطفل، فأنا بحاجة إلى إضافة selectors لجميع مجموعات التركيز / الممكن إلخ. عندما كل ما أحاول القيام به للكتابة فوق شيء واحد.

هل هناك طريقة لرث الوالد style وحدد background فقط لعنصر الطفل غير المركزة مع الآخرين styles المحتجزة؟

هل كانت مفيدة؟

المحلول

نحن سوف. إليك ما نجح لي:

  1. إنشاء List_background.xml في مشروعك res/drawable الدليل
  2. قم بتعيين قيمة الخلفية لتخطيط المستوى العلوي من عنصر طفلك إلى أعلى قابل للشرح أعلاه. إذا كنت تخدش رأسك في هذه المرحلة - أشير إلى ملف تخطيط 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);
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top