我使用这个库,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>
顺便说一句,抱歉我的英语不好。
答案 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的任何部分都可以进行拖动,这就是为什么当你尝试“点击”其中一个时它关闭的原因儿童的。