Androidアプリを作成したい人必見!!Androidアプリの基本動作はもちろんのこと、本には載っていない、調べても見つからない、ソースを修正するだけでは解決できない、アプリ開発者が直面する問題の解決方法についても記載していきます。 *基本的にはレイアウトファイル(xml)を使わないソースを載せております。
2013年2月21日木曜日
xmlで変数を管理-01(getResources(), getString, getInteger)
res/valueの中にxmlを作成すると、
configファイル感覚で変数を管理できます。
ソース内やレイアウトファイル、マニフェストファイルでも
共通で使えるので、覚えておいて損はないと思います。
今回はプロジェクト作成すると、
存在するstringsのファイル名を直刺ししていますが、
上記に記したように、valueフォルダにxmlファイルを作成すれば完成します。
■文字列型の取得
valueのstrings.xmlに下記を追記
<string name="test_string">Hello, World!!</string>
javaファイル
String sText = getResources().getString(R.string.test_string);
getResources()で自分のリソースを確認して、
string型で取得するのでgetString
R.はresフォルダーのR。←本当かあ!!
string型で宣言されているtest_string
を取得
■数字型の取得
valueのstrings.xmlに下記を追記
<integer name="test_integer">97</integer>
javaファイル
int iInt = getResources().getInteger(R.integer.test_integer);
String sInt = getResources().getString(R.integer.test_integer);
int型で取得するならgetIntege、
String型で取得するならgetString
と選べます。
■フォーマッター
valueのstrings.xmlに下記を追記
<string name="test_formater_s">Hi! %s</string>
javaファイル
String sText = getResources().getString(R.string.test_formater_s, "Mike");
フォーマッター(Formatter)について詳細はこちらを参照
↓
http://developer.android.com/intl/ja/reference/java/util/Formatter.html
簡単にザックリいうと、%sとか%dがカンマ区切りの文字に置換されるということです。
■サンプルソース
・java
package com.example.Package;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//レイアウトの作成
LinearLayout oLayout = new LinearLayout(getApplicationContext());
//レイアウトにパーツを上から順に設置する設定
oLayout.setOrientation(LinearLayout.VERTICAL);
//文字を見やすくするために背景を黒色に
oLayout.setBackgroundColor(Color.BLACK);
//レイアウトの設定
setContentView(oLayout);
//レイアウトパラム定数(縦横の長さの定数)の格納
int WC = ViewGroup.LayoutParams.WRAP_CONTENT;
int MP = ViewGroup.LayoutParams.MATCH_PARENT;
//レイアウトの横幅・縦幅を設定
LayoutParams oLayPar = new LinearLayout.LayoutParams(MP, 40);
String sText = getResources().getString(R.string.test_string);
int sInt = getResources().getInteger(R.integer.test_integer);
String sText2= getResources().getString(R.string.test_formater_s, "Mike");
String sText3= getResources().getString(R.string.test_formater_i, 3);
String sText4= getResources().getString(R.string.test_formater_ss, "Mike", "pen");
String sText5= getResources().getString(R.string.test_formater_si, "Mike", 2);
//テキストビューを作成して、取得した情報を出力
oLayout.addView(make_TextView(sText), oLayPar);
oLayout.addView(make_TextView(sInt), oLayPar);
oLayout.addView(make_TextView(sText2), oLayPar);
oLayout.addView(make_TextView(sText3), oLayPar);
oLayout.addView(make_TextView(sText4), oLayPar);
oLayout.addView(make_TextView(sText5), oLayPar);
}
//テキストビューの作成
private TextView make_TextView(String sMessage){
//テキストビューの生成
TextView tv = new TextView(getApplicationContext());
//メッセージの設定
tv.setText(sMessage);
return tv;
}
//テキストビューの作成(long型用)
private TextView make_TextView(long sMessage){
return make_TextView(String.valueOf(sMessage));
}
//テキストビューの作成(int型用)
private TextView make_TextView(int sMessage){
return make_TextView(String.valueOf(sMessage));
}
}
・strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="test_string">Hello, World!!</string>
<integer name="test_integer">97</integer>
<string name="test_formater_s">Hi! %s</string>
<string name="test_formater_i">%d個</string>
<string name="test_formater_ss">Hi! %1$s. Do you Have a %2$s ?</string>
<string name="test_formater_si">%1$Sは%2$d本のペンを持っています。</string>
</resources>
■実行結果
<string name="test_formater_ss">Hi! %1$s. Do you Have a %2$s ?</string>
フォーマッタの%1$sは第一引数に置換されますという意味で、%2$sは第2引数に
置換されちゃうという意味です。
また、%sを%Sと大文字にすると、今まで小さかったmikeが大きく成長します。MIKEに。
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