确定TextView是否需要滚动

时间:2018-03-30 15:41:32

标签: java android scroll textview

CursorAdapter内部bindView()我将数据绑定到以下布局:

enter image description here

TextView和两个Button s:" UP"和" DOWN"。

TextView在XML中定义如下:

<TextView
    android:id="@+id/tv_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="25dp"
    android:paddingRight="25dp"
    android:paddingTop="25dp"
    android:scrollbars="vertical"
    android:textAlignment="textStart"
    android:textColor="#5c6284"
    app:autoSizeMaxTextSize="40sp"
    app:autoSizeMinTextSize="20sp"
    app:autoSizeTextType="uniform" />

垂直滚动行为应用于TextView,该行为由&#34; UP和&#34; DOWN&#34; Button秒。

我想确定TextView是否需要滚动(足够长以不适合其提供的绘图区域),以便我可以启用/禁用&#34; UP&#34;和&#34; DOWN&#34;相应的按钮。

我目前正在阅读BaseMovementMethod scrollDown函数,考虑将其测量逻辑应用于我的适配器,尽管我觉得它应该更简单。也许是我不了解的内置行为。

除了我建议的方法之外,还有更好的方法来实现这一目标吗?

3 个答案:

答案 0 :(得分:2)

我要做的是将textview放在滚动视图中,如下所示:

<ScrollView
    android:id="@+id/scroller"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">

    <TextView
        android:id="@+id/tv_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="test texts here"/>
</ScrollView>

在您的活动中,执行以下行:

boolean needScrolling = false;
if(scroller.getHeight() < tv_content.getHeight()) needScrolling = true;

答案 1 :(得分:1)

您可以使用Static Layout课程。如果使用TextView的参数进行设置,则可以计算渲染文本的高度。

Layout.Alignment alignment = Layout.Alignment.ALIGN_NORMAL;
float spacingMultiplier = 1;
float spacingAddition = 0;
boolean includePadding = false;

StaticLayout myStaticLayout = new StaticLayout(text, myTextView.getPaint(), myTextView.getWidth(), alignment, spacingMultiplier, spacingAddition, includePadding);

float height = myStaticLayout.getHeight(); 

然后,您可以比较文本的高度和TextView的高度,并确定是否需要滚动。

如果myTextView.getPaint()方法不起作用,您还可以尝试使用最小文本大小手动创建Paint对象。

答案 2 :(得分:1)

计算mTextView的高度,不包含数据和数据,然后进行比较

mTextView.post(new Runnable() {
        @Override
        public void run() {
            int lineHeight=mTextView.getCompoundPaddingBottom()+ mTextView.getCompoundPaddingTop()+mTextView.getLineHeight();
            int height=mTextView.getHeight()-(mTextView.getCompoundPaddingTop()+mTextView.getLineHeight());
            if (height>lineHeight){

            }
        }
    });