水平可滚动TextView在Android版本中显示不一致的行为

时间:2013-03-17 13:12:15

标签: android textview arabic scrollable

我有一个文本视图,其中包含单个带衬里的阿拉伯语(从右到左)文本。文本内容随时间增加,最后(最左侧)部分应始终显示。水平滚动条最初设置为右侧,并随着文本的增加自动滚动到左侧。

以下代码适用于2.3 Android手机。 这来自layout.xml

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ellipsize="none"
    android:fadingEdge="horizontal"
    android:gravity="right"
    android:scrollHorizontally="true"
    android:scrollbars="horizontal"
    android:singleLine="true"
    android:text="@string/txt_start"
    android:textAppearance="?android:attr/textAppearanceLarge" />

我在我的Activity

的onCreate()方法中有这个
tv = (TextView) findViewById(R.id.textView1);
tv.setMovementMethod(new ScrollingMovementMethod());

问题是具有android 4.0+的手机上的文本视图的不一致行为。水平滚动条最初没有放在右侧,因此TextView最初被消隐了!如果我尝试滚动空白textView,文本会显示出来。添加额外文本时,滚动条不会滚动显示新文本,但如果我手动滚动文本,则会显示。

我搜索了stackoverflow,并尝试添加以下属性但没有成功。

android:focusable="true"
android:focusableInTouchMode="true"

3 个答案:

答案 0 :(得分:1)

在我想要使用android:gravity="right"滚动TextView动画的情况下,这些解决方案都不起作用。有帮助的简单解决方法是将TextView重力保持在左侧,但将其对齐在RelativeLayout容器内:

<RelativeLayout
  android:orientation="horizontal"
  android:layout_width="match_parent"
  android:layout_height="wrap_content">
  <AutoScrollingTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:gravity="left"
    android:singleLine="true"
    android:ellipsize="none">
</RelativeLayout>

答案 1 :(得分:0)

试试这个例子,它应该有效:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <TextView
         android:id="@+id/myText"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:text="@string/myscroll"
         android:ellipsize="marquee"
         android:singleLine="true"
         android:scrollHorizontally="true"
         android:marqueeRepeatLimit="10"
>
</LinearLayout>

注意:在测试选框时,不要在Eclipse内的设计视图中测试它,在模拟器\设备上试试..

此外,如果您想在代码中添加滚动效果

TextView tView = (TextView) findViewById(R.id.myText);
tView.stSelected(true);

要在选框结尾处使选框滚动不停止

android:marqueeRepeatLimit=”marquee_forever”

答案 2 :(得分:0)

发现重力左/右被弃用,开发人员应该使用开始/结束。对于要滚动的文本,需要将“wrap_content”设置为其宽度,另外textDirection需要设置为RTL。由于未知原因,textDirection不能以编程方式工作,但在xml中工作。

此代码适用于所有Android版本的API。

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="end"
        android:textDirection="rtl"
        android:scrollHorizontally="true"
        android:scrollbars="horizontal"
        android:singleLine="true"
        android:ellipsize="none"
        android:text="@string/txt_start"
        android:textAppearance="?android:attr/textAppearanceLarge" />