2011年10月25日火曜日

進捗その3

ううむ、中々進みません。。。 取りあえず現在のところこんな感じ。

1.接続画面

まず接続先登録で、接続先のPCのアドレス、ポートを登録します。 すると、真ん中に登録したものが出るので、それをタップすると接続が開始されます。 接続先PCに別途作成したサーバプログラムを起動しておく必要があります。

2.接続先PCの表示

2.1.ファイルリスト表示

PCに接続すると、サーバ側で設定したデフォルトディレクトリが表示されます。 対応する画像ファイルをタップすると、アプリ内のビューワで画像が閲覧できます。 ちなみに上部のパスを直接編集して移動もできます。

2.2.圧縮ファイルの表示

対応する圧縮ファイル(ZIP/RAR)をタップすると、中身のファイルが閲覧できます。 ここで、2.1.と同じように画像ファイルをタップすると、そのまま画像が閲覧可能です。

ちなみに、自作した専用サーバを使う理由はこの為です。 sambaとかcifsとか扱うJavaのjcifsってライブラリを使えば、ファイルリスト表示とかダウンロード/アップロードは可能ですが、 圧縮ファイルを一旦ローカルにダウンロードしないと閲覧することができません。 ZipFileクラスのコンストラクタが、Fileクラスとかローカルパスしか受け付けないのでしょうがないです。 ので作成したサーバプログラムでは、この辺の処理をサーバ側で行って、その結果を返却してくれます。

2.3.ファイルリストのフィルタ

左上のPCっぽいアイコンをタップすると、虫眼鏡マークに切り替わるので ここで文字を入力して、右のボタンをタップすると、ファイルリスト内の要素をフィルタリングできます。

2.4.ファイルメニュー

リストの要素を長押しでメニューが表示され、他のアプリで開くことができます。 候補に出るアプリは、 1.接続画面でチラッと見えた設定に、拡張子とコンテントタイプの対応設定があるので そっから候補が選出されます。 他のアプリで開く場合、接続先PCのファイルは、アプリ用のディレクトリに一時ファイルとしてダウンロードしてから 開かれるのでPDFとかも開くことが可能です。

3.ローカル(Android)内の表示

右下にあるAndroidっぽいボタンと、PCっぽいボタンで 接続先PCの表示とAndroidの表示を切り替えることができます。 操作感は2.接続先PC と同じ感じです。

4.ローカルと接続先PC

4.1.デュアル表示

右下のアイコンの切り替え方によっては、 左右にローカルと接続先PCを表示することができます。

4.2.アップロード/ダウンロード

デュアル表示されている場合、メニューにアップロード/ダウンロードがでてきます。 これを選択すると、現在表示されているディレクトリに選択したファイルがコピーされます。

5.音楽ファイル再生

ファイルリストの音楽ファイルをタップすると、音楽ファイルが再生されます。自前で作成したプレーヤーです。 このとき、同ディレクトリ内の他の音楽ファイルも一緒にプレイリストに入り、連続再生されます。

取りあえずこんな感じになってます。ネットワーク先のPCのZIP/RARを直で閲覧できるので、結構使えてます。 ユーザ認証とか暗号化とかしていないので超ノーガードですが、まぁ、ローカル内で使うにはいいか、って感じになってるので後回し。

2011年10月2日日曜日

EditableなSpinner

1つ前の投稿で作成した拡張子とContent-TypeのDBを 利用するためにこんな↓感じの画面を加えました。  

ここから、新しく追加、変更を設定するダイアログで、 直接入力が可能なSpinnerを作ってみようと思いました。

で、できたのがコレ↓


ちょっと画像ではわかりにくいですね。
作成方法はSpinnerに設定するアダプタに対して

作成時、EditTextのレイアウトを食わせる
setDropDownViewResourceでテキストのレイアウトを設定する

な感じの操作をする。
具体的にはこんな感じ。

    //Spinnerの設定
    Spinner spn = (Spinner)inputView.findViewById(id.spinnerType);

    //Spinnerに設定するアダプタのレイアウトをEditTextのレイアウトで作成する
    //指定している [dialog_spinner_layout]はホントにEditTextだけのレイアウト
    ArrayAdapter adp = ArrayAdapter.createFromResource(parentAct.getApplicationContext(),
            R.array.MimeTypeArray,R.layout.dialog_spinner_layout);

    //ドロップダウンのレイアウトをTextView?のレイアウトで作成する
    // android.R.layout.simple_dropdown_item_1line はandroid側で定義済みのレイアウト
    // 普通にTextViewを指定するとドロップダウンで表示されたものがはみ出ることがある
    adp.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);

    spn.setAdapter(adp);

取りあえず一応できました。
が、細かいところの設定が色々難しい。

初期値として、EditTextの文字列を変更させようかと思ったのですが、どうやっても初期化時に、EditTextが取得できない。
表示後なら、
spinner.getSelectedView();
でEditTextを取得できるのですが。。。

やっぱり素直にAutoCompleteTextViewクラスで作成するべき、というのが今回の結論でした。