今天看Google Android SDK 开发范例大全 2到这本书的03-04的置换TextView文字 – CharSequence资料型态与Resource ID应用这节,你可以在http://book.51cto.com/art/200907/140344.htm看到简体版的文章!
[adsense] [/adsense]
程式码我就不贴了,我今天学习的重点在于CharSequence资料型态跟getString方法,我另外搜寻一下说明来看看。
CharSequence可以参阅CharSequence类、AssetManager类、Context类、Resource类的基本应这篇是简体文,看得有点头痛,转成繁体修饰一下给各位瞧瞧。
CharSequence资料型态
这是一个介面,代表的是一个有序字元集合,这个介面包含的方法有:charAt(int index)、toString()、length()、subSequence(int start,int end)。
这里需要说的一点就是,对于一个抽象类别或者是介面类别,不能使用new来进行赋值,但是可以通过以下的方式来进行实体的建构:
CharSequence cs=”hello”;
但是不能这样来建构:
CharSequence cs=new CharSequence(“hello”);
下面来看看一个例子:
TextView tv; //声明一个TextView类别的变数tv
CharSequence cs; //声明一个CharSequence类别的变数cs
String str; //声明一个字串类别的str变数
cs=getText(R.string.styled_text); //其实这里使用的this.getText()方法,即指定上下文的方法
tv=(TextView)findViewById(R.id.styled_text); //通过给定的id将tv与对应的组件联系起来
tv.setText(cs); //使用这句程式码来设置tv的显示内容
str=getString(R.string.styled_text);
tv=(TextView)findViewById(R.id.plain_text);
tv.setText(str);
Context context=this; //这里使用了Context类别的变数context,指定为当前上下文
Resources res=context.getResources(); //定义一个Resources类别的变数res,并给它赋值
cs=res.getText(R.string.styled_text); //获得R类别中指定变数的值
tv=(TextView)findViewById(R.id.styled_text); //同上
tv.setText(cs); //设置值
下面来看看如何在Android应用程式中访问文件应用程式包中的资源
AssetManager类别,即管理资产类别,这个类别为访问当前应用程式的资产文件提供了入口。
这个类的别方法有:open (String filename,int accessMode)使用一个精确的访问模式来打开当前套件的一个资产,返回输入流,即由此读取了这个套件的资产的内容。要注意的是,这里所说的资产是放置在assets目录下的文件资产。
其中accessmode的值可以为:ACCESS_BUFFER,ACCESS_RANDOM,ACCESS_STREAMING,ACCESS_UNKNOWN其中的一个。
下面给出一个实体:
InputStream is=getAssets().open(String filename);//从指定的filename文件中读取内容,并将其放入到InputStream类型的is变数中
int size=is.available(); //获取流的长度
byte[] buffer=new byte[size]; //定义流长度的字节数组
is.read(buffer); //将流中的内容放到buffer数组中
is.close();
String text=new String(buffer);
TextView tv=(TextView)findViewById(R.id.text);
tv.setText(text); //同上
上面展示了CharSequence类别,Context类别,Resource类别,AssetManager类别的使用实例,如此一来,你就可以去写自己的这几个类别的实体了,继续吧!
这样应该比较清晰了吧,所以我们可以用CharSequence str_2 = getString(R.string.str_2);,看起来这个CharSequence可以跟String字串互换吧。
那getString这个函法呢?你可以看到这个方法需要汇入android.app.Activity,而这个类别继承自ContextThemeWrapper,并且实作ComponentCallbacks KeyEvent.Callback LayoutInflater.Factory View.OnCreateContextMenuListener Window.Callback。
你会看到getString是定义在android.content.Context类别中,这个类别又是android.app.Activity的祖字辈的类别,就可以了解其使用是‘Return a localized string from the application’s package’s default string table.’,传回的是final String。
透过这样的手册查询跟案例的查询,可以帮助我们更加地了解3-4的使用,有时只有简短的说明,似乎还是不够的说。