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)