ページ

2011/08/24

Android PreferenceScreenのタイトルバーをカスタマイズする

|
Androidの設定画面では、PreferenceScreenをクリックすると次の階層の設定画面に進みます。
これはActivityのように思えますが、実際にはダイアログが表示されています。

このタイトル部分のスタイルを変えようと思ったのですが、最初の画面だけが変更され、PreferenceScreenで遷移した先の画面のタイトルバーを変えられず、苦労したので記録しておきます。
結論から言うと、PreferenceScreenのタイトルバーはカスタマイズできず、同じような見た目・挙動になる別の方法をとりました。

まず該当部分をカスタマイズできるのか、Androidのソースコードを見てみたところ、android.preference.PreferenceScreenに以下のような記述がありました。
private void showDialog(Bundle state) {
    Context context = getContext();
    if (mListView != null) {
        mListView.setAdapter(null);
    }
    mListView = new ListView(context);
    bind(mListView);

    // Set the title bar if title is available, else no title bar
    final CharSequence title = getTitle();
    Dialog dialog = mDialog = new Dialog(context, TextUtils.isEmpty(title)
            ? com.android.internal.R.style.Theme_NoTitleBar
            : com.android.internal.R.style.Theme);
    dialog.setContentView(mListView);
    if (!TextUtils.isEmpty(title)) {
        dialog.setTitle(title);
    }
    dialog.setOnDismissListener(this);
    if (state != null) {
        dialog.onRestoreInstanceState(state);
    }

    // Add the screen to the list of preferences screens opened as dialogs
    getPreferenceManager().addPreferencesScreen(dialog);
    
    dialog.show();
}

2011/08/19

WindowsでRails開発するなら…

|
Ruby on Railsの開発をWindowsでしようとすると、速度の遅さが気になります。
railsコマンドを使う度に数分間待たされたりして、生産性に関わる遅さです。
加えて、コマンドライン操作をすることが多いですが使えるものが限られていて、grepするためにCygwinを使っていて、ではCygwinに切り替えられないかと思うとRubyのバージョンが古い…という状況です。

まず以下のサイトなどを参考にさせていただきました。
http://tobysoft.net/wiki/index.php?Ruby%2FWindows%A4%C7Ruby%A4%AC%C3%D9%A4%A4%B7%EF
http://d.hatena.ne.jp/miau/20110404/1301916045

coLinuxを試そうと思いましたが、使っているWindows7のPCではうまくできず、別の方法を探しました。
(もう少し詳しく調べればできたかもしれませんが、64bitマシンにはインストールできないとエラーが出てしまいました。)

デュアルブートにする手もありますが、普段はWindowsで、Railsを使うときだけLinuxにしたい、と思っていたので候補から外しました。

そこではじめて試したのが、VMware Playerです。
Linuxディストリビューションは、使ってみたいと思っていたUbuntuにしました。
下記から日本語Remix CDのisoファイルをダウンロードして使いました。
http://www.ubuntulinux.jp/products/JA-Localized/download

インストールには下記の冒頭部分を参考にさせていただきました。
http://blogs.itmedia.co.jp/kichi/2010/05/ubuntu-1004vmwa.html

デフォルトから変えているのはメモリのサイズで、「仮想マシンの設定」の「メモリ」の部分を1024MBにしています。

その結果ですが、同じマシンとは思えないほど快適になりました。
(同じ問題を抱えている方にとってはこの言葉だけで十分な気がするのでこれ以上書きません。)
好みや慣れもあると思いますが、vim、zsh、screenを入れればかなり生産性が上がります。

Railsだけでなく、全般をUbuntuでやれないか(移行できないか)調べてみたいと思います。

2011/08/06

Herokuへのpushに失敗する

|
Ruby on Railsの話題です。

Gemfileに修正を加えたのですが、
Herokuにpushできなくなってしまいました。
Gemfile.lockを削除してbundle installし直すなど試しましたが上手く行かず…

