android - 过度绘制布局允许通过 LinearLayout 进行触摸

Posted

技术标签:

【中文标题】android - 过度绘制布局允许通过 LinearLayout 进行触摸【英文标题】:android - overdraw layout allows touch through LinearLayout 【发布时间】:2012-04-25 02:59:37 【问题描述】:

在下面的 UI 中,我有这个覆盖整个屏幕的下拉菜单。 LinearLayout 是透明的,并允许其下方的控件可点击或可触摸。基本上,我可以滚动此 LinearLayout 下方的列表以及单击控件。如何禁用它?

见附件。

谢谢

<RelativeLayout
     xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/rlExtNavbar" 
    android:orientation="vertical"
    android:layout_ 
    android:layout_
    android:gravity="fill_vertical"
    android:layout_gravity="fill_vertical"
    android:background="@color/transparent" xmlns:tools="http://schemas.android.com/tools" tools:ignore="Overdraw">
    <RelativeLayout
        android:id="@+id/expandedNavbarLayout" 
        android:orientation="vertical"
        android:layout_ 
        android:layout_ >
    </RelativeLayout>
    <LinearLayout
        android:id="@+id/transparentLayout" 
        android:orientation="vertical"
        android:layout_ 
        android:layout_
        android:layout_below="@id/expandedNavbarLayout"
        android:focusableInTouchMode="false"
        android:focusable="false"
        android:background="@color/fulltransparent">
    </LinearLayout>

</RelativeLayout>

【问题讨论】:

How to disable behind view click event Framelayout的可能重复 【参考方案1】:

只需在 XML 中为 LinearLayout 设置 android:clickable="true" 属性将阻止点击通过 -- 不需要点击监听器。

【讨论】:

唯一的问题是,按下状态会传播到可点击设置为 true 的视图的所有子控件。例如当您单击背景时,按钮会单击动画。 同时添加 android:focusable="true" 来移除 lint 警告【参考方案2】:

为线性布局分配了一次点击并解决了它。老实说,它不应该像这样开始工作,但它解决了问题。点击为空。

【讨论】:

【参考方案3】:

对我有用的是将 LinearLayout 放在 xml 中的内部 RelativeLayout 之前。

【讨论】:

以上是关于android - 过度绘制布局允许通过 LinearLayout 进行触摸的主要内容,如果未能解决你的问题,请参考以下文章

Android开发Android界面性能优化

Android性能优化 - 卡顿和布局优化

Android布局优化

Android端 APP GPU过度绘制GPU过度绘制及优化

Android应用优化指南

Android应用优化指南