1

我有一个布局,可以在其他应用程序上绘制,该应用程序设置为 match_parent 以填充整个屏幕。在这个布局中,我有一个聊天头,可以拖动它并单击以显示更多信息。通常我会将布局设置为 wrap_content 并只占用我需要的屏幕空间,但如果没有大的父级来让我的聊天头投入其中,Android SpringAnimations 就无法工作。

我遇到的问题是我无法与在其上绘制布局的背景进行交互。我之前尝试过以编程方式将 RelativeLayout 设置为root_containerXMLclickable: falsefocusable: falseXML,但我仍然无法单击其他任何内容。有没有一种解决方案,我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);

谢谢参观!

4

1 回答 1

0

通过一些研究,我发现这是不可能的,因为它可能允许各种恶意机会。如果创建了视图,FLAG_NOT_TOUCHABLE则无法与之交互,并且如果您尝试发送触摸事件,它们将不会转到主屏幕。解决方案是简单地重构,这样父视图就不会填满主屏幕。

于 2017-08-01T04:07:11.113 回答