Ответ 1
И селектор также является ответом здесь.
Найдите ярлык_text_dark_focused.xml в источниках, добавьте в свой проект каталог res/color и затем обратитесь к TextView как
android:textColor="@color/bright_text_dark_focused"
Я хочу, чтобы простой 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
?
И селектор также является ответом здесь.
Найдите ярлык_text_dark_focused.xml в источниках, добавьте в свой проект каталог res/color и затем обратитесь к TextView как
android:textColor="@color/bright_text_dark_focused"
Я получил несколько тестов, пока не работал, так что: Рез/цвет/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"
.
Вот пример селектора. Если вы используете eclipse, это не подсказывает, когда вы нажимаете Ctrl и пробел:/вы должны ввести его.
<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/topics/resources/drawable-resource.html#StateList
Я всегда использовал вышеупомянутое решение, не искав больше после этого.; -)
Однако сегодня я наткнулся на что-то и подумал об обмене.:)
Эта функция действительно доступна из API 1 и называется ColorStateList, где мы можем предоставить цвет различным состояниям виджетов (как мы уже знаем).
Это также очень хорошо документировано, здесь.
Если вы используете TextViews во вкладках, это селекторное определение сработало для меня (попробовал Klaus 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
}
});
Надеюсь, это поможет или даст вам идеи.