0

に が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 の重力を適切に更新して、即座に実行するにはどうすればよいですか?

4

1 に答える 1

0

テキストビューの重力を変更した後、view.invalidate を呼び出してみてください。

于 2013-10-25T22:25:23.013 に答える