我正在处理Android应用程序的XML设计文件,并且我的ListFragment(android.support.v4.app.ListFragment)出现问题。
问题: 如果我将HorizontalScrollView添加到我的XML布局(将我的TextView放入其中),则按下列表中的一个项目,不会打开ContextMenu(android.view.ContextMenu)。
当我删除HorizontalScrollViews时,一切正常。这意味着只需放置TextView而不使用HorizontalScrollView。
日志不会出现错误或警告。问题应该来自不在Java代码中的XML。
<!-- 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放在根视图中,并且没有放入任何内容,也没有定义任何大小。所以它只是整个布局的一部分,但没有用途。即使是现在,HorizontalScrollView也会阻止ListFragment项目,因此我无法长按触摸/按下以打开ContextMenu。如果我删除它,问题就消失了。
答案 0 :(得分:0)
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
希望它有所帮助!