gridview android里面的可滚动和可点击的textview

时间:2014-09-23 04:54:59

标签: android gridview textview clickable scrollable

我有一个网格视图,其中我使用{background imageview包含一个imageview,两个textview垂直对齐图像}和另一个布局{text image包含三个垂直对齐图像的文本视图}。

我在textview中限制了最大行数。 请建议如何在gridview中滚动textview,我希望gridview项目可以点击,这将在项目点击时导航到下一个屏幕。

我尝试使用requestDisallowInterceptTouchEvent方法使可滚动的textview在gridview内部工作。但我没有得到预期的结果。当使用setscrollingmovement()方法时,textview变得不可点击,因此这也无效。

我无法将该方案发布为图片,因为我没有足够的信誉来发布图片。图片已在google drive中上传。请使用以下链接查看图片。

https://drive.google.com/file/d/0B45x-sgFopMBMUJOaHk0NWlkMzQ/edit?usp=sharing

2 个答案:

答案 0 :(得分:1)

我得到了它的工作:-)但部分。我在gridview项目的自定义布局(膨胀布局)的根布局中使用了android:descendantFocusability="blocksDescendants"。事情是onclick在textiew之外工作。

因此,textview在背景图像上的某处滚动并单击textview外部会触发网格视图的onClickListener()

但是在点击textview时无法触发gridview的onclicklistener()。需要研究这个问题。

来自stackoverflow链接的建议:Referred Link

编辑:gridview中的可滚动和可点击的textview - 使用onTouchlistener获得解决方法

在gridview的适配器类中为textview设置下面的ontouch click listener将允许你滚动文本以及触发GridView的onItemClick。

OnTouchListener aListener = new OnTouchListener() {
                                long startTouchTime = 0;

                                @Override
                                public boolean onTouch(View v,
                                        MotionEvent event) {
                                    switch (event.getAction()) {
                                    case MotionEvent.ACTION_DOWN:
                                        Log.e("ACTION_DOWN",
                                                "ACTION_DOWN, intercept true");
                                        startTouchTime = (System
                                                .currentTimeMillis());
                                        // To scroll the textview set this
                                        textview
                                                .setMovementMethod(new ScrollingMovementMethod());
                                        v.getParent()
                                                .requestDisallowInterceptTouchEvent(
                                                        true);
                                        break;
                                    case MotionEvent.ACTION_UP:
                                        Log.e("ACTION_UP",
                                                "Call onitemclick"
                                                        + ((System
                                                                .currentTimeMillis()) - startTouchTime));

                                        if ((System.currentTimeMillis())
                                                - startTouchTime < 200)
                                         // To call gridview onItemClick here
                                            myGridActivity.myGridView
                                                    .getOnItemClickListener()
                                                    .onItemClick(
                                                            null,
                                                            myGridActivity.myGridView,
                                                            (Integer) imageView
                                                                    .getTag(), // Setting the position here through imageview set tag
                                                            (long) 6767);
                                        break;
                                    }
                                    if (event.getAction() == MotionEvent.ACTION_MOVE) {
                                        Log.e("ACTION_MOVE",
                                                "ACTION_MOVE, intercept true");

                                        v.getParent()
                                                .requestDisallowInterceptTouchEvent(
                                                        true);
                                    } else {
                                        Log.e("Other", "Intercept false");
                                        v.getParent()
                                                .requestDisallowInterceptTouchEvent(
                                                        true);

                                    }
                                    return false;
                                }
                            };

                            textview.setOnTouchListener(aCBInfoListener);

设置android:scrollbars="vertical"以便滚动文本视图。

答案 1 :(得分:0)

试试这个:

布局的xml文件中TextView的属性:

android:maxLines = "INTEGER"

android:scrollbars = "vertical"

然后使用:

yourTextView.setMovementMethod(new ScrollingMovementMethod())

代码。

它会正常工作..

或者您可以将TextView放入ScrollView:

<ScrollView android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:layout_weight="1">
    <TextView android:id="@+id/TextView01" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Testin testin testing "></TextView>
</ScrollView>