Text控件应用小收集

Text控件运用小收集
一、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);
    
      //设置textView1为TextView.BufferType.NORMAL
      textView1.setText(textView1.getText(),TextView.BufferType.NORMAL);
      textView1.append("  Append from textView1");
    
      //设置textView2为TextView.BufferType.EDITABLE 
      textView2.setText(textView2.getText(), TextView.BufferType.EDITABLE);
      textView2.append("  Append from textView2");
    
      //设置textVIew3中Text内容的起始和终止需处理字符的索引位置
      int start=(textView3.getText()).toString().indexOf('i');
      int end=(textView3.getText()).toString().indexOf('V');
    
     //设置textView3为TextView.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);
    
      //设置editText1为TextView.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){
         
           //设置editText2为TextView.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();
    }

(2)main.xml主要部分
  <TextView
    android:id="@+id/textView1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="This is the TextView.BufferType-NORMAL"
    />
  
     <TextView
    android:id="@+id/textView2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="This is the TextView.BufferType-EDITABLE"
    />
  
    <TextView
    android:id="@+id/textView3"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="This is the TextView.BufferType-SPANNABLE"
    />
  
   <EditText
    android:id="@+id/editText1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="This is EditText for TextView.BufferType-SPANNABLE"
    android:freezesText="true">
    <requestFocus />
    </EditText>
    <EditText
    android:id="@+id/editText2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="This is EditText for TextView.BufferType-EDITABLE"
    android:freezesText="true">
    <requestFocus />
    </EditText>