7

我想知道是否有一个布局选择器,比如drawables。

带有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

4 回答 4

3

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

您可以使用 XML 中的选择器做的最“复杂”的操作可能是使用可绘制图层列表将多个可绘制对象组合到一个状态。

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

于 2013-04-22T08:54:12.420 回答
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" />

于 2013-04-22T10:05:15.957 回答
1

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

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

你可以扩展一个 View 类并利用这些状态来做一些自定义的事情。或者,您可以开发一个自定义布局控制器,它监视视图树中的状态变化并根据 xml 资源替换子视图。

但这种努力并不值得,因为:

  1. 视图/布局结构在用户与其交互期间必须保持不变。当用户选择它时,您不应该将按钮更改为复选框,这样替换视图/布局只会使用户体验感到困惑。

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

于 2013-04-22T10:32:30.737 回答
0

文档中没有这样的属性android:layout。它应该与.itemandroid:drawable

于 2013-04-22T08:59:12.087 回答