TextView.append在追加时放慢速度

时间:2014-12-04 10:39:28

标签: android

我正在尝试生成一个全屏TextView,自动为其添加随机二进制数。我写了这段代码:

Button button;
TextView textView;
Random rand;

private static final char[] ALPHA_NUMERIC_STRING = "01".toCharArray();

public PlaceholderFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_main, container,false);

    rand = new Random();
    textView = (TextView) rootView.findViewById(R.id.textView1);

    getActivity().runOnUiThread(new Runnable() {

        @Override
        public void run() {
            for (int i=0; i<1000; i++){
textView.append(String.valueOf(ALPHA_NUMERIC_STRING[rand.nextInt(ALPHA_NUMERIC_STRING.length)]));
            }
        }
    });

    button = (Button) rootView.findViewById(R.id.button1);
    button.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        new CountDownTimer(5000, 1) {

         public void onTick(long millisUntilFinished) {

 textView.append(String.valueOf(ALPHA_NUMERIC_STRING[rand.nextInt(ALPHA_NUMERIC_STRING.length)]));

                 final int scrollAmount = textView.getLayout().getLineTop(textView.getLineCount()) - textView.getHeight();
                // if there is no need to scroll, scrollAmount will be <=0
                if (scrollAmount > 0)
                    textView.scrollTo(0, scrollAmount);
                else
                    textView.scrollTo(0, 0);
             }

             public void onFinish() {
             textView.append("done!");
             }
          }.start();
        }
    });

    return rootView;
}

此代码工作正常。它在我的textView中写了一个随机字符串。问题来自于我的textView变得非常大。当它有很多字符时,当我添加一个新的字符并尝试追加它时,我注意到添加和重绘过程非常慢。

有谁知道为什么这会减慢?我怎样才能让它快速起作用?

PS:此代码位于Fragment

1 个答案:

答案 0 :(得分:0)

ScrollView 中使用 TextView ,以显示包含任何行数的消息。

我认为这对您的要求有好处。试试一次。

<TextView 
    android:id="@+id/tv"
    android:layout_width="fill_parent"
    android:layout_height="100px"
    android:textColor="#f00"
    android:textSize="25px"
    android:typeface="serif"
    android:textStyle="italic"/>

如果您想在需要时动态更改,如下所示:

TextView textarea = (TextView)findViewById(R.id.tv);  // tv is id in XML file for TextView
textarea.setTextSize(20);