0

目前我正在使用ListView它,它工作正常。但是我有一个ListView类似于段落的文本,我只想显示这 2 行文本并使其余文本可滚动,但我遇到一个问题,如果我TextView在获得其父 ( ) 的焦点,并且不会让它滚动。ListViewTextViewListView

那么我可以实现这种TextView不会干扰滚动属性的可滚动功能ListView吗?

谢谢你。

4

3 回答 3

4

我能够通过以下方式做到这一点:

进入ListAdapter的getView方法获取该行的TextView对象,并写入

textView.setOnTouchListener(new View.OnTouchListener() {
   @Override
   public boolean onTouch(View v, MotionEvent event) {
       v.getParent().getParent().requestDisallowInterceptTouchEvent(true);
       return false ;
   }
});

当您触摸 TextView 时,控制滚动

于 2014-05-22T14:41:14.750 回答
1

你想要达到的目标真的是不可能的。操作系统如何知道您正在尝试滚动列表与列表行段落?在实际列表本身可以滚动之前,您基本上需要滚动到列表行段落的底部。这让用户感到困惑,而不是常见的 UX。

我建议您查看ExpandableListView。它允许您拥有每一行的折叠版本,在您的情况下,每个列表行只有 2 行文本。当用户点击该行时,它可以扩展为完整的段落形式,并且列表将一直可滚动。您应该可以在网上找到很多教程。

于 2013-04-25T14:09:17.670 回答
1

没有什么是不可能的,但做事的方式可能很困难。直接这件事不能实现,但间接是可以实现的,是的,我实现了。我是如何实现的有点复杂,但是是的,我会分享我是如何实现的。

ListView我单击时,Textview我阻止了 listView 的 Touch 模式,以便它们的 toch 方法不会相互拦截,这可以通过使用 父级 ( )的requestDisallowInterceptTouchEvent(true); 此块来完成。TouchListenerListView

现在,当单击时,TextView我允许它的触摸侦听器和setMovementMethod(),但是对于运动,我创建了一个自定义类,并且类正在关注

public class myScrollMethod extends ScrollingMovementMethod {

    @Override
    public void onTakeFocus(TextView widget, Spannable text, int dir) {
        // TODO Auto-generated method stub
        super.onTakeFocus(widget, text, dir);
    }

    @Override
    public boolean onKeyDown(TextView widget, Spannable buffer,
            int keyCode, KeyEvent event) {
        switch (keyCode) {
        case KeyEvent.KEYCODE_DPAD_DOWN:
            for (int i = 0, scrollAmount = getScrollAmount(widget); i < scrollAmount; i++) {
                down(widget, buffer);
            }
            return true;
        case KeyEvent.KEYCODE_DPAD_UP:
            for (int i = 0, scrollAmount = getScrollAmount(widget); i < scrollAmount; i++) {
                up(widget, buffer);
            }
            return true;
        default:
            return super.onKeyDown(widget, buffer, keyCode, event);
        }
    }

    private int getScrollAmount(TextView widget) {
        final int visibleLineCount = (int) ((1f * widget.getHeight()) / widget
                .getLineHeight());
        int scrollAmount = visibleLineCount - 1;
        if (scrollAmount < 1) {
            scrollAmount = 1;
        }
        return scrollAmount;
    }


}

之后,当我单击父项时,我启用父项设置为 true 的 TouchIntercepter 并保持其父项并开始滚动。

通过这种方式,我成功地达到了这个要求

于 2013-04-29T07:17:00.083 回答