43

簡単なことをしたいと思います: システム状態で押された背景色とまったく同じ背景色を持つドローアブルを定義します。res/drawables/my_drawable.xml で次のようにします。

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

私はいつも得る:

java.lang.UnsupportedOperationException: Cant convert to color: type=0x2

手がかりはありますか?

よろしく

4

5 に答える 5

63

問題を解決するには、次の操作が必要になる場合があります。

1) カラー ファイルでテーマごとに 2 つの色を定義します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="my_color_dark">#ff33B5E5</color>
    <color name="my_color_light">#ff355689</color>
</resources>

2) 次の内容でファイル res/values/attrs.xml を作成します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <attr name="my_color" format="reference" />
</resources>

3)styles.xml(Theme.darkおよびTheme.light)に2つのテーマがあると仮定すると、次のように定義されます。

<style name="Theme.dark" parent="@style/Theme.Sherlock">
    <item name="my_color">@color/my_color_dark</item>
</style>

<style name="Theme.light" parent="@style/Theme.Sherlock.Light">
    <item name="my_color">@color/my_color_light</item>
</style>

4) ドローアブルで色を使用する:

<color android:color="?attr/my_color"/>

これで問題が解決することを願っています。

于 2013-04-13T22:19:05.300 に答える
10

に新しいcolor.xmlファイルを作成し/res/values/color.xml、次のようなコードを挿入するだけです。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="editcolor">#ff99ffff</color>
    <color name="transparent">#00000000</color>
</resources>
于 2012-06-12T09:51:05.143 に答える
8

?attrドローアブル リソースはコンパイル時に aapt によって作成されるため、xml ドローアブル リソースでは使用できません。実行時の動的接続に使用される Attr リソース

于 2015-11-27T17:00:16.537 に答える
6

属性を色に変換しようとしています。属性は、通常はビューに関連付けられるプロパティであり、テーマを使用してスタイルを設定できます。

xml でカラー リソースを参照する必要があります。これを行うには、独自のリソースを作成します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPressedHighlight">#FF8800</color>
</resources>

次に、次のように参照します。

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

または、Android リソースで利用可能な色を参照できます。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_selected="true">
        <color android:color="@android:color/holo_orange_light"/>
    </item>
    <item android:state_selected="false">
        <color android:color="@android:color/holo_blue_dark"/>
    </item>
</selector>
于 2012-06-12T10:02:38.613 に答える
0

この方法を試して、以下のように android:drawable に色を入れてください

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="?android:attr/colorPressedHighlight"/> <!-- pressed -->
    <item android:state_focused="true" android:drawable="@color/blue"/> <!-- focused -->
    <item android:drawable="@color/section_list_background"/> <!-- default -->
</selector>

また

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_focused="true" android:color="?android:attr/colorPressedHighlight"/>
   <item android:state_enabled="false" android:color="@color/section_list_background" />
   <item android:color="@color/testcolor5"/>
 </selector>
于 2012-06-12T10:11:07.720 に答える