以编程方式滚动EditText

5

我正在编写一个简单的凯撒加密活动。屏幕上有两个EditText,一个是明文,一个是密文。这里是一个密文EditText的例子 - 明文的也类似。

<EditText 
    android:layout_below="@id/Caesar_Label_CryptText"
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent"
    android:id="@+id/Caesar_Text_CryptText" 
    android:hint="Enter crypted text"
    android:maxLines="2" 
    android:lines="2" 
    android:minLines="2"
    android:inputType="text|textMultiLine|textVisiblePassword"
    android:scrollbars="vertical" 
    android:gravity="top" />

现在,当输入明文时,我有一个TextChangedListener运行,以编程方式加密并填充该加密EditText。到目前为止,一切都很好。
当输入的明文变得非常长时,明文EditText随着我的输入滚动,但是加密EditText保持在文本的顶部。我真的希望加密EditText可以滚动,以便始终显示其内容的底部行。
如何做到这一点,最好是从TextWatcher的onTextChanged()方法中进行?

有趣的问题。看起来这应该是可能的,但我查阅了文档,没有找到任何东西。 - Jeremy Logan
2个回答

10

好的,找到了。它是光标(在EditText和TextViews上称为Selection)。

这是我让它起作用的方式:

ivClear    // assigned the EditText that has the input
ivCrypt    // assigned the target EditText, that I want to scroll
aText      // the input from ivClear, crypted
然后使用:
    ivCrypt.setText(aText);                               // assign the Text
    ivCrypt.setSelection(ivClear.getSelectionStart());    // scroll

哎呀,终于做完了 :) 我总是低估了Spannable的威力 ;)


0

我试过了。我记录了我的明文EditText的getScrollY()值。输入文本时,此值会增加。然后,我使用相同的值在crypto-EditText中调用scrollToY()以开始滚动。但第二个EditText不会滚动。我调试了scrollTo(),但View中最初更改的mScrollY变量在下一次调用scrollTo()时被重置为0。我目前怀疑光标位置是罪魁祸首。正在研究这个问题。 - rflexor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接