スリー3の適当な記事たち

趣味のゲームやアニメ、及びプログラム関係を中心に気楽に書いていきます。

Androidでボタンを配置し入力をとる

Androidプログラミングの勉強にようやく進展がありましたのでご報告。
やっとボタンを配置できました(笑)
配置するのは簡単でしたがボタンイベントをとるのは大変でした。
一応メモ

見かけのボタンを配置

まずは配置したいActivityのxmlを開きPaletteからButtonを選び、配置したいところにドラッグアンドドロップする。
f:id:three3:20150623005504p:plain

その段階のxmlはこんな感じ。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        />
</RelativeLayout>

ボタンのxmlに対応するメソッドの情報を追記する

今回は対応する処理を書くメソッドをonClickという名前にした。
先ほどのxmlのbuttonのところに

android:onClick="onClick"

を追加する。
追加した結果。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button1"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:onClick="onClick"
        />
</RelativeLayout>

Javaで処理を書く

あとは対応するActivityのJavaファイルに処理を書いていきます。
今回はメインのメソッド(MainActivity)の中に直書きしました。

処理を書く前にメインのメソッド(今回はMainActivity)にちょっと変更。

public class MainActivity extends Activity

のところを

public class MainActivity extends Activity implements View.OnClickListener

に変更。
クリックリスナーを実装しますよということだと思います。(JavaGUIのプログラムを作ったのが数年前なのであんまり自身がないですが。)

そしてそのメソッドの中に

    public void onClick(View view){
        switch (view.getId()){
            case R.id.button:
                Toast.makeText(MainActivity.this,"ボタンが押されました",Toast.LENGTH_LONG).show();
                break;
        }
    }

を追加しました。
これが処理の本体ですね。
view.getId()でIDをみて、処理を切り替えています。
IDがbuttonだったら「ボタンが押されました」と表示されるようにしています。

というわけでMainActivity.javaの最終形がこちら

//デフォルトで設定されているもの
//import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

//デフォルト以外で追加したもの
import android.app.Activity;
import android.view.View;
import android.widget.Toast;


public class MainActivity extends Activity implements View.OnClickListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
    public void onClick(View view){
        switch (view.getId()){
            case R.id.button1:
                Toast.makeText(MainActivity.this,"ボタンが押されました",Toast.LENGTH_LONG).show();
                break;
        }

    }
}


というわけでボタンのイベントが取れました。
ここまで来るのに数日かかってしまいました(笑)
ここからはボタンとかを移動させる方法を調べていこうと思います。

では、また!