محدد Android ولون النص
-
10-07-2019 - |
سؤال
أريد بسيطة 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()
}
وعذرا إذا كان هناك أخطاء، لقد غيرت رمز قبل النشر ولم تحقق.