SlidingUpPanel中的ListView不可滚动

时间:2013-08-07 19:06:40

标签: android xml

我使用这个库,https://github.com/umano/AndroidSlidingUpPanel,我在里面放了一个listview,但它不起作用,没有滚动,为什么? 不仅listview,整个布局不滚动,也没有textview,也没有图像,没有。 这是我的xml代码:

<LinearLayout 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"
    tools:context=".Detalhe_linha" 

    <com.sothree.slidinguppanel.SlidingUpPanelLayout
        android:id="@+id/sliding_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">


   <LinearLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="Próximo onibûs sai do ponto final em" />

    <TextView
        android:id="@+id/txtProx"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="X minutos"
        android:layout_gravity="center"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <GridView
        android:id="@+id/tabelaHorarios"
        android:layout_width="315dp"
        android:layout_height="match_parent"
        android:layout_x="0dp"
        android:layout_y="123dp"
        android:layout_gravity="center"
        android:numColumns="3" >

    </GridView>
</LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#CCCC"
            android:orientation="vertical">

              <TextView
                android:layout_width="match_parent"
                android:layout_height="34dp"
                android:gravity="center|bottom"
                android:text="Itinerário"
                android:textSize="16sp" />

            <TextView
                android:id="@+id/brought_by"
                android:layout_width="match_parent"
                android:layout_height="34dp"
                android:gravity="center|top"
                android:text="Arraste para cima"
                android:textSize="14sp"
                android:autoLink="web" />


               <TextView
                android:id="@+id/itinerarios"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center|top"
                android:text=""
                android:textSize="17sp"
                android:autoLink="web" />

        </LinearLayout> 
    </com.sothree.slidinguppanel.SlidingUpPanelLayout>
</LinearLayout>

顺便说一句,抱歉我的英语不好。

3 个答案:

答案 0 :(得分:3)

我发现问题是SlidingUpPanelLayout拦截了触摸事件(onInterceptTouchEvent)。我的解决方案是重写(或覆盖)方法isDragViewHit,该方法在case MotionEvent.ACTION_DOWN中检查,并可能取消对给定触摸事件的拦截。

这是我的解决方案,如果面板扩展允许点击/滚动扩展子面板,则取消拦截。这也意味着您无法向下滑动展开的面板。我通过点击按钮实现了面板的折叠。检查实施情况,它会为您提供可能的建议。

private boolean isDragViewHit(int x, int y) {
    if(isExpanded()){
        //don't intercept touch if panel expanded
        return false;
    }
    else{
        //original implementation - only allow dragging on mDragView
        View v = mDragView != null ? mDragView : mSlideableView;
        if (v == null) return false;
        int[] viewLocation = new int[2];
        v.getLocationOnScreen(viewLocation);
        int[] parentLocation = new int[2];
        this.getLocationOnScreen(parentLocation);
        int screenX = parentLocation[0] + x;
        int screenY = parentLocation[1] + y;
        return screenX >= viewLocation[0] && screenX < viewLocation[0] + v.getWidth() &&
                screenY >= viewLocation[1] && screenY < viewLocation[1] + v.getHeight();
    }
}

答案 1 :(得分:3)

更好的方法是定义DragView。我使用textView,它只在我触摸textView时滑动。所有其他观点都会拦截点击次数!

答案 2 :(得分:1)

我要离开我的方式在这里做以防万一其他人偶然发现这种情况。

正如Juliatzin所说,一个更清晰的解决方案是使用方法setDragView(...)定义DragView,而不是重写类方法。

为此,在您的xml文件中,您要说明 SlidingUpPanel 菜单的布局,您应该使用ID声明视图,无论您想要什么,例如:

<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" >

 <LinearLayout ...>
     MAIN CONTENT
 </LinearLayout>

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#eee"
        android:orientation="vertical"
        android:clickable="true"
        android:focusable="false">

     Views you want to be able to click on your menu...

     <Button //This view will be the one that when touched on your SlidingUpPanel, said panel
             //will close and let the other Views capture click events. You could give it some
             //style so as to have it blend into the SlidingUpPanel if you don´t want it visible
        android:id="@+id/close_SlidingUpPanel"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
       />

</LinearLayout>    

在您设置SlidingUpPanel的活动中,您将执行以下操作:

 SlidingUpPanelLayout layout = (SlidingUpPanelLayout) findViewById(R.id.sliding_up_panel);
 layout.setDragView(findViewById(R.id.close_SlidingUpPanel));

希望它很清楚并且有所帮助。默认情况下,我认为DragView设置为 null ,这意味着SlidingUpPanel的任何部分都可以进行拖动,这就是为什么当你尝试“点击”其中一个时它关闭的原因儿童的。