今天看Google Android SDK 開發範例大全 2到這本書的03-04的置換TextView文字 – CharSequence資料型態與Resource ID應用這節,你可以在http://book.51cto.com/art/200907/140344.htm看到簡體版的文章!
程式碼我就不貼了,我今天學習的重點在於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的使用,有時只有簡短的說明,似乎還是不夠的說。