水平滚动并关注TextView中的最后一个数字

时间:2017-08-26 21:08:59

标签: java android android-layout android-studio textview

我正在做一个计算器应用程序。

我有一个TextView,用户可以在其中编写数字以进行详细说明。

TextView位于Horizo​​ntalScrollView中。 Horizo​​ntalScrollView位于垂直LinearLayout内。 TextView是单行,当用户写入一个长号时,该数字就会出现在屏幕上。

TextView应该跟随用户添加的最后一个数字,这样他就可以在不滚动屏幕的情况下查看最后添加的数字。我不想要一个每秒重复滚动的自动滚动功能,我只想关注最后添加的数字。

这是TextView

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

            <TextView
                android:id="@+id/numberDisplay"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="0dp"
                android:layout_marginLeft="8dp"
                android:layout_marginRight="8dp"
                android:layout_marginTop="16dp"
                android:hint="0"
                android:scrollHorizontally="true"
                android:maxLines="1"
                android:layout_gravity="right"
                android:textSize="70sp" />

        </HorizontalScrollView>

1 个答案:

答案 0 :(得分:1)

试试这个:

  1. 在您的活动中为滚动视图和文本视图创建变量:

    TextView textView;
    HorizontalScrollView scrollView;
    
  2. onCreate()中初始化它们:

    scrollView = (HorizontalScrollView) findViewById(R.id.scrollView); // Add this id to xml
    textView = (TextView) findViewById(R.id.numberDisplay);
    
  3. 每次更新文本视图的文本时,都会更新滚动视图的滚动位置:

    scrollView.scrollTo(textView.getRight(), textView.getTop());
    
  4. <强>更新 我意识到,如果您调用textView.setText(...)然后立即调用scrollView.scrollTo(...),则它不起作用,因为文本视图大小不会立即更新。你应该像这样更新scoll位置:

        scrollView.post(new Runnable() {
            @Override
            public void run() {
                scrollView.scrollTo(textView.getRight(), textView.getTop());
            }
        });