在CursorAdapter
内部bindView()
我将数据绑定到以下布局:
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
函数,考虑将其测量逻辑应用于我的适配器,尽管我觉得它应该更简单。也许是我不了解的内置行为。
除了我建议的方法之外,还有更好的方法来实现这一目标吗?
答案 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){
}
}
});