由于 HorizontalScrollView,ListFragment 中的 ContextMenu 忽略了 longPress。怎么解决?
ContextMenu in ListFragment ignoring longPress because of HorizontalScrollView. How to solve?
我正在为 Android 应用程序处理 XML 设计文件,我的 ListFragment (android.support.v4.app.ListFragment) 出现问题。
问题:
如果我将 HorizontalScrollView 添加到我的 XML 布局(将我的 TextView 放入其中),则长按列表中的一个项目将不会打开 ContextMenu (android.view.ContextMenu)。
当我删除 HorizontalScrollViews 时一切正常。这意味着只放置 TextView 而没有 HorizontalScrollView。
日志没有给出错误或警告。问题应该来自 XML 而不是 Java 代码。
<!-- main root-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:background="@color/colorWhite">
<!-- SOME MORE STUFF .... -->
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:id="@+id/linearLayout1"
android:layout_alignParentLeft="true"
android:layout_marginRight="8dp"
android:layout_toLeftOf="@+id/tv_activity_date">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView14"
android:src="@drawable/ic_short_text_black_18dp"
android:layout_marginRight="5dp"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbarSize="0dp" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="type"
android:id="@+id/tv_activity_type"
android:textColor="@color/colorAccent" />
</HorizontalScrollView>
</LinearLayout>
<!-- SOME MORE STUFF .... -->
</RelativeLayout>
所以,它可能以某种方式挡住了视线。有人找到解决方案了吗?提前致谢 ! :)
编辑:
我尝试将 HorizontalScrollView 放在根 View 中,但没有放入任何内容,也没有定义大小。所以它只是整个布局的一部分,但没有用处。即使是现在,HorizontalScrollView 也会阻止 ListFragment 项目,所以我无法长时间 touch/press 打开 ContextMenu。如果我删除它,问题就消失了。
已编辑
This 是正确答案,并且工作正常。
将此代码添加到您的 OnCreate()
或 OnCreateView()
final HorizontalScrollView horizontalScrollView = (HorizontalScrollView)findViewById(R.id.horizontal);
registerForContextMenu(horizontalScrollView);
GestureDetector.OnGestureListener listener = new GestureDetector.SimpleOnGestureListener() {
@Override
public void onLongPress(MotionEvent e)
{
openContextMenu(horizontalScrollView);
Toast.makeText(MainActivity.this, "LongClick", Toast.LENGTH_SHORT).show();
}
};
final GestureDetector gestureDetector = new GestureDetector(this, listener);
horizontalScrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event)
{
return gestureDetector.onTouchEvent(event);
}
});
1-您是否在 registerforContextMenu()
中设置了正确的视图?
2-如果您的 TextView(长按后)打开上下文菜单,可能需要 setLongClickable()
您的 HorizontalScrollView
。试试这个 answer
3-你真的需要 HorizontalScrollView
和 TextView
?看这个HorizontalScrollView references
希望对您有所帮助!
我正在为 Android 应用程序处理 XML 设计文件,我的 ListFragment (android.support.v4.app.ListFragment) 出现问题。
问题: 如果我将 HorizontalScrollView 添加到我的 XML 布局(将我的 TextView 放入其中),则长按列表中的一个项目将不会打开 ContextMenu (android.view.ContextMenu)。
当我删除 HorizontalScrollViews 时一切正常。这意味着只放置 TextView 而没有 HorizontalScrollView。
日志没有给出错误或警告。问题应该来自 XML 而不是 Java 代码。
<!-- main root-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:background="@color/colorWhite">
<!-- SOME MORE STUFF .... -->
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:id="@+id/linearLayout1"
android:layout_alignParentLeft="true"
android:layout_marginRight="8dp"
android:layout_toLeftOf="@+id/tv_activity_date">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView14"
android:src="@drawable/ic_short_text_black_18dp"
android:layout_marginRight="5dp"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbarSize="0dp" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="type"
android:id="@+id/tv_activity_type"
android:textColor="@color/colorAccent" />
</HorizontalScrollView>
</LinearLayout>
<!-- SOME MORE STUFF .... -->
</RelativeLayout>
所以,它可能以某种方式挡住了视线。有人找到解决方案了吗?提前致谢 ! :)
编辑: 我尝试将 HorizontalScrollView 放在根 View 中,但没有放入任何内容,也没有定义大小。所以它只是整个布局的一部分,但没有用处。即使是现在,HorizontalScrollView 也会阻止 ListFragment 项目,所以我无法长时间 touch/press 打开 ContextMenu。如果我删除它,问题就消失了。
已编辑
This 是正确答案,并且工作正常。
将此代码添加到您的 OnCreate()
或 OnCreateView()
final HorizontalScrollView horizontalScrollView = (HorizontalScrollView)findViewById(R.id.horizontal);
registerForContextMenu(horizontalScrollView);
GestureDetector.OnGestureListener listener = new GestureDetector.SimpleOnGestureListener() {
@Override
public void onLongPress(MotionEvent e)
{
openContextMenu(horizontalScrollView);
Toast.makeText(MainActivity.this, "LongClick", Toast.LENGTH_SHORT).show();
}
};
final GestureDetector gestureDetector = new GestureDetector(this, listener);
horizontalScrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event)
{
return gestureDetector.onTouchEvent(event);
}
});
1-您是否在 registerforContextMenu()
中设置了正确的视图?
2-如果您的 TextView(长按后)打开上下文菜单,可能需要 setLongClickable()
您的 HorizontalScrollView
。试试这个 answer
3-你真的需要 HorizontalScrollView
和 TextView
?看这个HorizontalScrollView references
希望对您有所帮助!