سؤال

أريد بسيطة TextView أن تتصرف بالطريقة simple_list_item_1 في ListView يفعل.إليك ملف XML:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content" android:layout_width="fill_parent"
    android:gravity="center" android:focusable="true"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:background="@android:drawable/list_selector_background" />

كل شيء يعمل باستثناء لون النص الذي (متوقع) لا يتغير في الحالة المركزة.كيف أجعله يتغير إلى textAppearanceLargeInverse?

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

المحلول 2

ومحدد هو الجواب هنا أيضا.

والبحث عن bright_text_dark_focused.xml في المصادر، إضافة إلى المشروع الخاص بك تحت الدقة / دليل اللون ثم الرجوع من TextView ك

android:textColor="@color/bright_text_dark_focused"

نصائح أخرى

وحصلت عن طريق القيام بعدة اختبارات حتى عمل واحد، لذلك: RES / اللون / button_dark_text.xml

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true"
           android:color="#000000" /> <!-- pressed -->
     <item android:state_focused="true"
           android:color="#000000" /> <!-- focused -->
     <item android:color="#FFFFFF" /> <!-- default -->
 </selector>

والدقة / تخطيط / view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
    <Button
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="EXIT"
       android:textColor="@color/button_dark_text" />
</LinearLayout>

إليك تنفيذ بلدي، الذي يتصرف تماما كما البند في قائمة (على الأقل 2.3)

والدقة / تخطيط / list_video_footer.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:id="@+id/list_video_footer"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@android:drawable/list_selector_background"
        android:clickable="true"
        android:gravity="center"
        android:minHeight="98px"
        android:text="@string/more"
        android:textColor="@color/bright_text_dark_focused"
        android:textSize="18dp"
        android:textStyle="bold" />

</FrameLayout>

والدقة / اللون / bright_text_dark_focused.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_selected="true" android:color="#444"/>
    <item android:state_focused="true" android:color="#444"/>
    <item android:state_pressed="true" android:color="#444"/>
    <item android:color="#ccc"/>

</selector>

في لجعلها تعمل على التحديد في عرض القائمة استخدام التعليمات البرمجية التالية:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="#fff"/>
    <item android:state_activated="true" android:color="#fff"/>
    <item android:color="#000" />
</selector>

ويبدو أن المفتاح هو الدولة state_activated="true".

وهنا مثال محدد. إذا كنت تستخدم الكسوف، فإنه لا يعني شيئا عند النقر فوق السيطرة والمكان على حد سواء: / يجب أن اكتبه

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btn_default_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/btn_default_selected"
    android:state_focused="true"
    android:state_enabled="true"
    android:state_window_focused="true"  />
<item android:drawable="@drawable/btn_default_normal" />

ويمكنك أن تبحث في كمرجع؛

http://developer.android.com/guide/ المواضيع / موارد / drawable-resource.html # StateList

لقد استخدمت الحل أعلاه دائمًا دون البحث أكثر بعد ذلك.؛-)

ومع ذلك، صادفت اليوم شيئًا ما وفكرت في مشاركته.:)

هذه الميزة متاحة بالفعل من API 1 وتسمى باسم ColorStateList, ، حيث يمكننا توفير لون لحالات الأدوات المختلفة (كما نعلم بالفعل).

كما أنها موثقة بشكل جيد للغاية، هنا.

إذا باستخدام TextViews في علامات التبويب عملت هذا التعريف محدد بالنسبة لي (حاول كلاوس Balduino لكنه لم يفعل ذلك):

<?xml version="1.0" encoding="utf-8"?>    
<selector xmlns:android="http://schemas.android.com/apk/res/android">

  <!--  Active tab -->
  <item
    android:state_selected="true"
    android:state_focused="false"
    android:state_pressed="false"
    android:color="#000000" />

  <!--  Inactive tab -->
  <item
    android:state_selected="false"
    android:state_focused="false"
    android:state_pressed="false"
    android:color="#FFFFFF" />

</selector>

هل حاولت setOnFocusChangeListener؟ داخل معالج، هل يمكن أن تغيير مظهر النص.

وعلى سبيل المثال:

TextView text = (TextView)findViewById(R.id.text);
text.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            ((TextView)v).setXXXX();
        } else {
            ((TextView)v).setXXXX();
        }
    }
});

ويمكنك بعد ذلك تطبيق بالتغييرات التي تريدها عندما يكون ركزت في ذلك أم لا. يمكنك أيضا استخدام ViewTreeObserver للاستماع لإجراء تغييرات التركيز العالمية.

وعلى سبيل المثال:

View all = findViewById(R.id.id_of_top_level_view_on_layout);
ViewTreeObserver vto = all.getViewTreeObserver();
vto.addOnGlobalFocusChangeListener(new ViewTreeObserver.OnGlobalFocusChangeListener() {
    public void onGlobalFocusChanged(
        View oldFocus, View newFocus) {
        // xxxx
    }
});

وآمل أن يساعد هذا أو يمنحك الأفكار.

في مكان res/color ملف "text_selector.xml":

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/blue" android:state_focused="true" />
    <item android:color="@color/blue" android:state_selected="true" />
    <item android:color="@color/green" />
</selector>

وبعد ذلك في TextView استخدامه:

<TextView
    android:id="@+id/value_1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Text"
    android:textColor="@color/text_selector"
    android:textSize="15sp"
    />

وفي التعليمات البرمجية التي سوف تحتاج إلى تعيين بنقرة والمستمع.

private var isPressed = false

private fun TextView.setListener() {
    this.setOnClickListener { v ->
        run {
            if (isPressed) {
                v.isSelected = false
                v.clearFocus()
            } else {
                v.isSelected = true
                v.requestFocus()
            }
            isPressed = !isPressed
        }
    }
}

override fun onResume() {
    super.onResume()
    textView.setListener()
}

override fun onPause() {
    textView.setOnClickListener(null)
    super.onPause()
}

وعذرا إذا كان هناك أخطاء، لقد غيرت رمز قبل النشر ولم تحقق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top