zoukankan      html  css  js  c++  java
  • CharSequence的getText()与String的getString()(转)

    CharSequence的getText()与String的getString()『Android系列七』

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

     

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

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

     

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

     

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

     

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

    1. <LinearLayout xmlns: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 Main extends 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.     }  
    33. }  
    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 Main extends 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.     }  
    30. }  
    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的隐式转换,实验到此为止。

  • 相关阅读:
    Linux系统下公式编辑器KLatexFormula
    C++11 std::chrono库详解
    Direct Visual-Inertial Odometry with Stereo Cameras
    改变机器人的初始位姿,让机器人的初始位置不在地图的原点处
    ubuntu为文件添加可执行权限
    oracle的启动和停用
    orcale创建用户、授权
    手工配置oracle数据库
    MySQL存储过程详解 mysql 存储过程
    mysql的navicat执行存储过程
  • 原文地址:https://www.cnblogs.com/qingchen1984/p/3995283.html
Copyright © 2011-2022 走看看