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

Java Android,让可滚动视图溢出到左侧而不是右侧?,java,android,Java,Android,建议我使用父视图在我的文本视图中获得水平滚动: <HorizontalScrollView android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:scrollH

建议我使用父视图在我的文本视图中获得水平滚动:

<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>
然而,我正在使用一个文本视图来保存数字,因为数字通常是向右对齐的,所以我需要文本视图溢出到另一侧。(必须向左滚动才能看到字符串的开头)

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


编辑:

我尝试在用户键入以下内容时执行此操作:

calc.setText( newNumber );
HorizontalScrollView hsv = (HorizontalScrollView) findViewById(R.id.hsv);
hsv.scrollTo(hsv.getRight(), hsv.getTop());
每次用户输入一个数字时,它都会向右滚动,但是最新的数字总是不在屏幕上(就像滚动然后添加数字一样)


这是未经测试的,因为我在飞行中。告诉我它是如何运行的。

我认为您必须为滚动视图使用
android:fillViewport=“true”
属性
&



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

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

android:singleLine="true"
android:ellipsize="start"
我希望这能解决你的问题

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

android:gravity="center_vertical|right"

我已经测试了代码。所以有两种方法可以解决这个问题 第一个是滚动条

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
 ...
 />

灵感来源于

您可以从HorizontalScrollView派生自己的类

HorizontalScrollView hsv = (HorizontalScrollView) findViewById(R.id.hsv1);
hsv.scrollTo(hsv.getRight(), hsv.getTop());
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);
    }
}

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

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

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

我已经很晚了,但这里有一个简单易行的方法,使用视图的旋转

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

textview_inside_horizontal_layout_id.setRotationY(180f)
因此,我们再次反转textview本身,这将再次镜像镜像的文本!所以,你最终会得到这样的东西-


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

我添加了ID,将代码粘贴到活动代码块中,并导入了HorizontalScrollView,但在第二行中我得到了各种语法错误注释。我应该在其他地方添加代码吗?@Liso22什么语法错误?可以在任何地方调用
hsv.scrollTo(int,int)
,但是如果您想一直向右启动hsv,请在
onCreate(Bundle)
中使用它,我刚刚检查了一下,发现它只能部分工作。如果我执行
calc.setText(“12345”)
然后立即运行代码,它会向右滚动,但没有使用正确的宽度,这就是问题所在。它没有考虑我对textview所做的更改。所以如果我输入12345,我实际上会在屏幕上显示宽度1234。(第5条被省略)疑问:滚动视图的容器布局在哪里?正如您所指出的,解决这个问题的唯一方法是延迟滚动。更改内容>等待1毫秒>向右滚动。顺便说一句,我认为文本视图的选项不起作用,它只会在文本之前添加
,但您将无法滚动。或者你会吗?这似乎是一个更简单的解决方案,但我以前使用过ellipsie,我不认为它只添加了三个点。如果您删除滚动条并使用ellipsize=“start”,则会出现以下情况:实际文本:“12345667”显示的文本:“…45667”,因此溢出应位于左侧,仅显示最后一部分,以便与显示的文本相匹配。(尽管它不可滚动)
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);
    }
}
hor = (HorizontalScrollView) findViewById(R.id.horizontalScrollView1);
    hor.postDelayed(new Runnable() {
        public void run() {
            hor.fullScroll(HorizontalScrollView.FOCUS_RIGHT);
        }
    }, 1L);
horizontal_layout_id.setRotationY(180f)
textview_inside_horizontal_layout_id.setRotationY(180f)