嗨,我使用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状态屏幕截图:
另见视频: view behave weirdly