2

在为 Button 和 ListView 项目实现选择器时,我不断发现我想为 state_pressed 和 state_focused 重用相同的项目/背景。

是否可以重复使用 XML 代码,而不是复制 XML 代码?

例如,这是我的 state_pressed '代码' - 我怎样才能让 state_focused 使用相同的'代码'块而不重复它?

<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">

  <item android:state_pressed="true">
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <!--  PDS: Side lowlight lines Inset so hidden underneath solid colour -->
    <item android:bottom="0dp" android:right="0dp" android:top="0dp" android:left="0dp">
      <shape>
          <solid  android:color="#00000000" />
          <stroke android:color="@color/butGreySelectFrame" android:width="4dp"/>
          <corners android:radius="4dp" />              
      </shape>     
    </item> 

    <!-- PDS: Solid colour --> 
    <item android:left="4dp" android:right="4dp" android:top="4dp" android:bottom="4dp">              
      <shape>
        <solid android:color="@color/butGreySelectBack" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />
      </shape>
      </item>

    </layer-list>
</item>
4

2 回答 2

7

是的,任何可绘制对象都可以在选择器中重用。

只需为 . 创建一个单独的文件layer-list,然后使用

<item android:state_xxx android:drawable="@drawable/the_resource" />
于 2014-06-11T02:55:38.903 回答
2

而不是将整个层列表放在item. 为 layer-list 创建一个单独的文件,并在选择器项中将其设置为可绘制对象。

例子:

    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

  <item android:state_pressed="true" android:drawable="@drawable/layer-list"/>
  <item android:drawable="@drawable/layer-list_default"/> //this is the default state

</selector>

边注:

确保您的选择器中有默认的按下可绘制对象,否则选择器将不起作用。

于 2014-06-11T02:56:42.503 回答