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. <TextView
  6. android:id="@+id/firstText"
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:text="" />
  10. <TextView
  11. android:id="@+id/secondText"
  12. android:layout_width="wrap_content"
  13. android:layout_height="wrap_content"
  14. android:text="" />
  15. </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. import android.os.Bundle;
  3. import android.widget.TextView;
  4. import android.app.Activity;
  5. public class Main extends Activity {
  6. @Override
  7. public void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.main);
  10. findViews();
  11. change();
  12. }
  13. private TextView firstText;
  14. private TextView secondText;
  15. private void findViews() {
  16. firstText = (TextView) findViewById(R.id.firstText);
  17. secondText = (TextView) findViewById(R.id.secondText);
  18. }
  19. private void change() {
  20. CharSequence chs = getText(R.string.demo);
  21. String str = getString(R.string.demo);
  22. firstText.setText(chs);
  23. secondText.setText(str);
  24. }
  25. }
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. import android.os.Bundle;
  3. import android.widget.TextView;
  4. import android.app.Activity;
  5. public class Main extends Activity {
  6. @Override
  7. public void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.main);
  10. findViews();
  11. change();
  12. }
  13. private TextView firstText;
  14. private void findViews() {
  15. firstText = (TextView) findViewById(R.id.firstText);
  16. }
  17. private void change() {
  18. CharSequence chs = getText(R.string.demo);
  19. String str = getString(R.string.demo);
  20. firstText.setText(chs + str);
  21. }
  22. }
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的隐式转换,实验到此为止。

CharSequence的getText()与String的getString()(转)的更多相关文章

  1. 0703-APP-Notification-statue-bar

    1.展示显示textTicker和仅仅有icon的两种情况:当參数showTicker为true时显示否则不显示 // In this sample, we'll use the same text ...

  2. 一个帖子学会Android开发四大组件

    来自:http://www.cnblogs.com/pepcod/archive/2013/02/11/2937403.html 这个文章主要是讲Android开发的四大组件,本文主要分为 一.Act ...

  3. Android Service学习之本地服务

    Service是在一段不定的时间运行在后台,不和用户交互应用组件.每个Service必须在manifest中 通过来声明.可以通过contect.startservice和contect.bindse ...

  4. 一天就学会Android开发四大组件

    这个文章主要是讲Android开发的四大组件,本文主要分为 一.Activity详解二.Service详解三.Broadcast Receiver详解四.Content Provider详解外加一个重 ...

  5. android显示通知栏Notification以及自定义Notification的View

    遇到的最大的问题是监听不到用户清除通知栏的广播.所以是不能监听到的. 自定义通知栏的View,然后service运行时更改notification的信息. /** * Show a notificat ...

  6. android 四大组件详解

    这个文章主要是讲Android开发的四大组件,本文主要分为 一.Activity详解二.Service详解三.Broadcast Receiver详解四.Content Provider详解外加一个重 ...

  7. 9-第一个app项目

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  8. 关于Android开发四大组件

    文章主要是讲Android开发的四大组件,本文主要分为 文章源自:http://www.cnblogs.com/pepcod/archive/2013/02/11/2937403.html 一.Act ...

  9. String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)

    本章主要介绍String和CharSequence的区别,以及它们的API详细使用方法. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/string01. ...

随机推荐

  1. iosiOStextView实现文字高度自适应

    跟为textView设置提示性文字一样   需要在textView的代理方法中实现如下 如有偏差  请谅解 定义UITextView,实现UITextViewDelegate: -(UITextVie ...

  2. windows做时间服务器,linux和windows时间同步

    找了很多的资料,都没有windows做时间服务,linux同步windows的时间的,最后自己找了一些软件,终于搞定了,写出来给大家共享,以免大家多走弯路 首先在http://www.meinberg ...

  3. Web开发人员不要错过的60款用户界面设计工具(上)

    Web开发大师们,干货再次来袭!小编为大家盘点了60款功能丰富类型各异的用户界面设计工具,本系列将以上中下三篇分别为大家呈现.今天盘点的这20款工具囊括了大量界面原型设计工具,有免费的在线原型工具,有 ...

  4. isset() 与 empty() 的区别

    PHP的isset()函数 一般用来检测变量是否设置 格式:bool isset ( mixed var [, mixed var [, ...]] ) 功能:检测变量是否设置 返回值: 若变量不存在 ...

  5. CentOS7 PostgreSQL 主从配置( 一)

    主库配置 pg_hba.conf host replication all 10.2.0.0/0 trust postgresql.conf listen_addresses = '*' max_wa ...

  6. js-call、apply

    这里主要就是做一些前人的总结,有时候会有自己的看法,首先把定义说一下 1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义 ...

  7. 笨方法学python--变量和命名

    1 =(单等号)和==(双等号)的区别 =用来赋值, ==用来判断是否相等 2 x = 100 在操作符2侧加空格,易读 3 打印时,进行字符串拼接 print "there are&quo ...

  8. selection与range笔记

    selection对象代表当前激活选中区,通常是高亮的文本块 创建选中区: 1.拖拽文本 2.脚本创建 cerateRange() 获取selection对象 IE     document.sele ...

  9. java基础增强

    Eclipse使用: java Compile配置的是java编译环境 java Build path配置的是java运行环境 运行环境的版本必须高于编译环境的版本.否则报错 工程上 右键--prop ...

  10. php 代码编写的格式

    1.代码标记 php程序可以使用<?php ....  ?> 或 <? ..... ?> 来界定php代码,在html页面中嵌入纯变量是,可以使用<?= $variabl ...