【发布时间】:2014-08-11 23:27:21
【问题描述】:
我有一个较小的 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>
然后将合并视图放置在使用这些参数在 Java 中定义的父 RelativeLayout 中。
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);
【问题讨论】:
-
不太明白这个问题。那么在让 MyView 可见之后,子 RelativeLayout 和这个 MyView 布局会向下跳吗?还是只有孩子RelativeLayout? “整个视图的有效大小”是什么意思?
-
"所以在使 MyView 可见后,子 RelativeLayout 和这个 MyView 布局向下跳转?" : 是的,“整个视图的有效大小”? :当 MyView 不可见/消失时,拥有所有这些子视图的父视图应该与子 RelativeLayout 的大小相同,但是当 MyView 为 View.INVISIBLE 时,它仍然会与屏幕发生碰撞。编辑了原文以帮助解释它。
-
请解释碰撞/碰撞。您是否在监控 MyView 的某些部分何时离开屏幕?
-
编辑解释碰撞。 MyView(部分)离开屏幕时,我没有监控。事实上,当我移动父视图时,它似乎根本无法离开屏幕。
标签: android android-layout android-view