textIsSelectable正在使TextView滚动

时间:2015-12-22 19:56:14

标签: android textview

<TextView
    android:id="@+id/myText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="end"
    android:maxLines="5"
    android:padding="16dip"
    android:textIsSelectable="true"
    android:textSize="16sp"/>

如果android:textIsSelectable不存在,则TextView的maxLines为5,即使有其他文本已经从视图中运行,也无法滚动TextView。

但是,添加android:textIsSelectable后,TextView的最大行数仍为5,但您可以通过点击TextView的下边框或选择一些文本并拖动文本选择器来滚动它控件。

android:textIsSelectable出现时,有没有办法阻止TextView滚动?

2 个答案:

答案 0 :(得分:1)

好吧,你可能不明白android:textIsSelectable已经在做什么......

根据TextView文档(您可以找到它here):

  

允许用户复制部分或全部TextView的值并粘贴   在其他地方,将XML属性android:textIsSelectable设置为   true或致电setTextIsSelectable(true)

     

textIsSelectable标记允许用户在TextView中制作选择手势,从而触发系统的内置复制/粘贴控件。

似乎滚动是isSelectable旗帜的主要特征之一,但......

根据问题,这里有一篇文章:How do I completely prevent a TextView from scrolling?

  

所以我做了一些研究,我认为它不那么简单   禁用滚动,但你可以做/尝试一些事情。

     

第一个是setEnabled(false),但这将禁用链接并更改   文字颜色。

     

我建议尝试的第二个是使用scrollTo(int x,int   y)方法。设置TextView的文本后,只需滚动(0,0),   我的猜测是大文本是导致滚动的唯一因素   这应该能够照顾它。

     

我发现你可以尝试的第三个答案有点复杂   并不完全是你的问题,但它可能适用于你可以找到   here

public class LinkMovementMethodOverride implements View.OnTouchListener{

@Override
public boolean onTouch(View v, MotionEvent event) {
    TextView widget = (TextView) v;
    Object text = widget.getText();
    if (text instanceof Spanned) {
        Spanned buffer = (Spanned) text;

        int action = event.getAction();

        if (action == MotionEvent.ACTION_UP
                || action == MotionEvent.ACTION_DOWN) {
            int x = (int) event.getX();
            int y = (int) event.getY();

            x -= widget.getTotalPaddingLeft();
            y -= widget.getTotalPaddingTop();

            x += widget.getScrollX();
            y += widget.getScrollY();

            Layout layout = widget.getLayout();
            int line = layout.getLineForVertical(y);
            int off = layout.getOffsetForHorizontal(line, x);

            ClickableSpan[] link = buffer.getSpans(off, off,
                    ClickableSpan.class);

            if (link.length != 0) {
                if (action == MotionEvent.ACTION_UP) {
                    link[0].onClick(widget);
                } else if (action == MotionEvent.ACTION_DOWN) {                             
                    // Selection only works on Spannable text. In our case setSelection doesn't work on spanned text
                    //Selection.setSelection(buffer, buffer.getSpanStart(link[0]), buffer.getSpanEnd(link[0]));
                }
                return true;
            }
        }

    }

    return false;
}

}
     

&#34;之后将其作为触摸侦听器应用于目标textview: -

     

textview.setOnTouchListener(new LinkMovementMethodOverride());&#34;

您也可以尝试将这些行添加到TextView属性中:

android:isScrollContainer="false"
android:ellipsize="end"

希望有所帮助

答案 1 :(得分:1)

您可以创建自定义不可滚动的TextView

 <select class="qty" name="qty" id="qty" value="<?php echo $this->getProductDefaultQty() * 1 ?>">

<?php
$quote = Mage::getSingleton('checkout/session')->getQuote();
$_item = $quote->getItemByProduct($_product);
$total = $_item->getQty();
 for ($x=1; $x<=$total; $x++) {
  echo '<option value="' . $x . '">' . $x . '</option>';
 }
?>
</select>