Android Tips #17 Android SDK の便利な Util クラス

catch
204件のシェア(すこし話題の記事)

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

Android SDK には、面倒であったり、冗長になりがちな処理を行なってくれる Util クラスが数多く存在します。 意外と知られていない便利な Util クラスもあります。
ということで、Androidアプリを開発する上でぜひ使っていきたい便利な Util クラスをまとめました。

TextUtils

http://developer.android.com/reference/android/text/TextUtils.html

String の Util クラスです。
isEmpty は String の null と length = 0 をまとめてチェックしてくれます。このあたりはよく必要になるんじゃないでしょうか。その他にも、2つの String が同じ値か比較する equals や、 String を区切る split など、標準的な String を加工するメソッドがあります。

使用例

String msg = "こんにちは";
boolean isEmpty = TextUtils.isEmpty(msg);
Log.d("sample", String.valueOf(isEmpty)); // false

Linkify

http://developer.android.com/reference/android/text/util/Linkify.html

String 内のURL・電話番号・メールアドレス・地図情報にリンクを付けてくれる Util クラスです。
マッチした文字列にリンクを付ける(例えば、サイト名にリンクを貼る)などということもできます。

使用例

TextView view = (TextView) findViewById(R.id.text_view);
String text = "クラスメソッドのWebサイトは http://classmethod.jp です。";
view.setText(text);
Linkify.addLinks(view, Linkify.ALL);

実行結果

DateUtils

http://developer.android.com/reference/android/text/format/DateUtils.html

日付を任意の形式にフォーマットしてくれる Util クラスです。
フラグを設定するだけで、年や日付、時間などの形式にフォーマットすることができます。また、ある時間とある時間の期間を示す文字列(「9月30日〜10月1日」などのような文字列)を指定形式にフォーマットすることもできます。

使用例

Time now = new Time();
now.setToNow();
long millis = now.toMillis(false);
String date = DateUtils.formatDateTime(this, millis, DateUtils.FORMAT_SHOW_DATE);
String time = DateUtils.formatDateTime(this, millis, DateUtils.FORMAT_SHOW_TIME);
String weekDay = DateUtils.formatDateTime(this, millis, DateUtils.FORMAT_SHOW_WEEKDAY);
Log.d(TAG, date); // 10月1日
Log.d(TAG, time); // 12:04
Log.d(TAG, weekDay); // 月

Formatter

http://developer.android.com/reference/android/text/format/Formatter.html

ある値を任意の形式にフォーマットしてくれる Util クラスです。
現在のところは long 値をファイルサイズ(B, KB, MB,...)の形式に変換するメソッドのみのようです(IPアドレスを変換してくれるメソッドがありましたが、現在は非推奨)。

使用例

String size = Formatter.formatFileSize(getApplicationContext(), 128000);
Log.d(size, size); // 125KB

Pair

http://developer.android.com/reference/android/util/Pair.html

2つの値を保持することができる Util クラスです。
例えばサイト名とURLをひとつのオブジェクトで保持する、などのような使いかたができます。型も自由に決めることができるのでとても便利なクラスです。

使用例

Pair<String, String> pair = Pair.create("クラスメソッド株式会社", "開発部");
Log.d(TAG, pair.first); // クラスメソッド株式会社
Log.d(TAG, pair.second); // 開発部

SparseArray

http://developer.android.com/reference/android/util/SparseArray.html

HashMap の代用として使うことができる、キーが int 型に限定された Util クラスです。
キーがプリミティブ型であるため、HashMap より処理が高速になります( put 処理に限定すると HashMap のほうが速い場合もあるようです )。キーが int 型の配列を作りたい場合は SparseArray クラスを使うようにしましょう。
また、その他に LongSparseArraySparseIntArraySparseBooleanArray というクラスもあるので用途に応じて使用しましょう。

使用例

SparseArray<String> array = new SparseArray<String>();
array.append(0, "クラスメソッド株式会社");
array.append(1, "アノテーション株式会社");
Log.d(TAG, array.get(0)); // クラスメソッド株式会社

FloatMath

http://developer.android.com/reference/android/util/FloatMath.html

float で各種計算を処理するメソッドの Util クラスです。
java.lang.Math の sin() や cos() などの計算に float を使用すると、 double への変換が走ってしまいますが、 android.util.FloatMath は内部で float のみ使用して計算しているので、java.lang.Math クラスより処理が高速です。メソッドの数はあまり多くありませんが、描画の計算などに使用されるような最低限のメソッドはあります。 float にしたいのであれば android.util.FloatMath のメソッドを使用するようにしましょう。

使用例

float value = 1.5f;
// 切り上げ
FloatMath.floor(value);

Color

http://developer.android.com/reference/android/graphics/Color.html

色を取り扱う Util クラスです。
RGB値とHEX値を相互変換するメソッドなどが含まれています。 Color.RED や Color.BLACK など色の定数値もいくつかあるので、 描画処理の実装で仮に色をつけておきたいときなどに重宝します。

使用例

// HEX値からARGBを取得
int value = 0xff008080;
int a = Color.alpha(value);
int r = Color.red(value);
int g = Color.green(value);
int b = Color.blue(value);
Log.d(TAG, "alpha:" + a); // 255
Log.d(TAG, "red:" + r); // 0
Log.d(TAG, "green:" + g); // 128
Log.d(TAG, "blue:" + b); //128

ThumbnailUtils

http://developer.android.com/reference/android/media/ThumbnailUtils.html

サムネイルを生成する Util クラスです。
動画データのパスからサムネイルを生成するメソッドと、Bitmap から任意の width, height にリサイズするメソッドがあります。リサイズするメソッドはメモリ不足が発生しないようにソースとなるオブジェクトをメモリ解放するか否かのフラグをセットすることができます。

使用例

Bitmap bitmap = ThumbnailUtils.extractThumbnail(source, 200, 200, ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
ImageView view = (ImageView) findViewById(R.id.image_view);
view.setImageBitmap(bitmap);

実行結果

まとめ

他にもいろいろと Util クラスは存在しますが、便利そうなものだけ紹介しました。このような Util クラスは知っておかないと無駄な処理やクラスを増やしてしまう可能性があります。使えそうなところは Util 系のクラスに処理を任せ、ソースコードをできるだけシンプルにまとめるようにしたいですね。

  • http://twitter.com/shikajiro しかじろう【渡辺慎二郎】

    すごくためになりました!

  • http://www.facebook.com/people/Yuki-Suwa/1269908313 Yuki Suwa

    しかじろうさん
    コメントいただきありがとうございます!
    ぜひ実装時の参考にしていただければと思います。