Android API之TextView.BufferType代码演示


TextView.BufferType并不是TextView的内部类,是一个枚举类型,设置有三个枚举值,分别为NORMAL,EDITABLE,SPANNAABLE。

对于EDITABLE,多用于在保存数据持久化,而SPANNAABLE则用于设置如TextView,EditText对象里的局部属性设置。而对于网络上关于EDITABLE之于NORMAL的差异,主要是说EDITABLE之后可以使用textview的append方法,有点类似String和StringBuffer的区别。但我在测试时发现,无论NORMAL还是EDITABLE,都可使用TextView的append方法。当然,我自身理解得也不透彻。对于EDITABLE数据持久化保存则使用了SharedPreferences,参考了Android的ApiDemos。

如下为代码范例:
(1)Activity类代码:

private TextView textView1,textView2,textView3;

    private EditText editText1,editText2;

   

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

      //main.xml中定义的UI组件

      textView1=(TextView)findViewById(R.id.textView1);

      textView2=(TextView)findViewById(R.id.textView2);

      textView3=(TextView)findViewById(R.id.textView3);

      editText1=(EditText)findViewById(R.id.editText1);

      editText2=(EditText)findViewById(R.id.editText2);

     

      //设置textView1TextView.BufferType.NORMAL

      textView1.setText(textView1.getText(),TextView.BufferType.NORMAL);

      textView1.append("  Append from textView1");

     

      //设置textView2TextView.BufferType.EDITABLE  

      textView2.setText(textView2.getText(), TextView.BufferType.EDITABLE);

      textView2.append("  Append from textView2");

     

      //设置textVIew3Text内容的起始和终止需处理字符的索引位置

      int start=(textView3.getText()).toString().indexOf('i');

      int end=(textView3.getText()).toString().indexOf('V');

     

     //设置textView3TextView.BufferType.SPANNABLE 

      textView3.setText(R.string.textView3, TextView.BufferType.SPANNABLE);

      Spannable span=(Spannable)textView3.getText();

      span.setSpan(newBackgroundColorSpan(Color.BLUE), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

      span.setSpan(newStyleSpan(Typeface.BOLD_ITALIC),start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

     

      //设置editText1TextView.BufferType.SPANNABLE

      editText1.setText(editText1.getText(),TextView.BufferType.SPANNABLE);

      Spannable span1=(Spannable)editText1.getText();

      span1.setSpan(newBackgroundColorSpan(Color.RED), 2, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

      

    }

 

    @Override

    protected void onResume() {

       // TODO Auto-generated method stub

       super.onResume();

      

       //修改editText2内容后,将通过SharedPreferences保存,保证程序重启后数据持久存在

       SharedPreferences prefs=getPreferences(0);

       String restore=prefs.getString("text", null);

       if(restore!=null){

          

           //设置editText2TextView.BufferType.EDITABLE

           editText2.setText(restore,TextView.BufferType.EDITABLE);

          

           intstart=prefs.getInt("start", -1);

           intend=prefs.getInt("end", -1);

          

           if(start !=-1 && end!=-1){

           editText2.setSelection(start, end);

           }

       }

    }

    @Override

    protected void onPause() {

       // TODO Auto-generated method stub

       super.onPause();

       SharedPreferences.Editor editor=getPreferences(0).edit();

       editor.putString("text", editText2.getText().toString());

       editor.putInt("start", editText2.getSelectionStart());

       editor.putInt("end", editText2.getSelectionEnd());

       editor.commit();

    }

  • 1
  • 2
  • 下一页

相关内容