我有一个非常讨厌的问题,即将两个自定义视图配合使用。我试图在Android活动中显示这两个视图,但其中一个视图占用活动的整个可视空间,另一个视图放在它下面。第一个视图仅使用空间的一小部分,其余部分是透明的,但只有当它的宽度和高度为match_parent
时它才有效,所以另一个视图显示在它下面,但它被阻止接收任何视图触摸事件。这是他们的样子:
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,但它一直在崩溃,这是它工作的唯一方式,但出现了这个问题。
指向自定义视图的链接:
我在这里尝试完成的内容类似于Catch Notes app。如果您有其他方式或其他图书馆建议,我们将不胜感激。
答案 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,所以我可以将权重视为百分比。