Androidのボタン

android-button.png

ボタン

XMLファイル

<Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
 
            android:background="@android:color/black"
            android:textColor="@android:color/white">
</Button>

ボタンを部品として登録

public class MainActivity extends Activity implements OnClickListener{
super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mButton=(Button)findViewById(R.id.button1);
        mButton.setOnClickListener(this);

注意
  • setOnClickListenerは必ずsetContentViewしてから書くこと。じゃないとエラーになる。

クリックした時の動作の実装の仕方

implements OnClickListenerする

ボタンが複数ある場合はv.getId()で分岐するといい。
複数個implementsしたい場合はカンマで区切る。

public class MainActivity extends Activity implements OnClickListener{
super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mButton=(Button)findViewById(R.id.button1);
        mButton.setOnClickListener(this);
 
..............
    @Override
    public void onClick(View v) {
 
        switch(v.getId()) {
        case R.id.button1:
            break;
        case R.id.button2:
            break;
        }
    }
}

匿名関数の利用

コードが見づらいし、1kB分のメモリを余計に消費するらしい。

mButton=(Button)findViewById(R.id.button1);
mOk.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {
                Log.d(TAG,"pushed!");
                }});
import android.view.View.OnClickListener;
class MiffyActivity extends Activity implements OnClickListener{
 @Override protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);
 
        Button button = new Button(this);
        button.setOnClickListener(this);//これないとだめ
    }
public void onClick(View v) {
    switch(v.getId()){
    case R.id.button_ok:
        setContentView(R.layout.main);
        break;
    }
}

遭遇したエラー

MmsConfig.loadMmsSettings mms_config.xml missing

setContentView(R.layout.activity_main);
をする前に、setOnClickListenerするとエラーになる。
何回も実行していると次のエラーメッセージになることもある

08-22 15:19:35.565: E/AndroidRuntime(16572): FATAL EXCEPTION: main
08-22 15:19:35.565: E/AndroidRuntime(16572): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myfirstapp/com.example.myfirstapp.MainActivity}: java.lang.NullPointerException
08-22 15:19:35.565: E/AndroidRuntime(16572):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
08-22 15:19:35.565: E/AndroidRuntime(16572):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
08-22 15:19:35.565: E/AndroidRuntime(16572):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
08-22 15:19:35.565: E/AndroidRuntime(16572):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
08-22 15:19:35.565: E/AndroidRuntime(16572):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-22 15:19:35.565: E/AndroidRuntime(16572):     at android.os.Looper.loop(Looper.java:137)
08-22 15:19:35.565: E/AndroidRuntime(16572):     at android.app.ActivityThread.main(ActivityThread.java:5103)
08-22 15:19:35.565: E/AndroidRuntime(16572):     at java.lang.reflect.Method.invokeNative(Native Method)
08-22 15:19:35.565: E/AndroidRuntime(16572):     at java.lang.reflect.Method.invoke(Method.java:525)
08-22 15:19:35.565: E/AndroidRuntime(16572):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
08-22 15:19:35.565: E/AndroidRuntime(16572):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-22 15:19:35.565: E/AndroidRuntime(16572):     at dalvik.system.NativeStart.main(Native Method)
08-22 15:19:35.565: E/AndroidRuntime(16572): Caused by: java.lang.NullPointerException
08-22 15:19:35.565: E/AndroidRuntime(16572):     at com.example.myfirstapp.MainActivity.onCreate(MainActivity.java:18)
08-22 15:19:35.565: E/AndroidRuntime(16572):     at android.app.Activity.performCreate(Activity.java:5133)
08-22 15:19:35.565: E/AndroidRuntime(16572):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
08-22 15:19:35.565: E/AndroidRuntime(16572):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
08-22 15:19:35.565: E/AndroidRuntime(16572):     ... 11 more
Bibliography
1. MatrialDesign..tooltips….絵のボタンをつけたらツールチップを載せよう

button

サポートサイト Wikidot.com button