20

アプリのユーザーに現在どのフィールドがフォーカスされているかを示すために、現在の状態に応じて一部のフィールドの背景色を変更しようとしていますが、Android の色状態リスト リソースを理解するのに問題があります。

例を見つけました(申し訳ありませんが、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 と background の属性値を反転させた下のボタンのコメントを外すと、次のような例外が発生します。

... <item> tag requires a 'drawable' attribute or child tag defining a drawable

ここで何が欠けているのですか?その色の状態のリストがテキストの色として受け入れられるのに、背景色として受け入れられないのはなぜですか? ビューの状態に応じてビューの背景色を指定するにはどうすればよいですか?

4

3 に答える 3

66

私はこの正確な問題を抱えていました。android:backgroundColor State Lists では機能しないように見えます。代わりに State List Drawable を作成することでこれを回避しました (State List では個々の色を drawable として使用できます)。

あなたの例を使用するには、ファイルを作成しますres/drawable/button_test_background.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"   android:drawable="@color/pressed_color"/>
    <item android:state_focused="true"   android:drawable="@color/focused_color"/>
    <item android:drawable="@color/default_color"/>
</selector>

android:drawableの代わりに を使用していることに注意してくださいandroid:color。Android は color リソースを使用し、そこからドローアブルを作成します。res/values/colors.xmlこれを完了するには、カラー リソースをファイルに追加する必要があります。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    ...
    <color name="pressed_color">#f0f</color>
    <color name="focused_color">#ff0</color>
    <color name="default_color">#000</color>
    ...
</resources>

@drawable/button_test_background次に、代わりに を使用してこのドローアブルを参照し@color/button_test_colorます。

つまり、要約すると、Color State List は に対して正常に機能しますandroid:textColorandroid:background、State List Drawable メソッドには上記の方法が必要です。

于 2013-08-08T16:54:01.967 に答える
-1

色ではなく、drawable として textColor を定義してみてください。

android:textColor="@drawable/button_test_color"

リソース カテゴリは、それらが配置されているフォルダーの名前ではなく、リソースの種類に基づいています。button_test_color.xml 形式の XML ファイルは、通常、「描画可能」として参照されます。実際に「色」がまったく機能していないことに驚いています。 !

于 2010-10-17T21:28:08.437 に答える