0

我有一个以 TextSwitcher 作为子级的 Horizo​​ntalScrollView,如下所示。

<HorizontalScrollView
    android:id="@+id/horizontal_scroll_view_equation"
    android:scrollbars="none"
    android:layout_width="match_parent"
    android:layout_weight="1"
    android:layout_height="0dp"
    android:fillViewport="true"
    android:layout_gravity="right">

    <TextSwitcher
        android:id="@+id/text_switcher_equation"
        android:layout_gravity="right"
        android:layout_width="wrap_content"
        android:layout_height="match_parent">

        <TextView
            android:layout_marginRight="@dimen/spacing_medium"
            android:layout_marginLeft="@dimen/spacing_medium"
            android:id="@+id/text_view_equation_default"
            android:background="@android:color/transparent"
            android:gravity="center_vertical|right"
            android:maxLines="1"
            android:textSize="@dimen/font_xxxlarge"
            android:scrollHorizontally="true"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        <TextView
            android:layout_marginRight="@dimen/spacing_medium"
            android:layout_marginLeft="@dimen/spacing_medium"
            android:id="@+id/text_view_equation_anim"
            android:background="@android:color/transparent"
            android:gravity="center_vertical|right"
            android:maxLines="1"
            android:textSize="@dimen/font_xxxlarge"
            android:scrollHorizontally="true"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </TextSwitcher>
</HorizontalScrollView>

上面这段代码的目标是创建一个水平滚动的TextView。此代码是计算器的一部分,因此 TextView 的文本是动态的。这意味着有时 TextView 需要可滚动,有时则不需要(取决于文本的长度)。

我现在的奇怪行为如下。一旦用户输入越来越多的字符,TextView 就会变得完全可滚动。但是,当用户清除方程式时,Horizo​​ntalScrollView 保持折叠状态,这意味着它仍然可以滚动,而 TextView 的文本只有一个字符(零)。这意味着用户可以左右滚动文本,而文本只有一个字符。

下面将演示此行为(请参见下图)。在左图中,用户输入了一个方程。然后,用户点击清除,方程被清除,这意味着设置为 0。但是,如右图所示,TextView 仍然可以向右滚动。

德斯 德斯 德斯

另一个显着的现象是,当用户再次单击 clear(连续两次)时,TextView 的滚动不再可能。出于某种原因,当用户第一次点击重置时,情况并非如此,但我不明白为什么。

我想要实现的是,一旦 TextView 的文本被清除(因此 TextView 的文本包含一个字符),用户就不可能向左或向右滚动文本。

4

1 回答 1

0

单击清除时,滚动到最大右侧(如果用户滚动到左侧),您可以通过以下方式实现

                while(scoll_view.canScrollHorizontally(1)) {
                    scoll_view.scrollBy(50, 0);
                }

现在您需要在单击清除时禁用滚动,并在用户单击另一个按钮(在您的情况下为其他数字)时重新启用它,并且您这样做

将此添加到您的班级并使用拦截来禁用和启用滚动

class OnTouch implements View.OnTouchListener {
        public boolean intercept = false;
        @Override public boolean onTouch(View v, MotionEvent event) {
            return intercept;
        } 
}

将 onTouchListener 应用于 Horizo​​ntalScrollView

    final OnTouch listener = new OnTouch();
    scoll_view.setOnTouchListener(listener);

并且当用户在 while 滚动禁用滚动后单击时清除

            listener.intercept = true;

通过执行重新启用滚动

            listener.intercept = false;
于 2020-07-26T19:41:19.337 回答