Чтобы дать пользователю моего приложения указание, какое поле в настоящее время имеет фокус, я пытаюсь изменить цвет фона некоторых из моих полей в зависимости от текущего состояния, однако у меня возникают проблемы с пониманием содержимого списка компонентов Androids Color:
Я нашел пример (извините, URL больше не работает), и если я попробую точно то же самое, то есть, если я хочу адаптировать textColor, вещи сделать. Однако, если я попробую только немного отличающуюся вещь, а именно, чтобы адаптировать цвет фона, вещи не работают, и я не понимаю, почему? Почему это так непоследовательно?
Чтобы упростить понимание того, что я пытаюсь сделать, я добавляю свой разный..xml файлы:
Файл AndroidManifest.xml
:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="mmo.android.test"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Test"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Test-Activity
:
package mmo.android.test;
import android.app.Activity;
import android.os.Bundle;
public class Test extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
res/values/strings.xml
:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, Test!</string>
<string name="app_name">Test</string>
</resources>
res/color/button_test_color.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="#f0f"/> <!-- pressed -->
<item android:state_focused="true" android:color="#ff0"/> <!-- focused -->
<item android:color="#000"/> <!-- default -->
</selector>
и, наконец, мой файл res/layout/main.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="fill_parent"
android:layout_height="wrap_content"
android:text="foobar"
android:textColor="@color/button_test_color"
android:background="#f00"
/>
<!--
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="foobar"
android:textColor="#f00"
android:background="@color/button_test_color"
/>
-->
</LinearLayout>
Если я запустил это, как показано здесь, он работает, т.е. я получаю кнопку, цвет текста которой изменяется в зависимости от того, фокусируется ли кнопка, нажата и т.д.
Если я раскомментирую нижнюю кнопку, где я просто перевернул значения атрибута для textColor и фона, я получаю исключение, указав
... <item> tag requires a 'drawable' attribute or child tag defining a drawable
Что, черт возьми, я здесь пропал? Почему этот список состояний цвета приемлем как цвет текста, но не как цвет фона? Как задать цвет фона представления в зависимости от состояния представления?