我在 ScrollView 中有一个 TextView,它当前滚动到 TextView 的底部。
TextView 是动态填充的,不断更新(TextView 本质上是一个操作控制台)。
但是,我遇到的问题是,当动态文本添加到 ScrollView 时,用户可以将文本滚动到黑色空间,每次向 TextView 添加更多内容时,该空间都会增加。
我尝试了各种不同的方法,但是这些方法都没有给出正确的结果。我不能使用 maxLines 或定义布局的高度,因为我需要它对于各种屏幕尺寸是动态的,可见的行数不断变化。
我最初也以编程方式完成了此操作,但是这是随机崩溃的,因此希望将其保留在我的布局中(更好的可用性),示例代码如下:
final int scrollAmount = update.getLayout().getLineTop(update.getLineCount()) - update.getHeight();
if(scrollAmount > 0)
{
update.scrollTo(0, scrollAmount);
}
下面的代码是我当前的布局 xml,用于在添加内容时自动将我的 TextView 滚动到底部:
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/spacer2"
android:layout_below="@+id/spacer1"
android:fillViewport="true" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/battle_details"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="12dp"
android:layout_gravity="bottom" />
</LinearLayout>
</ScrollView>
编辑 - 这是我用来向我的 TextView 添加文本的代码:
private void CreateConsoleString()
{
TextView update = (TextView)findViewById(R.id.battle_details);
String ConsoleString = "";
// BattleConsole is an ArrayList<String>
for(int i = 0; i < BattleConsole.size(); i++)
{
ConsoleString += BattleConsole.get(i) + "\n";
}
update.setText(ConsoleString);
}
编辑 2 - 我向 BattleConsole 添加内容,如下所示:
BattleConsole.add("Some console text was added");
CreateConsoleString();
总而言之,我唯一的问题是 ScrollView 和/或 TextView 在底部添加空白区域,而不是阻止用户在文本的最后一行滚动。任何关于我哪里出错的帮助或指导将不胜感激。