に がTextView
含まれておりHorizontalScrollView
、スクロールできないときは常にテキストを中央に配置したいのですが、スクロールできるほど大きい場合は の重力を に変更する必要がありTextView
ますGravity.LEFT
。そうしないHorizontalScrollView
と、テキストが間違って表示されます。テキストの大部分が切り取られ、テキストが中央に配置されたままの場合、最後に空白ができます。これを処理するための現在のコードは次のとおりです。
//make horizontal scroll text center and work
final HorizontalScrollView toTextScrollView = (HorizontalScrollView)parentView.findViewById(R.id.horizScroll);
toTextScrollView.addOnLayoutChangeListener(new OnLayoutChangeListener(){
@Override
public void onLayoutChange(View v, int left, int top,
int right, int bottom, int oldLeft, int oldTop,
int oldRight, int oldBottom) {
//if scrollable, change toNumber layout_gravity to left, else keep it at center
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
if(canScroll(toTextScrollView))
params.gravity=Gravity.LEFT;
else
params.gravity=Gravity.CENTER;
Toast.makeText(getActivity(), "Can scroll: " + canScroll(toTextScrollView), Toast.LENGTH_LONG).show();
toNumber.setLayoutParams(params);
}
});
canScroll()
トーストで正しく更新されるため、私の機能は正しく機能するため、問題はありません。TextView
問題は、レイアウトが設定されたら「更新」する必要があると感じることです。これは、最初の数値が に追加されTextView
てスクロール可能になると、Toast がスクロール可能になったことを返すためですが、Gravity は中央のままであるため、左にスクロールすると数値の最初の部分が次のように切り取られます。
ただし、次の番号が追加されるたびに適切に更新され、重力が Gravity.LEFT に設定されるため、スクロール ビューでテキストが途切れることはありません。TextView の重力を適切に更新して、即座に実行するにはどうすればよいですか?