2013年2月18日月曜日

Android備忘録:IMEを非表示にする


IMEを明示的に表示させたり非表示にさせたりしたいことが
あるのですが、その書き方をいつも忘れてしまいます。
IMEを非表示にしたい場合は、以下のように書けばOKです。メモメモ。

1
2
3
// IMEを非表示にする
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

2013年2月15日金曜日

Android備忘録:独自レイアウトのAlertDialog


Androidの標準AlertDialogでは、TitleやMessageなどを
配置することが出来るほか、setItem関数でEditTextなどの
Viewを配置することもできます。

もっと複雑なレイアウトを表示したい、
という要望に応えてかどうかは知りませんが、
独自のレイアウトファイル(xml)をAlertDialogに表示
することも可能です。
カスタマイズとかいう単語でもよく書かれていますね。

できることは覚えているのですが、実際にどう記述するのか
どうしても暗記できないので、ここに書いておきます。

1
2
3
4
5
6
7
8
final LayoutInflater layout = LayoutInflater.from(this);
final View customview = layout.inflate(R.layout.masterpass, null);

AlertDialog.Builder(this)
   .setTitle("Titleです")
   .setView(customView)
   .setPositiveButton("OK", null);
   .show();

れいあうといんふれいたー。
・・・どうしても覚えられません。

2013年2月11日月曜日

Android:keystoreファイルの国番号


Androidアプリに署名を付ける際、国番号を指定するところがあります。
keystoreファイルに C= の情報として記述されるものです。

日本の場合は何になるのでしょう?
 ・C=JP
 ・C= (日本の国番号)
どちらも2文字ですね。うーん、困りました。
Androidアプリ開発の書物を読むと、
上(C=JP)で書かれているものがいくつかありましたね。

私もひとまず上にしておきますか。。。

2013年2月10日日曜日

Android備忘録:DatePickerの罠


Androidアプリで日付指定できるアイテムとして、
DatePickerやDatePickerDialogがあります。
これらをカスタマイズした時にハマったことを書いておきます。

アプリは主に公開用ではなく自分用に作っているのですが、
使用者(妻)から次のような要望が来ました。

「日付を指定するときに、"+5日"や"-5日"ボタンが欲しい」

ふむ。設計としては、DatePickerを1つとボタン2つを配置して、
+5ボタンが押されたらDatePickerの日付を+5、
-5ボタンが押されたらDatePickerの日付を‐5だなと。
簡単だ。

コーディング。できた。うん、動作してる。

しかし、これだけでは次の操作時に意図した動きとなりませんでした。
 0.DatePickerの表示は、年/月/日の順に2013/02/06とする(例)
 1.「月」部分のEditTextをタップして、月を「05」と手入力する
 2.「+5ボタン」をタップする
 3.DatePickerの表示は、2013/02/11となる

おや、2013/05/11とはなりません。困りました。

■解決方法
色々とデバッグを重ねて分かった事なのですが、
DatePickerは、EditText部分をタップして数値を直接入力した場合、
「フォーカスがEditTextから外れた時に初めて」設定が反映されるようです。

このため、「+5ボタン」などが押されたときに、
DatePickerからフォーカスを外す処理を加えればOKです。

1
2
3
// DatePickerからフォーカスを外す
DatePicker dp = ****;
dp.clearFocus();

3日ほどハマりました。

2013年2月9日土曜日

Android備忘録:リソースR


Androidアプリ開発を初めて間もない頃、
「layoutに配置したButtonなどのidは、R.id.****で指定だ!」
と、何も考えずに覚えていました。

そんなままで開発を進めていくと、
ある日Buttonを取得しても、findViewByIdの戻り値が
null になる日が来ました。
その後、当然のごとく NullPointerException が来ます。

 えぇ!?ちゃんと Button btn = (Button)findViewById(R.id.button_hoge);
 と記述しているのになぜ??

…はい。見ているレイアウトファイルが違うからですね。
ActivityをextendsしているクラスのonCreateの中で、
例えば setContentView(R.layout.main); としているとします。

その後、main.xml ではない別のレイアウトファイルを
扱い、その中のButtonを使う場合には、ちゃんと別のレイアウトを指定して
findViewById しないといけません。以下、例です。

1
2
3
final LayoutInflater layout = LayoutInflater.from(this);
final View view = layout.inflate(R.layout.sub, null);
final Button btn = (Button) view.findViewById(R.id.button_hoge);

これで問題なく動作するはずです。
やはりちゃんと理解しないとダメですね。

2013年2月8日金曜日

Google Playに登録する画像イメージの用意


ストアにアプリを登録する際に、
32ビットのPNGを用意する必要がある場合があります。
(もしくはJPGでも良いのですが)

私はPCでちょっとしたイラストを描くのですが、
「32ビットのPNG」という表現を見たことがありませんでした。
(8ビットとか24ビットなら見たことあるんだけど)

Googleさんで調べてみたところ、
「24ビットのPNGに透過を加えたものが、24+8=32ビットのPNG」
ということが分かりました。

そういえば、8ビットのPNGの場合は透過色は1色しか指定できませんが、
24ビットの場合は透過のグラデーションも表現できますね。
何気ないことですが、改めて気が付きました。

Androidのデータベース


Androidでよく使われるDBとしてSQLiteがあります。
正直、私はAndroidアプリを開発するまでデータベースを
扱ったことはありませんでした。
(使う機会が無かったんですね)

そんな私でも、SQLiteは非常に簡単に扱うことが出来ました。
とは言いましても、まだ insert/update/delete くらいしか
使っていませんけれど。

簡単な使い方については他のサイト様が分かりやすく
記述していますので、食べず嫌いの方はお試しあれ。簡単です。

