現在、TextView の一番下までスクロールしている ScrollView 内に TextView があります。
TextView は常に更新されて動的に入力されます (TextView は基本的にアクション コンソールとして機能します)。
ただし、私が抱えている問題は、動的テキストが ScrollView に追加されると、ユーザーがテキストを越えて黒いスペースにスクロールできることです。これは、TextView にコンテンツが追加されるたびに増加します。
さまざまなアプローチを試しましたが、どれも正しい結果をもたらしませんでした。maxLines を使用したり、レイアウトの高さを定義したりすることはできません。これは、表示される行数が絶えず変化するさまざまな画面サイズに対して動的にする必要があるためです。
私はもともとこれをプログラム的に行っていましたが、これはランダムな時間にクラッシュしていたため、レイアウトに保持したいと思います(使いやすさが向上しました)、以下のコード例:
final int scrollAmount = update.getLayout().getLineTop(update.getLineCount()) - update.getHeight();
if(scrollAmount > 0)
{
update.scrollTo(0, scrollAmount);
}
以下のコードは、コンテンツが追加されたときに TextView を自動的に一番下にスクロールするために使用されている現在のレイアウト xml です。
<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 が下部に空白を追加していることです。私がどこで間違っているのかについての助けや指導は大歓迎です。