ノンプログラマー・プログラミング・ガイド

ほぼ独学。もはやおっさんになりかかってからプログラミングの勉強開始。HTML、CSS、JavaScript、SQL、PHP、Javaがなんとなく解る。Joomla!とandroidで書いたプログラムを配布中。iPhoneアプリ作りたいからMacくれ(下さい)。

Androidさんで、文字列を取得するときは、ローカライズされたstrings.xmlを使うわけですが、この中でHTMLのタグを使えるっぽいです。使えるHTMLのタグは、限定的で文字の装飾だけだと思われます。たぶん。

文字列のスタイルで使えるタグ
  • <b> : 強調文字
  • <i> : 斜体文字
  • <u> : 下線文字

AndroidでHTMLのタグを使う


使い方は、HTMLのタグを打ち込むときと一緒。strings.xmlでこんな感じに書きます
<string name="styledText"><i>斜体文字</i><b>強調文字</b><u>下線文字</u></string>

 

タグの使い方

layoutの中から、呼び出すこともできるし、
 
        <TextView
            android:id="@+id/test"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/styledText" />

プログラムのActivity上からも呼び出せます。
getText(  R.string.styledText );
getTextと似たメソッドにgetStringがあるんですけど、getStringで呼び出した場合は、タグは、無視される模様。



 

Androidは、多言語化を前提としてフレームワークが組まれています。で、文字列のファイルは、言語毎にres/values/strings.xmlに入ってます。このstrings.xmlで定義した文字列を取得する方法は、Activity内であれば

 getString(int)
 もしくは、

 getText(int)
 
で、呼び出せます(Activity外で使いたい場合は、その外のクラスにactivityのContextを渡してやって、context.getString()で呼び出せます。)。intの部分は、strings.xmlで指定したnameの値を、R.string.STRING_NAMEで指定してやります。たとえば、strings.xmlで下記の一文を指定したばあい

<string name="unko">Big Unko</string>

getText(R.string.unko);
で、Big Unkoが呼び出されます。


多分、getStringとgetTextに違いはそんなに無いんんじゃないのかと思うんですけど、あえて、違いをあげるならば、

getString()のいいところ


getStringでは、 文字列の置き換えができます。たとえば、笑顔を評価するゲームアプリを作ってて、「あなたの評価は、10点でした」と表示させたい場合、10の部分は、それぞれの笑顔によって左右されると思います。で、そんな場合は、strings.xmlで

<string name="score">あなたの笑顔は、%1$s点でした</string>

まんまなんですけど、%1$sの部分が置き換えられる文字列です。getString()で呼び出すときに、引数に置き換えたい文字列を入れます。

getString(R.string.score, "10");

%1$sは、第一引数の文字列を指定してます。複数個の文字列を置き換えたい場合は、%2$sみたいに、%1の部分を%2にすればいいのかと。きっと引数は、何個でも大丈夫です。

たとえば、こんな感じでstrings.xmlを指定して
<string name="score2">%2$sさんの%3$sは、%1$s点でした</string>

引数にそれぞれの文字列を指定してやります
getString(R.string.score2, "10", "はやと", "ニヒルな笑み");

すると、きっと、「はやとさんのニヒルな笑みは、10点でした」って文字列が取得されるはず。


getText()のいいところ

これ、知らなかったんですけど、strings.xml内で<i>斜体文字</i>とかが使えるみたい。未検証(書いた→Androidの文字のスタイルにHTMLのタグを利用する)。






 

Androidで、アニメーションがあるgifをImageViewで表示させることはできません。で、アニメーションを含むgifを表示させるには、以下の方法があるみたいです。
  • android.graphics.Movieを使う
  • gifからBitmapを抜き出して表示させる
  • webViewを使って表示する

で、一番簡単そうなWebViewを使って、gifを表示させたいと思います!WebViewは重たいとか言ってるブログも見かけたので、アプリのスピードを気にする人にはお勧めしません。だけど、超簡単。

webviewを拡張したviewクラスを作成

public class GifWebView extends WebView {

	public GifWebView(Context context, String path) {
		super(context);
		loadUrl(path);
	}
}
これだけ!あとは、GifWebViewを作成するときに、表示したいgifのパスを渡してやればいいだけ!

きっとだいたいこんな感じ

LinearLayout target = (LinearLayout)findViewById(R.id.insertTarget);

//.gifが無いと表示してくれないみたいです
String path = "somewhere.gif";

//端末内のファイルを読み込む場合は、file:///をつけないといけないみたい
GifWebView gif = new GifWebView(this,  "file:///" + path);

//gifをインサート
target.addView(gif);

Activity内から呼び出しています。また、このActivityで使うレイアウトにidがinsertTargetのLinearLayoutを設置しています。


pathでは、gifが保存されている場所を指定してください。また、拡張子がついてないとgifとして読み込んでくれないみたいです。あと、Android端末内のファイルを指定する場合は、file:///をつけないといけないみたいです。gifがウェブ上のどこかにある場合は、http://でいいのではないかと勝手に思ってます。







 

このページのトップヘ