#コマンドの記述規則が間違っていると、
 これまた簡単にExceptionを履きます。

Android備忘録:Activity遷移時のアニメーション


現在開発中のアプリを触っていて、ふと
「画面遷移の時にアニメーション効果が欲しいな。
 iPhoneのアプリみたいに、スルっとした。」
と感じました。

Activityの画面遷移について調べてみると、
overridePendingTransition関数に辿り着きました。

startActivity関数(startActivityForResult関数、finish関数)の後で
記述すると、指定した引数のアニメーションを行うというものです。
非常にカンタン。

コーディングして、いざ実行してみると・・・
うまく動きません。なぜだ。

その日は諦めて寝たのですが、次の日に原因がはっきりしました。
Androidの表示設定の中で、アニメーションを切っていたんですね。
なんてこった。

Androidの表示設定にありますアニメーションの項目は、
 ・アニメーションなし
 ・一部のアニメーション
 ・すべてのアニメーション
の3つがあります。
この中で「すべてのアニメーション」を設定していないと
overridePendingTransition関数を書いても
何も変化はありません。ご注意ください。

2013年2月7日木曜日

Android備忘録:Preferencesに長い文字列を表示


AndroidのPreferencesに長い文字列を設定すると、
1行しか表示できない仕様のようなので、見切れてしまいます。
これを複数行の表示に対応させる方法を紹介します。

1.以下のサイトから、希望のAPIレベルのxmlファイルをコピーする。
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/frameworks/base/core/res/res/layout/preference.xml

2.res/layout/ 内に、例えば mypreference_layout.xml を作成する。

3.コピーした内容を mypreference_layout.xml にペーストする。

4.android:singleLine="true" を android:singleLine="false" に変更する。

5.使用するPreferenceのView(例えばEditTextPreference)のプロパティ値に
  android:layout="@layout/mypreference_layout" を指定する。

これで、長い文字列を title に設定した場合でも
複数行の表示となり、見切れることはありません。

Android備忘録:ListViewの背景を変更


ListViewの背景に画像を設定してビルドすると、
ListViewのスクロール時に、ListViewの背景が真っ黒になりました。
これは一体どうしたことでしょうか。
ただ背景を変更しただけなのに。

調べてみたところ、以下のようにソースで記述すれば良いようです。

final ListView listView = ***;
listView.setScrollingCacheEnabled(false);

原因は不明ですが、ひとまずこれで解決です。

Android備忘録:タイトルバーの非表示化


Activityをextendsしたクラスにおいて、
onCreate関数の中で以下を記述すればOKです。

requestWindowFeature(Window.FEATURE_NO_TITLE);

そろそろ暗記できてきたかも。

Android備忘録:10,000などの金額表示


Androidで数値を扱うアプリを作る際に、
10,000 など特別な表記をしたい場合があります。
以下のように記述すればOKです。

int money = 1234567890;
String pay = String.format("%,3d yen", money);
(pay の中身: 1,234,567,890 yen)

上記のように、3文字ずつのカンマ区切りになります。
これは便利ですね。

Android備忘録:開発環境の移行時


普段Eclipseを使ってAndroidアプリを作っているのですが、
プロジェクトをEclipse間で移動する時にはまった事を
備忘録として書いておきます。

普段はPC1で開発しており、たまにPC2でも開発をしています。
Visual Source Safeのようにサーバー上でプロジェクトを管理
できたら良いのですが、ローカルで作業をしています。

よってPC1で開発途中のものをPC2に持っていくには、
USBメモリやLAN、クラウド経由でプロジェクトファイルを
コピーし、PC2のEclipseにてプロジェクトのImportをする必要があります。

ここで問題が。
PC1で問題なくビルドできていたプロジェクトが、
PC2に移した途端に、ソースファイルに×マークが付いてしまいました。

エラー内容:
  The type java.lang.Object cannot be resolved.
  It is indirectly referenced from required .class files

解決方法としては、
ビルドパス(BuildPath)の設定を変更すればOKです。
「なに、ビルドパスの設定なんて変えていないぞ」
とは仰らず、ビルドパスの設定を見てみてください。

チェックがついていない項目があると思います。
これにチェックを付ければ問題解決です。

なぜこんな現象が発生するのかは判っていません。
うーん、なぜだ。

Android開発環境の構築が楽チンになった


一昔前では、Androidの開発環境を整えるのは
結構時間が必要だった記憶があります。
ですが、つい先日にAndroid開発環境を新規に構築することがあったのですが、
驚くほど楽チンになっていますね。

JDKはもともと入っていたので入れる必要がなかったのですが、
Android SDKやEclipseの環境が1つのインストーラーから
全て手に入るようになっておりビックリしました。

入手はこちらから。


普段使っている開発環境も再構築しようかな。

はじめに


はじめまして。28際の会社員です。
PCを初めて触ったのは小学校4年生のころ、
父親が会社で使っているノートPCを家に持ってきたことが
始まりでした。

そのちょっと後でWindows95が出ましたね。
そのくらいの時代感覚です。

小学校5年生で初めて自作PCを作り、
テレホーダイ、ISDN、ADSLを経て今に至ります。
htmlタグを直書きしてのウェブサイト作成は数年やっていたものの、
ブログというものは今の今まで書いたことはありませんでした。

mixiやfacebookなどは、時代経過とともに
ほどほどに触ってきてはいましたが。

今は趣味の1つとしてAndroidアプリを開発しているので
そこでハマった事や感じたこと、その他普段のことなどを
つらつらと書いていこうと思います。

よろしくお願いします。

2013年2月6日水曜日

作成

Google Developer登録で使用するために作成したブログです。
ひとまず初書き込みです。