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」は横幅を広げてダイアログを表示するボタンです。