2012年4月25日水曜日

Dialog

メッセージを表示するためにAlertDialogクラスや、進捗状況を示すProgressDialogクラス(STYLE_SPINNER/STYLE_HORIZONTAL)を使いました。日付や時刻を選択するDatePickerDialogクラスやTimePickerDialogクラスも使いましたね。

これらはDialogクラスを継承した派生クラスです。今回はDialogクラスを使ってメッセージを表示します。

まず、メイン画面です。

main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    >
    <Button
        android:id="@+id/open_dialog_btn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Open Dialog"
        />
</LinearLayout>
ボタンをひとつ用意しています。

2012年4月18日水曜日

Activityの呼び出し(4)

アクティビティに値を渡す方法は前回紹介しましたので、今回はその逆、呼び出したアクティビティから値を受け取る方法を紹介します。

呼び出し元は、前々回の「Activityの呼び出し(2)」と同じく、startActivityForResult()とonActivityResult()を使います。

いつもとは順番が違いますが、まず呼び出される側のソースから。

SubActivity.java
package jp.co.triware.samples.ActivityTest4a;

import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class SubActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sub);

        Intent intent = getIntent();
        String pkg = getPackageName();
        String buf = intent.getStringExtra(pkg + ".input");
        EditText et = (EditText)findViewById(R.id.text_et);
        et.setText(buf);

        Button btnClose = (Button)findViewById(R.id.close_btn);
        btnClose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EditText et = (EditText)findViewById(R.id.text_et);
                String buf = et.getText().toString();
                Intent intent = new Intent();
                String pkg = getPackageName();
                intent.putExtra(pkg + ".return", buf);
                setResult(RESULT_OK, intent);
                finish();
            }
        });
    }
}

2012年4月11日水曜日

Activityの呼び出し(3)

アクティビティを呼び出したり、アクティビティから戻り値を取得する方法は、前回までに説明しました。
今回は、呼び出した先のアクティビティに値を渡す方法を紹介します。

値を渡すには、インテント(のインスタンス)に値をセットしてstartActivity()やstartActivityForResult()を呼び出します。インテントに値をセットする方法は、putExtra()メソッドに数値や文字列、配列等を、キーワードと共に指定します。

以下は、テキストを入力して、それを別のアクティビティで表示するサンプルです。

ActivityTest3aActivity.java
package jp.co.triware.samples.ActivityTest3a;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class ActivityTest3aActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btnOpen = (Button)findViewById(R.id.open_btn);
        btnOpen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EditText et = (EditText)findViewById(R.id.text_et);
                String buf = et.getText().toString();
                Intent intent = new Intent();
                intent.setClass(getApplicationContext(), SubActivity.class);
                String pkg = getPackageName();
                intent.putExtra(pkg + ".input", buf);
                startActivity(intent);
            }
        });
    }
}

2012年4月4日水曜日

Activityの呼び出し(2)

アクティビティを呼び出すにはstartActivity()メソッドを使いました。これは単純にアクティビティを呼び出すだけのものでした。
呼び出した先のアクティビティが終了した状況、例えば一通りの処理が完了して終了したのか、キャンセルして終了したのかを知りたい時は、startActivityForResult()メソッドを使います。

ActivityTest2aActivity.java
package jp.co.triware.samples.ActivityTest2a;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class ActivityTest2aActivity extends Activity {
    private static final String TAG = "MainActivity";

    private static final int REQUEST_SUB_ACTIVITY = 1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btnOpen = (Button)findViewById(R.id.open_btn);
        btnOpen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "OPEN button clicked!");
                Intent intent = new Intent();
                intent.setClass(getApplicationContext(), SubActivity.class);
                startActivityForResult(intent, REQUEST_SUB_ACTIVITY);
                Log.d(TAG, "after startActivityForResult()");
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_SUB_ACTIVITY) {
            String buf = "Unknown";
            switch (resultCode) {
            case RESULT_OK:
                buf = "OK";
                break;
            case RESULT_CANCELED:
                buf = "Cancel";
                break;
            default:
                break;
            }
            Log.d(TAG, "onActivityResult: " + buf);
            Toast.makeText(getApplicationContext(), buf, Toast.LENGTH_LONG).show();
        }
    }
}

2012年3月28日水曜日

Activityの呼び出し(1)

これまでのサンプルは1つのアクティビティ(画面)を使ったものばかりでした。今回はアクティビティを切り替えてみます。

まずは単純にアクティビティを切り替えるだけ。データの受け渡し等は考慮しないパターンです。Intentクラスでどのアクティビティを呼ぶか設定して、startActivity()メソッドでそのアクティビティを呼び出します。

ActivityTest1aActivity.java
package jp.co.triware.samples.ActivityTest1a;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class ActivityTest1aActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btnOpen = (Button)findViewById(R.id.open_btn);
        btnOpen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setClass(getApplicationContext(), SubActivity.class);
                startActivity(intent);
            }
        });
    }
}

2012年3月19日月曜日

TableLayout

前回のシステム情報はログ出力で確認しましたので、デバッガがないと確認できませんでした。これを画面に表示させてみましょう。
これまで表示系のサンプルはLinearLayoutを使ってきましたが、表のようなものは「TableLayout」を使うと便利です。

実行結果
Radioの行の列同士がくっついてしまいましたが、これはマージンやパディングを指定していないので、表示領域いっぱいに書いてしまうとこうなります。この辺りの対策方法はまた別途。

黄色の行はクラス名を表示するということで、2つの列を結合して、目立つように色も変更しました。それ以外は各行は2列、右の列は折りたたんで全体を表示するようにしています。

では、まずレイアウトファイルをどう記述するか見てみましょう。

2012年3月8日木曜日

システム情報

前々回、APIレベルやOSのバージョンの話をしましたので、今回はOSのシステム情報(システムのビルド情報)を取得する方法について書いてみます。

システム情報はBuildクラスを参照します。Build.VERSIONクラスでは、OSバージョンやAPIレベルを取得できます。バージョンによってフィールド(プロパティ)が追加されていたり、フィールドの代わりにメソッドを使うことが推奨されています。手元の端末のバージョンに応じて、使えるフィールドだけ参照すればいいのですがそれでは汎用的ではありません。いつもはプロジェクトの設定はAndroid 2.1以降で使えるようにしていますが、それではAndroid 2.2や4.0で追加されたものが使えませんので、今回はどのバージョンでも動くようにビルドします。

Androidプロジェクトの設定
プロジェクト名:BuildInfoTest1
ビルドターゲット:Android 4.0
アプリケーション名:BuildInfoTest1
パッケージ名:jp.co.triware.samples.BuildInfoTest1
アクティビティーの作成:BuildInfoTest1Activity
最小SDKバージョン:1
ビルドターゲットにAndroid 4.0を、最小SDKバージョンには1を指定しています。最小SDKバージョンを指定しないとビルドターゲットで指定したバージョン以降(今回であれば、API Level 14、Android 4.0以降)でしか動かなくなりますのでご注意を。