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に。

0 件のコメント:

コメントを投稿