CharSequence的getText()与String的getString()

CharSequence与String都能用于定义字符串,但CharSequence的值是可读可写序列,而String的值是只读序列。

曾经在学习中碰见两种获取常量的方式:


        CharSequence chrs = getText(R.string.demo);

        String str = getString(R.string.demo);


        这两种方式有什么不同呢?一定要搞明白,开始实验:


        实验一:strings.xml中的相关代码<string name="demo">demo</string>


main.xml中用线性布局定义两个文本标签,分别使用两种方式获取demo的值,详细代码

  1. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" 
  2.     xmlns:tools="http://schemas.android.com/tools" 
  3.     android:layout_width="match_parent" 
  4.     android:layout_height="match_parent"> 
  5.  
  6.     <TextView 
  7.         android:id="@+id/firstText" 
  8.         android:layout_width="wrap_content" 
  9.         android:layout_height="wrap_content" 
  10.         android:text=""/> 
  11.  
  12.     <TextView 
  13.         android:id="@+id/secondText" 
  14.         android:layout_width="wrap_content" 
  15.         android:layout_height="wrap_content" 
  16.         android:text=""/> 
  17.  
  18. </LinearLayout> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/firstText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="" />

    <TextView
        android:id="@+id/secondText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="" />

</LinearLayout>

       注意android:text的值都是空的,下面继续看main.java是怎么处理的:

  1. package com.dy.study.firstbase; 
  2.  
  3. import android.os.Bundle; 
  4. import android.widget.TextView; 
  5. import android.app.Activity; 
  6.  
  7. public class Mainextends Activity { 
  8.  
  9.     @Override 
  10.     public void onCreate(Bundle savedInstanceState) { 
  11.         super.onCreate(savedInstanceState); 
  12.         setContentView(R.layout.main); 
  13.  
  14.         findViews(); 
  15.  
  16.         change(); 
  17.     } 
  18.  
  19.     private TextView firstText; 
  20.     private TextView secondText; 
  21.  
  22.     private void findViews() { 
  23.         firstText = (TextView) findViewById(R.id.firstText); 
  24.         secondText = (TextView) findViewById(R.id.secondText); 
  25.     } 
  26.  
  27.     private void change() { 
  28.         CharSequence chs = getText(R.string.demo); 
  29.         String str = getString(R.string.demo); 
  30.         firstText.setText(chs); 
  31.         secondText.setText(str); 
  32.     } 
package com.dy.study.firstbase;

import android.os.Bundle;
import android.widget.TextView;
import android.app.Activity;

public class Main extends Activity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		findViews();

		change();
	}

	private TextView firstText;
	private TextView secondText;

	private void findViews() {
		firstText = (TextView) findViewById(R.id.firstText);
		secondText = (TextView) findViewById(R.id.secondText);
	}

	private void change() {
		CharSequence chs = getText(R.string.demo);
		String str = getString(R.string.demo);
		firstText.setText(chs);
		secondText.setText(str);
	}
}
        好,看看实验一的结果:


        可以看到,两个值完全一样,怎么回事?难道这两种方式的效果时完全一样的吗?先不忙下结论,继续实验。


        实验二:把strings.xml中的那句相关代码改成<string name="demo"><b>demo</b></string>,仔细看,中间加了个<b></b>,然后其他都不改变,看结果:


       你看,前面那个标签变了,这说明CharSequence的getText()是获取格式化的常量值,而String的getString()是单单获取值,而舍去了格式化。

       就这么简单吗?可我又想了,如果把它们加起来,会是什么样子呢,继续实验。

       实验三:在实验二的基础上改下main.java的内容:

        main.java

  1. package com.dy.study.firstbase; 
  2.  
  3. import android.os.Bundle; 
  4. import android.widget.TextView; 
  5. import android.app.Activity; 
  6.  
  7. public class Mainextends Activity { 
  8.  
  9.     @Override 
  10.     public void onCreate(Bundle savedInstanceState) { 
  11.         super.onCreate(savedInstanceState); 
  12.         setContentView(R.layout.main); 
  13.  
  14.         findViews(); 
  15.  
  16.         change(); 
  17.     } 
  18.  
  19.     private TextView firstText; 
  20.  
  21.     private void findViews() { 
  22.         firstText = (TextView) findViewById(R.id.firstText); 
  23.     } 
  24.  
  25.     private void change() { 
  26.         CharSequence chs = getText(R.string.demo); 
  27.         String str = getString(R.string.demo); 
  28.         firstText.setText(chs + str); 
  29.     } 
package com.dy.study.firstbase;

import android.os.Bundle;
import android.widget.TextView;
import android.app.Activity;

public class Main extends Activity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		findViews();

		change();
	}

	private TextView firstText;

	private void findViews() {
		firstText = (TextView) findViewById(R.id.firstText);
	}

	private void change() {
		CharSequence chs = getText(R.string.demo);
		String str = getString(R.string.demo);
		firstText.setText(chs + str);
	}
}
        这里只让显示标签一的内容,猜想一下是不是一个粗一个细呢?看结果:


       被同化了,这让我想起了java的隐式转换,实验到此为止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值