使用WindowManager

时间:2017-12-09 06:01:20

标签: android android-layout android-windowmanager

嗨,我使用WindowManager在屏幕底部显示浮动窗口,浮动窗口高约120px,宽度为match_parent,因此浮动窗口的外部是可触摸的。在某些情况下,我需要将窗口大小更新为全屏以显示一些列表,同时原始视图应保持不变。 我正在使用WindowManager的updateViewLayout方法来更新浮动窗口的布局。 小窗口的布局参数如下:

windowParams.type = LayoutParams.TYPE_SYSTEM_ERROR;
windowParams.format = PixelFormat.RGBA_8888;
windowParams.gravity = Gravity.LEFT | Gravity.TOP;
windowParams.x = 0;
windowParams.y = 0;
windowParams.width = LayoutParams.MATCH_PARENT;
windowParams.height = 120;
windowParams.screenOrientation = 
ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;

全屏布局参数看起来相同,例外高度参数设置为LayoutParams.MATCH_PARENT:

windowParams.type = LayoutParams.TYPE_SYSTEM_ERROR;
windowParams.format = PixelFormat.RGBA_8888;
windowParams.gravity = Gravity.LEFT | Gravity.BOTTOM;
windowParams.x = 0;
windowParams.y = 0;
windowParams.width = LayoutParams.MATCH_PARENT;
windowParams.height = LayoutParams.MATCH_PARENT;
windowParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;

问题在于,当我调用updateViewLayout将浮动窗口更新为全屏时,原始的小视图跳转到屏幕顶部,这是预期的,然后列表显示并且小视图返回到底部,看起来布局闪现。 在搜索谷歌后,我没有找到任何答案,我想知道为什么会这样,我使用错误的LayoutPamams?

浮动窗口的布局文件:

    <?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/small_window_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#00000000"
    android:baselineAligned="false"
    android:keepScreenOn="true">

    <RelativeLayout
        android:id="@+id/webview_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/transparent" />

    <RelativeLayout
        android:id="@+id/r_dialog_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:padding="20dp">

        <com.aispeech.dui.car.ui.InputField_
            android:id="@+id/avartar_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/avartar_view"
            android:background="@drawable/asr"
            android:gravity="center_vertical"
            android:orientation="horizontal">

            <com.aispeech.dui.car.ui.floatwindow.MarqueeTextView
                android:id="@+id/t_content"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ellipsize="marquee"
                android:focusable="true"
                android:marqueeRepeatLimit="marquee_forever"
                android:singleLine="true"
                android:textColor="#FFFFFFFF"
                android:textSize="15sp" />

            <ImageView
                android:id="@+id/i_play_control"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:background="@mipmap/pause"
                android:visibility="gone" />
        </LinearLayout>
    </RelativeLayout>

</RelativeLayout>

id为“r_dialog_view”的RelativeLayout是小视图布局,在我将视图设置为全屏之前,我将设置webview_container,这是用于显示全屏列表。

有一些View状态屏幕截图:

bottom

jump to top

back to bottom

另见视频: view behave weirdly

0 个答案:

没有答案