2

可以将窗口设置为不可触摸,这意味着您只需使用以下代码将整个窗口设置为不可触摸即可单击该活动后面的任何内容:

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

现在我的问题是:是否可以只使RelativeLayout 不可触摸,我的意思是用户可以触摸RelativeLayout 后面的任何东西,但他将无法触摸该RelativeLayout 中Button 后面的任何东西。

这是我的xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rl"
    style="@android:color/transparent"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="44dp"
        android:text="Button" />


</RelativeLayout>

我需要相对布局不可触摸,用户可以触摸它后面的任何东西。我只需要相对布局中的按钮是可触摸的

因此,Button 可触摸,RelativeLayout 不可触摸。我可以触摸按钮,但我不能触摸 RelativeLayout 我只触摸它后面的东西。

当使用
getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); 整个窗口时,按钮也被设置为不可触摸,这不是我想要的。

我希望我的问题是可以理解的。

编辑:

我要做的只是在另一个应用程序(例如 Skype)上显示一个按钮,我只希望该按钮可以与 Skype 应用程序一起单击。

4

2 回答 2

2

尝试添加android:duplicateParentState="true"到您的RelativeLayoutthis 将沿视图树传播事件。

如果这不起作用,请尝试覆盖此方法。 http://developer.android.com/reference/android/view/ViewGroup.html#onInterceptTouchEvent(android.view.MotionEvent)

于 2013-05-31T14:01:58.993 回答
0

在你的java代码中这样写

ArrayList<View> touchables;
RelativeLayout RelativeLayout_ = (RelativeLayout) findViewById(R.id. rl);
touchables = RelativeLayout_.getTouchables();
for (View touchable : touchables) 
    {
        if (!(touchable.getId()==R.id.button1))
        {
            touchable.setEnabled(false);
        }
    }

希望它会起作用

于 2013-05-31T15:11:32.703 回答