触摸ListView区域

时间:2016-01-15 13:39:40

标签: android listview scroll scrollview relativelayout

我的观点出现问题,如下所示:

My view before scrolling

My view after scrolling

正如您所看到的那样,它应该是一个具有不可滚动的ListViews的可滚动视图。

它包含DrawerLayout,其中我有CoordinatorLayout(包含我的片段的AppBarLayout和我的FrameLayout)和NavigationView。

activity_main.xml中

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:background="@color/colorBackground"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">

<include
    layout="@layout/app_bar_vision"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header_vision"
    app:menu="@menu/activity_vision_drawer" />

app_bar_vision.xml

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".activity.MainActivity">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorBar"
        app:popupTheme="@style/AppTheme.PopupOverlay"
        app:layout_scrollFlags="scroll|enterAlways|snap"/>

</android.support.design.widget.AppBarLayout>

<FrameLayout
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="?attr/actionBarSize"/>

现在主要部分。我的片段布局由ScrollView组成,里面有RelativeLayout,我有两个ListViews,根据指定的元素以编程方式设置高度。

fragment_preferences.xml

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<include layout="@layout/content_preferences" />

</ScrollView>

content_preferences.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
tools:context="dron.mkapiczynski.pl.dronvision.fragment.PreferencesFragment"
tools:showIn="@layout/fragment_preferences">>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="Preferencje wizualizacji"
    android:id="@+id/preferencesTitle"
    android:layout_gravity="center" />

<TextView
    android:id="@+id/trackedListTitle"
    android:text="Drony śledzone"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/preferencesTitle"
    android:layout_marginTop="20dp"/>

<ListView
    android:id="@+id/trackedDroneList"
    android:layout_below="@+id/trackedListTitle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:layout_gravity="center_horizontal"
    android:layout_centerInParent="true"
    tools:showIn="@layout/fragment_preferences"/>

<TextView
    android:id="@+id/visualizedListTitle"
    android:text="Drony do wizualizacji obszaru przeszukanego"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/trackedDroneList"
    android:layout_marginTop="20dp"/>

<ListView
    android:id="@+id/visualizedDroneList"
    android:layout_below="@+id/visualizedListTitle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dp"
    android:layout_gravity="center_horizontal"
    android:layout_centerInParent="true"
    android:nestedScrollingEnabled="true"
    tools:showIn="@layout/fragment_preferences"/>

一般情况下滚动有效但仅当我触摸ListView外部区域的屏幕时,例如在我的TextView区域中。当我尝试使用ListView滚动区域时没有任何反应。

我会感激任何建议。我试图实现我自己的nonScrollingListView扩展ListView思想可以启用父滚动,但这没有帮助。 我还读过有关使用LinearLayout而不是ListView的信息,但也许有一种方法可以将ListView与ScrollView一起使用?

1 个答案:

答案 0 :(得分:0)

通常不鼓励使用Scrollable视图作为scrollview或任何其他可滚动内容的子视图。 但是,如果需要应用程序,并且开发人员想要顺利处理滚动事件,下面是单独处理可滚动内容的方法,

对于父卷轴视图,您可以将滚动事件处理为

m_parentScrollView.setOnTouchListener(new View.OnTouchListener() 
{
       public boolean onTouch(View p_v, MotionEvent p_event) 
        {
            m_childScrollView.getParent().requestDisallowInterceptTouchEvent(false);
           //  We will have to follow above for all scrollable contents
           return false;
        }
});

对于子滚动视图,在您的案例Listview中,我们必须处理如下所示的事件:

m_childScrollView.setOnTouchListener(new View.OnTouchListener() 
{
      public boolean onTouch(View p_v, MotionEvent p_event)
       {
          // this will disallow the touch request for parent scroll on touch of child view
           p_v.getParent().requestDisallowInterceptTouchEvent(true);
           return false;
       }
});

您可以从此处获得有关它的更多详细信息: handle-scrollable-views-or-controls-in-another-scrollview-in-android

此外,作为旁注,我在使用Scrollview和RelativeLayout时也遇到了一些类似的问题,而this用户也面临与您相同的问题。

希望它可以帮助你:)