底部视图被顶视图阻挡

时间:2013-04-29 21:49:12

标签: android view android-view

我有一个非常讨厌的问题,即将两个自定义视图配合使用。我试图在Android活动中显示这两个视图,但其中一个视图占用活动的整个可视空间,另一个视图放在它下面。第一个视图仅使用空间的一小部分,其余部分是透明的,但只有当它的宽度和高度为match_parent时它才有效,所以另一个视图显示在它下面,但它被阻止接收任何视图触摸事件。这是他们的样子:

1

2

xml代码:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background_app" >

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <com.fortysevendeg.android.swipelistview.SwipeListView
        xmlns:swipe="http://schemas.android.com/apk/res-auto"
        android:id="@+id/example_lv_list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:listSelector="#00000000"
        swipe:swipeActionLeft="dismiss"
        swipe:swipeBackView="@+id/back"
        swipe:swipeCloseAllItemsWhenMoveList="true"
        swipe:swipeFrontView="@+id/front"
        swipe:swipeMode="both" 
        android:focusableInTouchMode="true"/>
</LinearLayout>

<com.touchmenotapps.widget.radialmenu.semicircularmenu.SemiCircularRadialMenu
        android:id="@+id/radial_menu"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="bottom"
        android:padding="1dip" />
</FrameLayout>

我要做的是能够触摸顶部视图透明的底部,并且能够触摸顶部视图不透明的地方。我尝试以不同的方式安排xml,但它一直在崩溃,这是它工作的唯一方式,但出现了这个问题。

指向自定义视图的链接:

  • Radial-Menu-Widget:github.com/strider2023/Radial-Menu-Widget-Android
  • SwipeListView库:github.com/47deg/android-swipelistview
  • SwipeListView示例:github.com/47deg/android-swipelistview-sample

我在这里尝试完成的内容类似于Catch Notes app。如果您有其他方式或其他图书馆建议,我们将不胜感激。

2 个答案:

答案 0 :(得分:1)

好的尝试:在项目中复制SemiCircularRadialMenu.class的源代码并修改

public boolean onTouchEvent(MotionEvent event) 

因为此方法始终返回true并捕获所有触摸事件,因此SwipeListView侦听器的触摸事件也是如此。我用这种方式解决了它。

答案 1 :(得分:0)

一个老问题,但其他人可能会觉得这个答案很有帮助。如果不修改自定义视图的来源,我认为您无法获得所需的行为。但是将两个自定义视图放在同一个屏幕上可能就像将根布局更改为LinearLayout,向内部布局添加权重以及将第二个自定义视图的高度设置为wrap_content一样简单。通过只有一个具有权重的小部件,它将在其他小部件布局之后留下所有空间。这是您应用更改的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/background_app"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="100" >

        <com.fortysevendeg.android.swipelistview.SwipeListView
            xmlns:swipe="http://schemas.android.com/apk/res-auto"
            android:id="@+id/example_lv_list"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:focusableInTouchMode="true"
            android:listSelector="#00000000"
            swipe:swipeActionLeft="dismiss"
            swipe:swipeBackView="@+id/back"
            swipe:swipeCloseAllItemsWhenMoveList="true"
            swipe:swipeFrontView="@+id/front"
            swipe:swipeMode="both" />
    </LinearLayout>

    <com.touchmenotapps.widget.radialmenu.semicircularmenu.SemiCircularRadialMenu
        android:id="@+id/radial_menu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:padding="1dip" />

</LinearLayout>

如果您需要第二个视图的高度更加可扩展,可以将其包含在另一个带有权重的LinearLayout中,并调整两个权重以分配它们之间的屏幕高度。个人体重值并不特殊;它是相对于决定每个人获得多少高度的所有权重之和的值。我想让我的总值加起来为100,所以我可以将权重视为百分比。