用于布局的Android xml选择器

时间:2013-04-22 08:49:38

标签: java android xml

我想知道布局的选择器是否与drawable一样。

带有drawable的选择器示例:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- When selected -->
<item android:drawable="@drawable/tab_library_clicked"
      android:state_selected="true" />
<!-- When not selected -->
<item android:drawable="@drawable/tab_library_not_clicked" />

但是有可能有这样的东西(下面这段代码对我不起作用,但它应该让你知道我想要完成的事情):

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- When selected -->
<item android:layout="@layout/tab_library_clicked"
      android:state_selected="true" />
<!-- When not selected -->
<item android:layout="@layout/tab_library_not_clicked" />

4 个答案:

答案 0 :(得分:3)

我可能错了,但我很确定这不存在。

使用XML中的选择器可以做的最“复杂”可能是使用drawable layer list将多个drawable组合到一个状态。

或者,您可以尝试使用touch_down和touch_up事件以编程方式在布局上调用setVisibility(),但我认为性能会非常差。

答案 1 :(得分:1)

好的,您正在寻找的是将父级状态传播到其子视图的方法。 这样,只要指标状态改变(选择,不选择),图像视图状态就会改变。

android已经有了xml属性。

android:duplicateParentState="true"

将它与布局文件中的子视图一起使用,并将其与选择器结合使用。 例如:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#f00" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:text="Large Text"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:duplicateParentState="true"
     />

<ImageView
    android:id="@+id/imageView1"
    android:duplicateParentState="true"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center_horizontal"
    android:src="@drawable/selector" />

答案 2 :(得分:1)

默认选择器机制仅提供属性的替代方法(例如可绘制使用等),具体取决于视图的状态。它不会取代视图本身。您要求的功能不可用。

View的选定状态绑定到*_STATE_SET类中View个字段的值之一。通过getDrawableState()检索视图的组合状态。

您可以扩展View类并使用这些状态来执行自定义操作。要么, 您可以开发一个自定义布局控制器,它可以在View树中监视状态更改,并根据xml资源替换子视图。

但是努力是不值得的,因为:

  1. 在用户与其交互期间,视图/布局结构必须保持不变。当用户选择按钮时,您不应该将按钮更改为复选框,替换视图/布局就像这样简单地混淆了用户体验。

  2. 您只需修改用户交互视图的外观,这已由基于选择器的绘图和颜色提供。

答案 3 :(得分:0)

documentation中的android:layout没有此类属性item。它应该与android:drawable一起使用。