【问题标题】:Custom Drawer Layout - Click transparency自定义抽屉布局 - 单击透明度
【发布时间】:2014-03-24 17:36:52
【问题描述】:

我在我的项目中使用抽屉布局。我想像 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 时,片段会加载到 FrameLayout 中。那也很完美。 但是有一个问题。 ImageView 也是“可点击的”。这样,当抽屉打开时,一个会点击 ImageView 后面的 ListView(在片段上)被点击!!我不想那样。所以我在 ImageView 上尝试了 clickable:false 。不要工作...

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

如何让 imageview 不可点击?!

【问题讨论】:

    标签: android imageview navigation-drawer


    【解决方案1】:

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

    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" >
    

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

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

    更多解释请见this question

    【讨论】:

    • 谢谢。完美运行。但是当我们想要“不可点击”时让视图可点击的小玩意儿:)
    • 如果我们使整个抽屉可点击,它会阻止抽屉下方的视图看到任何点击。我用更多的解释更新了我的答案,希望它有助于让事情变得更清楚:)
    猜你喜欢
    • 2022-12-24
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多