Android在应用

时间:2017-07-30 23:12:51

标签: android android-relativelayout clickable focusable

我有一个布局,我在其他应用程序上绘制,设置为match_parent以填充整个屏幕。在这个布局中,我有一个聊天头,可以拖动并点击以显示更多内容。通常我会将布局设置为wrap_content并仅占用我需要的屏幕空间,但Android SpringAnimations在没有大型父级的情况下无法正常工作。

我遇到的问题是我无法与我在其上绘制布局的背景进行交互。我以前曾尝试在XML中以编程方式将RelativeLayout root_container设置为clickable: falsefocusable: false,但我仍然无法点击任何其他内容。有没有一个解决方案,我的root_container不会注册点击,但我的聊天内容可以继续?

我觉得这个问题与其他不可聚焦/不可思议的问题不同,因为它涉及“吸取其他应用程序”功能,这可能会改变我不知道的事情。

<!--Root container - Causing the problems with elements beneath it-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/root_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!--Small Chat head view that can be dragged around root_container-->
    <RelativeLayout
        android:id="@+id/collapse_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:orientation="vertical"
        android:visibility="visible">

        <ImageView
            android:id="@+id/floating_icon"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:src="@drawable/floating_icon"
            tools:ignore="ContentDescription" />

        <ImageView
            android:id="@+id/close_button"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_marginLeft="40dp"
            android:src="@drawable/ic_close"
            tools:ignore="ContentDescription" />
    </RelativeLayout>
</RelativeLayout>

编辑:我在这样的服务中调用我的布局:

mFloatingView = LayoutInflater.from(this).inflate(R.layout.layout_floating_view, null);

final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mWindowManager.addView(mFloatingView, params);

谢谢你看看!

1 个答案:

答案 0 :(得分:0)

通过一些研究,我发现由于它可能允许的各种恶意机会,这是不可能的。如果查看FLAG_NOT_TOUCHABLE,则无法与其进行交互,如果您尝试发送触摸事件,则不会转到主屏幕。解决方案只是重构,因此父视图不会填充主屏幕。