みかづきの色々

デバイス(スマホからキャンプ用品まで)とかプログラミングとか中心のいろいろ試験的なブログ。

Androidのリハビリ。

Androidを忘れそうなので、昔のサイトで作った Hello World みたいなのがちゃんと動くか試してみた。

NetBeans8 + NBAndroid で環境をさくっと作り、以下を書いてみる。
呼び出されると一秒後に適当なメッセージを表示し、以降、約二秒ごとにカウントアップしていくものらしい。

ほむがどうのと書いてあるのは、当時の時代の背景だろう。気にするな。

ちなみに動作させると、真っ黒な画面に「1匹のほむほむ」と書かれる。以降、二秒ごとに2匹、3匹と増えていく。ただそれだけの代物である。まぁ、「一定間隔で何かを動かす」のサンプルですね。

f:id:mikaduki99:20140716072736p:plain

で、終わる時はバックボタンを押す。すると以下のようになる。

f:id:mikaduki99:20140716072802p:plain

MainActivity.java

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity
{
    private boolean sunset = false; // trueになったら日没(プログラム終了)。
    private int count = 0;
    private final Context context = this;
    private final Handler handler = new Handler();
    //private TextView web = (TextView) findViewById(R.id.textView1); // ←ここで直接セットするとAndroidで例外になるぞ! onCreateでやれ
    private TextView web;
    private final Runnable showMessageTask = new Runnable() {
        @Override
        public void run() {
            if(sunset == false){
                web.setText(String.valueOf(++count) + "匹のほむほむ");
                handler.removeCallbacks(showMessageTask); // 自分自身を再呼び出しする前にコールバックを消しておこう。
                handler.postDelayed(showMessageTask, 2000);
            }else{ // fin.
                finish();
            }
        }
    };
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        web = (TextView) findViewById(R.id.textView1);
        handler.postDelayed(showMessageTask, 1000);
    }

    @Override
    public void onBackPressed() {
        new AlertDialog.Builder(MainActivity.this).setPositiveButton("終了",
                new DialogInterface.OnClickListener() {
            public void onClick(
                    DialogInterface dialog,
                    int which) {
                try {
                    count = -9999;
                    sunset = true;
                } catch (Error e) {
                }
                MainActivity.this.finish();
            }
        }).setNegativeButton("Cancel", null).setMessage("終了しますか??").show();
    }
}

Resources/layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView
    android:id="@+id/textView1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Hello World, MainActivity"
    />
</LinearLayout>

ここまでで動くんだけど、動かしたら気づくと思う。要は端末を回転させると、なんか初期に戻ってしまうのだ。

というわけで、固定にしてしまおう。
設定はManifest fileで、screenOrientの値を設定する。

  • 縦固定→ portrait
  • 横固定→ landscape
  • システムに従う→ unspecified

manifest file(AndroidManifest.xml)

<activity android:name="MainActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="portrait">

ちなみにプログラム側で固定するには、以下のように。

@Override
   public void onCreate(Bundle savedInstanceState)
   {
       super.onCreate(savedInstanceState);
       this.setRequestedOrientation((ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
       setContentView(R.layout.main);
   }

こんなところかな。
ちなみに参考にしたのは以下。