如何管理不断增长的scrollview大小?

时间:2013-05-22 08:51:40

标签: android android-scrollview

我制作了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();
                }

            }
    });

}

1 个答案:

答案 0 :(得分:0)

方法getMeasuredHeight()返回已在onMeasure()中测量的高度。您的代码存在的问题是,getMeasuredHeight()不会更改,因为Android Framework尚未调用onMeasure()。实际上你的while循环阻止了Framework测量Views。

像这样实现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)应该失效,因此视图将再次进行布局。 Layouting包括测量视图。这意味着将再次调用您的OnGlobalLayoutListener。

请注意,这不是用文本填充屏幕的好方法。实际上,您不需要ScrollView来使TextView垂直滚动。如果您不希望其内容高于屏幕,为什么还需要ScrollView?