環境は以下です。
(どこまで書けば役に立つでしょうか。。)
  • Windows7
  • Git-Bash(MINGW32)
  • ruby 1.9.2p290 (2011-07-09) [i386-mingw32]
  • Bundler version 1.0.15

上手く行ったのは以下でした。
ruby on rails - Why won't Heroku accept my Gemfile.lock in Windows? - StackOverflow

2011/06/11

SAStruts ボタンのラベル

|
急にSAStrutsです。

JSPに日本語を直接書かず、プロパティファイルに集約することを考えました。

普通のラベルなどは<bean:message>を使うことで簡単にできましたが、ボタンのラベルに適用することができず少し手こずりました。
タグの属性にタグを使いたい時、EL式を定義するか新しいタグを作るかと思ってしまいますが
ちゃんと用意されていました。
結果的にはSAStruts(s:submit)の新しいやり方でなくStrutsのときから用意されていたやり方(html:submit)でした。

プロパティ(application_ja.properties):

labels.login_id=ログインID

普通のラベル表示:
<bean:message key="labels.login_id" />

ボタンに適用(NG):
<s:submit value="<bean:message key="labels.login_id" />" />

ボタンに適用(OK):
<s:submit><bean:message key="labels.login_id" /></s:submit>

ボタンに適用(OK):
<html:submit><bean:message key="labels.login_id" /></html:submit>

2011/06/05

Android DBアクセスなどを簡略化するフレームワーク

|
AndroidでのO/Rマッピングなどをやってくれるフレームワークのようなものを作ってみました。
既にどこかにあるのかもしれませんが、まぁそれでも良いです。

Androidのライブラリ/フレームワークの場合、R.javaを含んでいるとどうしても
プロジェクトとしてソースコードが見える状態で組み込まないといけないようなので、
オープンソースプロジェクトとして作りました。
fastroid

まだごくわずかなことしかできないので、これから拡張していきたいと思います。
とりあえず、以下のことができます。
・画面から入力値をとってくる
・入力チェックする(必須チェックのみ)
・SELECT/INSERT/UPDATE/DELETEする

SELECTに関しては、JOINできるようにしたいと思っていますが
まだ特定条件でしかできません。

SQLite用のクラスをそのまま使って書くと、大したテーブル操作をしていなくても
ごちゃごちゃしてきます。
これが大分解消されるはずです。
…というのがよく分かるサンプルプロジェクトや説明書を
作らないといけないですね。

2011/05/21

Android Preferenceの内容が他の項目に変わる

|
カスタマイズしたPreferenceを作りました。
しばらく画面内に1つしかそのPreferenceを使っていなかったのですが、
数を増やしたところおかしなことになりました。

増やしたもののうち、Dependencyを設定しているカスタムPreferenceがあるのですが
依存先のチェックボックスを操作したところ
そのカスタムPreferenceと他のカスタムPreferenceが入れ替わる現象が起こりました。
さらに、カスタムPreferenceをタップしてダイアログを開き、
OKで閉じても他の項目と表示が入れ替わってしまいます。
しかし、他の項目と思ってタップすると、開くダイアログは入れ替わり前の内容です。

Preferenceの一覧表示だけがおかしい?と見当をつけて調べたところ、
原因はonBindView()にありました。

2011/05/05

Android CheckStyle設定

|
AndroidプロジェクトでのCheckStyle設定についてです。

Android Open Source Projectのコードスタイルでは、フィールド名はmから開始する、
などのルールがあります。
Code Style Guidelines for Contributors

これはコントリビューター向けのものではありますが、
自分のアプリの書くコードもなるべくこれに沿っていた方が見やすいかなと思っています。

# 多くはCode Completeにあるような推奨されるor避けるべき書き方の話なので
# Android特有のルールというのは実は少ないかもしれません。

そこでCheckStyleでチェックしようとしたのですが、ちょっと苦労したので載せておきます。
Android用のCheckStyle設定を公開してくださっている方がいます。
Checkstyle for Android

でもこれ、一部間違いがあって動きませんでした。