我有一个较小的RelativeLayout和一个自定义布局MyView,它们都包含在父RelativeLayout中。 MyView的大小比子RelativeLayout大,但仅在特定事件期间出现。我不希望它占用此活动之外的布局空间。但是,当我将其设置为View.VISIBLE时,它会导致子RelativeLayout向下跳跃。
包含这些视图的父RelativeLayout将在屏幕上移动。当用户触摸屏幕并触发MotionEvent.MOVE时,将移动父视图。当您将父视图移动到屏幕的边缘并且MyView是View.INVISIBLE时,问题是MyView仍会占用空间并与屏幕边框发生碰撞,看起来之间有一条看不见的墙。 child RelativeLayout和屏幕边缘。我希望整个父RelativeLayout视图的有效大小与子RelativeLayout相同,除非MyView可见。
这是一张有助于说明我的问题的图片。
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res/com.example.myapp">
<com.example.MyView
android:id="@+id/my_view"
android:layout_width="175dp"
android:layout_height="175dp"
android:visibility="gone"
android:layout_centerInParent="true"
android:background="@color/red"/>
<RelativeLayout
android:id="@+id/rl"
android:layout_width="wrap_content" //Less than 175dp
android:layout_height="wrap_content" //Less than 175dp
android:orientation="vertical"
android:layout_centerInParent="true" >
</RelativeLayout>
</merge>
然后将合并视图放在父RelativeLayout中,该父类用Java在这些参数中定义。
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 0;
params.y = (int) (deviceRes.y * 0.1);
答案 0 :(得分:1)
将可见性更改为invisible
而不是“已消失。”
Invisible
仍占据空间,因此您的布局不会移动。
gone
释放了那个空间。所以,当你再次看到它时,一切都会发生变化。
常量值描述
可见0在屏幕上可见;默认值。
不可见1不显示,但在布局期间考虑(留空空间)。
已完全隐藏,就像没有添加视图一样。
答案 1 :(得分:0)
我通过将MyView拉出合并视图解决了这个问题。我刚刚创建它,以便MyView跟随合并视图的移动。所以现在MyView和merge视图是屏幕管理器的子节点,而MyView不是合并视图的子节点。