2012年6月11日月曜日

ステータスバーを消す

アンテナやバッテリーのアイコンなどが表示されているエリアはステータスバーといいます。

通常はこういった情報も表示させておきたいものですが、タイトルバー同様、デザインの関係で非表示にしたい場合もあるでしょう。

今回はステータスバーを非表示にしてみます。

StatusBarTest1aActivity.java
package jp.co.triware.samples.StatusBarTest1a;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Button;

public class StatusBarTest1aActivity extends Activity {
    private boolean mbNoStatusBar = false;

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

        Button btn = (Button)findViewById(R.id.toggle_btn);
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                mbNoStatusBar = mbNoStatusBar ? false : true;
                if (mbNoStatusBar == true) {
                    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
                } else {
                    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
                }
            }
        });
    }
}

2012年5月28日月曜日

タイトルバーを消す

アプリのタイトルを表示しているところをタイトルバーといいます。

通常はタイトルバーを表示していますが、画面のデザイン性や、少しでも情報を多く表示したい場合には、タイトルバーを消したいと思うこともあるでしょう。

今回はそのタイトルバーを消すサンプルです。

TitleBarTest1aActivity.java
package jp.co.triware.samples.TitleBarTest1a;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.Toast;

public class TitleBarTest1aActivity extends Activity {
    private static volatile boolean mbNoTitleBar = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (mbNoTitleBar == true) {
            requestWindowFeature(Window.FEATURE_NO_TITLE);
        }
        setContentView(R.layout.main);

        Button btn = (Button)findViewById(R.id.toggle_btn);
        btn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                mbNoTitleBar = mbNoTitleBar ? false : true;
                Toast.makeText(getApplicationContext(),
                    "TitleBar will be " + (mbNoTitleBar ? "hidden" : "shown"),
                    Toast.LENGTH_SHORT).show();
            }
        });
    }
}

2012年5月14日月曜日

StringとStringBuffer

ログを出力する場合など、文字列を処理しますね。その際、どのように文字列を扱っているでしょうか。Stringで"+"を使って連結するケースが多いのではないでしょうか。理由はカンタンだから、でしょうね。これまでのサンプルもそうしてきました。

でも、そういう文字列処理自体があまりなかったり、実行される回数が少なければ特に問題は発生しないかもしれませんが、実はStringは効率がよくありません。効率よく処理するにはStringBufferを使います。

以下のサンプルでは、文字列の連結を200回繰り返す処理を、StringとStringBufferで実装しています。かかる時間とGC(ガベージ・コレクション)がどれだけ動くか比較してみてください。

なお、文字列連結前にSystem.gc()を2回呼び出していますが、これはなくても構いません。GCが動こうとしたタイミングでサンプルを実行すると、意図しないGCのログが出るので先に実行させています。

2012年5月1日火曜日

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/normal_dialog_btn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Normal Dialog"
        />
    <Button
        android:id="@+id/wide_dialog_btn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Wide Dialog"
    />
</LinearLayout>
ボタンを2つ用意しています。「Normal Dialog」は普通にダイアログを表示して、「Wide Dialog」は横幅を広げてダイアログを表示するボタンです。

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);
            }
        });
    }
}