▼Androidメモ▼
ボタンとダイアログ


ボタンとダイアログを利用するプログラムを作成する。




リソース
「res/drawable-nodpi」に「sample.png」を配置。

sample.png


ソースコード
ButtonEx.java
package net.npaka.buttonex;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.Bitmap.Config;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.StateListDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;

//ボタンとダイアログ
public class ButtonEx extends Activity implements
    View.OnClickListener {
    private final static int WC=LinearLayout.LayoutParams.WRAP_CONTENT;
    private EditText editText;
    
    //初期化
    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        
        //レイアウトの生成
        LinearLayout layout=new LinearLayout(this);
        layout.setBackgroundColor(Color.rgb(255,255,255));
        layout.setOrientation(LinearLayout.VERTICAL);
        setContentView(layout);            
        
        //ボタンの生成
        layout.addView(makeButton("ダイアログの表示","0"));
        layout.addView(makeButton("Yes/Noダイアログの表示","1"));
        layout.addView(makeButton("テキストダイアログの表示","2"));
        layout.addView(makeButton(res2bmp(this,R.drawable.sample),"3"));
    }
    
    //ボタンの生成
    private Button makeButton(String text,String tag) {
        Button button=new Button(this);
        button.setText(text);
        button.setTag(tag);
        button.setOnClickListener(this);
        button.setLayoutParams(new LinearLayout.LayoutParams(WC,WC));
        return button;
    }
    
    //イメージボタンの生成
    private ImageButton makeButton(Bitmap bmp,String tag) {
        Bitmap pressed=filterBmp(bmp,Color.LTGRAY,PorterDuff.Mode.MULTIPLY);
        ImageButton button=new ImageButton(this);
        button.setTag(tag);
        button.setOnClickListener(this);
        StateListDrawable drawables=new StateListDrawable();
        int statePressed=android.R.attr.state_pressed;
        drawables.addState(new int[]{statePressed},new BitmapDrawable(pressed));
        drawables.addState(new int[]{            },new BitmapDrawable(bmp));
        button.setBackgroundDrawable(drawables);
        button.setLayoutParams(new LinearLayout.LayoutParams(
            bmp.getWidth(),bmp.getHeight()));
        return button;
    }
    
    //ビットマップのフィルタ
    private static Bitmap filterBmp(Bitmap bmp,int color,PorterDuff.Mode mode) {
        int w=bmp.getWidth();
        int h=bmp.getHeight();
        Bitmap result=Bitmap.createBitmap(w,h,Config.ARGB_8888);
        Canvas c=new Canvas(result);
        BitmapDrawable bd=new BitmapDrawable(bmp);
        bd.setBounds(0,0,w,h);
        bd.setColorFilter(color,mode);
        bd.draw(c);
        return result;
    }    
    
    //リソース→ビットマップ
    public static Bitmap res2bmp(Context context,int resID) {
        return BitmapFactory.decodeResource(
            context.getResources(),resID);
    }
    
    //ダイアログの表示
    private static void showDialog(Context context,String title,String text) {
        AlertDialog.Builder ad=new AlertDialog.Builder(context);
        ad.setTitle(title);
        ad.setMessage(text);
        ad.setPositiveButton("OK",null);
        ad.show();
    }
    
    //Yes/Noダイアログの表示
    private static void showYesNoDialog(Context context,
        String title,String text,DialogInterface.OnClickListener listener) {
        AlertDialog.Builder ad=new AlertDialog.Builder(context);
        ad.setTitle(title);
        ad.setMessage(text);
        ad.setPositiveButton("Yes",listener);
        ad.setNegativeButton("No",listener);
        ad.create();
        ad.show();
    }    
    
    //テキストダイアログの表示
    private static void showTextDialog(Context context,
        String title,EditText editText,
        DialogInterface.OnClickListener listener) {  
        AlertDialog.Builder ad=new AlertDialog.Builder(context);
        ad.setTitle(title);  
        ad.setView(editText);  
        ad.setPositiveButton("OK",listener);  
        ad.show();  
    }  
    
    //ボタンクリック時に呼ばれる
    public void onClick(View view) {
        int tag=Integer.parseInt((String)view.getTag());
        if (tag==0) {
            showDialog(this,"ダイアログ","ボタンを押した");
        } else if (tag==1) {
            showYesNoDialog(this,"Yes/Noダイアログ","Yes/Noを選択",
                new DialogInterface.OnClickListener(){
                //クリック時に呼ばれる
                public void onClick(DialogInterface dialog,int which) {
                    if (which==DialogInterface.BUTTON_POSITIVE) {
                        showDialog(ButtonEx.this,"","YES");
                    } else if (which==DialogInterface.BUTTON_NEGATIVE) {
                        showDialog(ButtonEx.this,"","NO");
                    }
                }  
            });
        } else if (tag==2) {
            editText=new EditText(this); 
            showTextDialog(this,"テキストダイアログ",editText,
                new DialogInterface.OnClickListener(){
                //クリック時に呼ばれる
                public void onClick(DialogInterface dialog,int which) {
                    showDialog(ButtonEx.this,"",editText.getText().toString());
                }  
            });
        } else if (tag==3) {
            showDialog(this,"","イメージボタンを押した ");
        }
    }
}


−戻る−