Android可点击布局

M2G*_*2Gd 12 android click event-handling android-layout

我有一个线性布局,我设置为clikable + focus,但问题是点击时没有显示焦点.如何才能显示焦点.

继承我的代码

<LinearLayout
  android:id="@+id/linear_tv_layout"
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:layout_weight="1"
  android:clickable="true"
  android:focusable="true"
  android:paddingBottom="7px">
Run Code Online (Sandbox Code Playgroud)

big*_*nes 16

我认为你需要为可点击的视图(布局)设置一个状态列表drawable的背景,它是一个可绘制的资源,你可以为不同的状态或状态组合指定不同的drawable,有一个用于选择,一个用于压力等等上.此外,布局的状态传播到其所有子节点.


澄清 - 这是以前链接的文档中的示例:

res/drawable/button.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="@drawable/button_pressed" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/button_focused" /> <!-- focused -->
    <item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>
Run Code Online (Sandbox Code Playgroud)

button_pressed,button_focused并且button_normal是表示那些状态中的按钮的正常drawable,可能是png(因此可以插入,以橙色突出显示).

如果您将此资源设置为"线性布局按钮"的背景:

<LinearLayout
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/button">
    ...
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

现在聚焦布局会自动将其背景图像设置为@drawable/button_focused,依此类推.

当然,您使用的所有绘项目必须已经在资源res/drawable/与一起button.xml.


J W*_*ang 16

要将材质设计的按钮按动画应用于任何元素,请将元素的android背景属性设置为:

android:background="?android:attr/selectableItemBackground"
Run Code Online (Sandbox Code Playgroud)

在你的情况下:

<LinearLayout
  android:id="@+id/linear_tv_layout"
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:layout_weight="1"
  android:clickable="true"
  android:focusable="true"
  android:paddingBottom="7px"
  android:background="?android:attr/selectableItemBackground">
Run Code Online (Sandbox Code Playgroud)