0

私は作成ScrollViewし、そのLinearLayout中に を入れました。レイアウトを超えるTextViewまで文字列を入れたいだけです。TextView私のコードの問題は、 while ループが終わらないことです。

public class MainActivity extends Activity {
public static int screenWidth,screenHeight;
public boolean overlap;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main) ;



    ScrollView scroll=(ScrollView) findViewById(R.id.scrollView1);
    TextView mytextview=(TextView) findViewById(R.id.textview1);
    TextView textshow=(TextView) findViewById(R.id.textView2);
    LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearlayout);

    mytextview.setText("");

    ViewTreeObserver vto=scroll.getViewTreeObserver();
    getmeasure(vto,mytextview,scroll,linearLayout);
}



public void getmeasure(ViewTreeObserver vto, final TextView mytextview2, final ScrollView scroll2, final LinearLayout linearLayout2) {


    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

        @Override
        public void onGlobalLayout() {
            int a=linearLayout2.getMeasuredHeight();
            int b=scroll2.getHeight();

            while (a<b) {
                mytextview2.append("full    full    full");
                a=linearLayout2.getMeasuredHeight();
                b=scroll2.getHeight();
                }

            }
    });

}
4

1 に答える 1

0

メソッド getMeasuredHeight() は、onMeasure() で測定された高さを返します。コードの問題は、 onMeasure() が Android フレームワークによって呼び出されていないため、 getMeasuredHeight() が変更されないことです。実際には while ループにより、フレームワークがビューを測定できなくなります。

次のように OnGlobalLayoutListener を実装します。

vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

    @Override
    public void onGlobalLayout() {
        int a=linearLayout2.getMeasuredHeight();
        int b=scroll2.getHeight();

        if (a<b) {
            mytextview2.append("full    full    full");       
        }

   }
});

レイアウト後にテキストが追加されると、LinearLayout とその親 (ScrollView) が無効になるため、ビューが再度レイアウトされます。レイアウトにはビューの測定が含まれます。つまり、OnGlobalLayoutListener が再度呼び出されます。

これは、画面をテキストで埋めるのに適した方法ではないことに注意してください。実際には、TextView を垂直方向にスクロール可能にするために ScrollView は必要ありません。そして、コンテンツを画面より高くしたくないのに、なぜ ScrollView が必要なのですか?

于 2013-05-22T09:20:49.337 に答える