在`FrameLayout`中设置的`RelativeLayout`正在捕捉整个`FrameLayout`中的触摸事件

时间:2014-03-13 16:55:22

标签: android android-layout touch

编辑:我刚刚意识到,如果我想添加按钮或下面的任何内容,我希望能够拖动它们。那么也许我的解决方案是改变卡片的Z-Index,使它们出现在FrameLayout之外?


我有一个FrameLayout

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/stack"
    />

我在其中放了一个RelativeLayout,其中包含一些项目,但格式为:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:font="http://schemas.android.com/apk/res-auto"
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:background="@drawable/card_background"
    android:layout_centerInParent="true"
    >

我将FrameLayout设置为match_parent的唯一原因是,用户可以将相对布局拖到屏幕上的任意位置,如果FrameLayout的宽度和高度为{ {1}},wrap_content在被拖动时被裁剪。但是,当RelativeLayout触及match_parent触发器FrameLayout的触摸事件时,LinearLayout触及它。

对于上下文,我正在尝试显示一堆相同大小的卡片,然后让用户将顶部的卡片逐个拖出屏幕。

1 个答案:

答案 0 :(得分:0)

我最终直接添加到RelativeLayout。不幸的是,当手动创建一个类时,一些重力设置丢失了,所以我做了类似的事情:

    int size = ScreenMetricUtil.convertPixelToDp(getActivity().getBaseContext(), 300);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(size, size);
    params.addRule(RelativeLayout.CENTER_IN_PARENT);
    card.setLayoutParams(params);

    container.addView(card); // add to LinearLayout

我的助手方法(source):

public static int convertPixelToDp(Context context, int pixels) {
    float density = context.getResources().getDisplayMetrics().density;
    return (int) (pixels * density + 0.5f);
}