Android,让可滚动视图溢出到左边而不是右边?

时间:2012-12-31 19:31:30

标签: java android

我建议使用父视图在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
-------

然而,我正在研究一个包含数字的textview,因为数字通常与右边对齐,我需要将textview溢出到另一边。 (你必须向左滚动才能看到字符串的开头)。

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

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


编辑:

我尝试在用户输入时执行此操作:

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

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

7 个答案:

答案 0 :(得分:4)

this启发

您可以创建自己的类来自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);
    }
}

我发布了一个完整的简单项目there

答案 1 :(得分: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());

这是未经测试的,因为我是在飞行中制作的。告诉我它是怎么回事。

答案 2 :(得分:1)

我认为你必须使用android:fillViewport="true"属性进行滚动视图
Check This&amp; This

Go through a Tutorial

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

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

答案 3 :(得分: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);

第二个没有scrollBars

 <TextView 
 android:ellipsize="start"   //add this line
 ...
 />

答案 4 :(得分:0)

您是否尝试将ellipsize参数指定给textview?

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

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

要在未溢出时设置文本的重力,请尝试设置

android:gravity="center_vertical|right"

答案 5 :(得分:0)

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

hor = (HorizontalScrollView) findViewById(R.id.horizontalScrollView1);
    hor.postDelayed(new Runnable() {
        public void run() {
            hor.fullScroll(HorizontalScrollView.FOCUS_RIGHT);
        }
    }, 1L);

答案 6 :(得分:0)

我已经很晚了,但是这是一种通过旋转视图的简单方法。

horizontal_layout_id.setRotationY(180f)

上面的代码将整个水平布局水平反转,这使文本从右侧而不是左侧开始。但是,这也会使textview内部的文本反转,这显然不好。

textview_inside_horizontal_layout_id.setRotationY(180f)

因此,我们再次反转textview本身,这将再次镜像镜像的文本!因此,您最终会遇到类似这样的情况

enter image description here

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