【问题标题】:How to manage growing size of scrollview?如何管理不断增长的滚动视图?
【发布时间】:2013-05-22 17:20:49
【问题描述】:

我创建了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();
                }

            }
    });

}

【问题讨论】:

    标签: android android-scrollview


    【解决方案1】:

    getMeasuredHeight() 方法返回在 onMeasure() 中测量的高度。您的代码的问题是, getMeasuredHeight() 不会改变,因为 Android 框架没有调用 onMeasure()。实际上,您的 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 将再次被调用。

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

    【讨论】:

    • “您的代码的问题是,getMeasuredHeight() 没有改变,因为 Android 框架没有调用 onMeasure()。”感谢您的回答。 “请注意,这不是用文本填充屏幕的好方法”所以请告诉我一种方法,我想将很长的文本放入单独的 textView 中,并且每个 textView 占据整个屏幕。 (每个 textView 都在 pageView 中,我只想知道什么时候打破文本以适应屏幕)谢谢。
    • 我知道这个问题没有简单的解决方案。但是您不应该一次又一次地使用框架布局过程来解决正确数量的文本。您可以像stackoverflow.com/questions/14276853/… 的答案一样测量文本并搜索正确的文本数量。或者使用 TextView.getOffsetForPosition() 确定 TextView 中的最后一个字符,并在下一页从下一个字符开始。
    猜你喜欢
    • 2020-04-22
    • 2010-09-14
    • 2016-04-06
    • 1970-01-01
    • 2012-07-07
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    相关资源
    最近更新 更多