12

建议我使用父视图在我的 TextView 中进行水平滚动:

<HorizontalScrollView android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:scrollHorizontally="true"
        android:gravity="center|right"
        android:text="123456789"/>

</HorizontalScrollView>

水平滚动效果很好,但是当内容长于其父宽度时,它会使内容向右溢出:

-------
|123456|7
-------

但是我正在研究一个包含数字的文本视图,并且由于数字通常向右对齐,我需要文本视图溢出到另一侧。(您必须向左滚动才能看到字符串的开头)。

 ------
1|4567|
 ------

我尝试了多种重力=“正确”和宽度的组合,但我无法做到。如何将文本向右对齐并使其溢出到左侧?


编辑:

当用户键入时,我尝试这样做:

calc.setText( newNumber );
HorizontalScrollView hsv = (HorizontalScrollView) findViewById(R.id.hsv);
hsv.scrollTo(hsv.getRight(), hsv.getTop());

每次用户输入数字时,它都会向右滚动,但是最新的数字总是被排除在屏幕之外(就像它滚动然后添加数字一样)。

4

7 回答 7

4

受此启发

你可以让你自己的类派生自 Horizo​​ntalScrollView

public class RightAlignedHorizontalScrollView extends HorizontalScrollView {
    public RightAlignedHorizontalScrollView(Context context) {
        super(context);
    }

    public RightAlignedHorizontalScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public RightAlignedHorizontalScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
        scrollTo(getChildAt(0).getMeasuredWidth(), 0);
    }
}

我在那里发布了一个完整的简单项目

于 2013-02-07T21:06:19.527 回答
1
<HorizontalScrollView 
    android:id="@+id/hsv1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:scrollHorizontally="true"
        android:gravity="center|right"
        android:text="123456789"/>

</HorizontalScrollView>    

向 Horizo​​ntalScrollView 添加 id

HorizontalScrollView hsv = (HorizontalScrollView) findViewById(R.id.hsv1);
hsv.scrollTo(hsv.getRight(), hsv.getTop());

这是未经测试的,因为我是在飞行中完成的。告诉我进展如何。

于 2012-12-31T19:46:18.700 回答
1

我认为您必须将android:fillViewport="true"属性用于滚动视图
检查此

浏览教程

   <ScrollView 
        android:fillViewport="true"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/scrollView"/>

怀疑:滚动视图的容器布局在哪里?

于 2013-02-06T08:57:20.287 回答
1

我已经测试了代码。所以有两种方法可以解决这个问题第一个使用 ScrollBars

new Handler().postDelayed(new Runnable(){   
@Override
public void run() {
    HorizontalScrollView hsv = (HorizontalScrollView) findViewById(R.id.hsv1);
        hsv.scrollTo(hsv.getRight(), hsv.getTop());
    }       

},100L);

第二个没有滚动条

 <TextView 
 android:ellipsize="start"   //add this line
 ...
 />
于 2013-02-07T20:25:42.613 回答
0

您是否尝试将 ellipsize 参数分配给您的文本视图?

android:singleLine="true"
android:ellipsize="start"

我希望这能解决你的问题。

设置文字不溢出时的重力,尝试设置

android:gravity="center_vertical|right"
于 2013-02-07T11:28:10.493 回答
0

试试这个,这会正常工作,当你在线程之间跳转时不会给你任何延迟

hor = (HorizontalScrollView) findViewById(R.id.horizontalScrollView1);
    hor.postDelayed(new Runnable() {
        public void run() {
            hor.fullScroll(HorizontalScrollView.FOCUS_RIGHT);
        }
    }, 1L);
于 2015-10-18T06:44:55.867 回答
0

我在这方面已经很晚了,但这是一种使用视图旋转的简单方法。

horizontal_layout_id.setRotationY(180f)

上面的代码水平反转了整个水平布局,这使得文本从右边而不是左边开始。但是,这也使里面的文字倒转textview,这显然不好。

textview_inside_horizontal_layout_id.setRotationY(180f)

因此,我们再次反转 textview 本身,这将再次镜像镜像文本!所以,你最终会得到这样的东西——

在此处输入图像描述

这将使文本向右而不是向左溢出!

于 2019-10-08T08:58:30.387 回答