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