android - 自定义抽屉布局 - 点击透明度

标签 android imageview navigation-drawer

我在我的项目中使用抽屉式布局。我想像 Google+ Android 应用程序一样自定义抽屉。在“主”ListView 上,我添加了一个 ImageView。那很好用。代码是:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<FrameLayout
    android:id="@+id/content_frame"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<RelativeLayout
    android:id="@+id/drawer_layout_relative"
    android:layout_width="240dp"
    android:layout_height="wrap_content"
    android:layout_gravity="start" >

    <ImageView
        android:id="@+id/drawer_header_image"
        android:layout_width="wrap_content"
        android:layout_height="85dp"
        android:src="@drawable/ic_logo_blue" />

    <ProgressBar
        android:id="@+id/drawer_progress"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/drawer_header_image"
        android:background="#ffffffff" />

    <ListView
        android:id="@+id/drawer_listview"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_below="@id/drawer_progress"
        android:background="#ffffffff"
        android:choiceMode="singleChoice" />
</RelativeLayout>

当您单击其中一个 ListView-Items 时, fragment 将加载到 FrameLayout 中。这也很完美。 但是有一个问题。 ImageView 也是“可点击的”。这样,当抽屉打开时,一个人将点击 ImageView,点击后面的 ListView(在 fragment 上)!我不想要那个。所以我尝试在 ImageView 上使用 clickable:false。不工作...

这里有一个小演示视频:http://www.vidup.de/v/Ao71r/

如何让 ImageView 不可点击?!

最佳答案

为了防止点击通过抽屉传递到它后面的 View ,您必须将抽屉中的 View 的 Clickable 设置为 true,特别是抽屉中所有其他 View 的父 View ,以便如果它的 child 都没有消费触摸事件,它就会消费所有触摸事件。

drawer_layout_relative 的 RelativeLayout 代码更改为以下内容(注意:我将 android:clickable="true" 添加到相对布局):

<RelativeLayout
    android:id="@+id/drawer_layout_relative"
    android:layout_width="240dp"
    android:clickable="true"
    android:layout_height="wrap_content"
    android:layout_gravity="start" >

默认情况下,如果 View 不处理任何点击,它会让点击转到它后面的 View 。您有一个 ImageView、一个 ProgressBar 和一个 ListView:ListView 处理点击事件,因此它会消耗对其的任何触摸。默认情况下,ProgressBar 和 ImageViews 只显示内容而不处理对它们的点击,因此系统只是将点击传递给抽屉后面的列表。这三个 View 都在 RelativeLayout 中。如果我们将 RelativeLayout 设置为可点击,它会收集 ImageView 和 ProgressBar 未处理的点击事件,并且不会让点击事件进入其下方的 View 。

android:clickable="true" 视为一种阻止与您设置的 View 下方的任何 View 进行交互的方式。

更多解释请看this question

关于android - 自定义抽屉布局 - 点击透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22616615/

相关文章:

Android 用不同的值更新多行

java - ImageView位置和大小

java - 以编程方式用作背景时如何更改 ImageButton 可绘制颜色?

java - 如何在游戏中实现拖放?

java - 如何更新不显示 fragment

android - 抽屉导航中的按钮无法监听点击事件

java.lang.IllegalStateException : does not have a NavController set on xxxxx(location address) error 错误

android - 无法为新的 MotionLayout 声明 MotionScene

javascript - 如何从 ListView 启动新布局( Activity )

安卓房间+窗口功能