4

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

以下代码在 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"
4

3 回答 3

1

这些解决方案都不适用于我想用android:gravity="right". 有帮助的简单解决方法是将 TextView 重力保持在左侧,但将其与相对布局容器内的右侧对齐:

<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>
于 2013-04-25T11:52:40.190 回答
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 内部的设计视图中进行测试,在 emulator\device 上尝试。

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

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

要使选取框滚动在选取框末尾不停顿

android:marqueeRepeatLimit=”marquee_forever”
于 2013-03-26T17:07:12.747 回答
0

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

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

    <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" />
于 2013-03-28T08:06:18.360 回答