AlertDialog内部に作成したボタンでダイアログは消せますか?

1,266 views
Skip to first unread message

K.Asano

unread,
Sep 7, 2012, 1:59:59 AM9/7/12
to android-gr...@googlegroups.com
またまた、初心者の質問です。ご教授いただければ幸いです。
PositiveButton,NeutralButton,NegativeButtonを利用せずに,
カスタムボタンを使ってダイアログを作成し、
そのボタンでPositiveButtonやNegativeButtonのようにダイアログを終了させたいのです。
ただし、これらの組み込みボタンの大きさがParamsなんかで変更することが簡単にできるのであれば無用なのです。
もし、簡単にできるのであれば、方法をご教授ください。

理由は、タブレットで指先に不自由な人に大きなボタンで操作性の向上を目指したいためです。

テストプログラムの一部の抜粋とlayoutは以下のようなものです。
ご指導よろしくお願いいたします。


 void dialog_d_btn(){
        // カスタムビューを設定
         AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyDialog); // 若干ボタンやタイトルなどが定義されています。無視で結構です。
        LayoutInflater inflater = LayoutInflater.from(this);
        final View counterView = inflater.inflate(R.layout.dialog, null);
        // アラーとダイアログ を生成
        final Button d_btn = (Button) counterView.findViewById(R.id.dis_miss);
        builder.setTitle("Test Dismiss")
        .setView(counterView);
        // 表示
        builder.create().show();       
         d_btn.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
              //soundTone();音をならします。
              //処理をします。
              //ここで消せるといいのですが?
            }
         });
 }


layout/dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/layout_root"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  android:padding="10dp">

  <Button
      android:id="@+id/dis_miss"
      android:layout_width="600dip"
      android:layout_height="400dip"
      android:layout_gravity="center"
      android:textSize="90dip"
      android:text="dismiss"
      />
</LinearLayout>

K.Asano

unread,
Sep 7, 2012, 3:19:59 AM9/7/12
to android-gr...@googlegroups.com
自己 Replayです。
以下のようにすればカスタムボタンで消えるのですが、結局フォーカスが外れれば消えるので、役に立ちませんでした。
だから、
     Button positiveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
     positiveButton.setLayoutParams(new LayoutParams(....));
   なんかで出来るのでしょうか。もう少しなのか、先が長いのかわかりません。


出来たけど、使えない。
   void dialog{

        // カスタムビューを設定
         AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyDialog);
        LayoutInflater inflater = LayoutInflater.from(this);
        final View counterView = inflater.inflate(R.layout.dialog_03, null);

        // アラーとダイアログ を生成
        final Button d_btn = (Button) counterView.findViewById(R.id.dis_miss);
        builder.setTitle("Test Dismiss")
       // 表示
       final AlertDialog dialog = builder.create();
       dialog.show();
         d_btn.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
              dialog.dismiss();
              soundTone();
            }
         });

yu kakizaki

unread,
Sep 7, 2012, 10:13:37 AM9/7/12
to android-gr...@googlegroups.com
 
こんばんは、かきざきです。   
 
AlertDialogのメソッドで、setCanceledOnTouchOutside(false)とすると
ダイアログ以外をタッチしても非表示にされなかったと思いますー。  
  
 

K.Asano

unread,
Sep 7, 2012, 11:14:19 AM9/7/12
to android-gr...@googlegroups.com
かきざきさん、こんばんは
たった今、ベッドの中でiPadでPostを見ることが出来ました。
そこで、慌てて飛び起きて、実行しましたら、仰せの通り解決いたしました。
ありがとうございます。
私の例では
daialog.setCanceledOnTouchOutside(false);
でした。
きちっと考えれば分かりそうだと思われるかもしれませんが、
おそらく、このメソッドに到着するのには相当な時間がかかった事と
思います。
以前、動的ボタン生成の時にはまった
        positiveButton.setLayoutParams(new LinearLayout.LayoutParams(.....));
などとしていましたが、解決できませんでした。

今回のご教授はいろんな事が同時に片づきますので特に嬉しいことでした。
また、分からないことが多々あると思います。今後ともよろしくお願い申し上げます。

yu kakizaki

unread,
Sep 7, 2012, 12:01:15 PM9/7/12
to android-gr...@googlegroups.com
いえいえー。お役に立てて何よりですー。

自分も以前、ProgressDialogではまったことがありまして。
ダイアログの外側をタッチするとキャンセルされたことになってしまって
あまりうまくなかったのです。

K.Asano

unread,
Sep 10, 2012, 1:03:03 AM9/10/12
to android-gr...@googlegroups.com
Youtube に今回のAlertDialogの実行したのをアップロードしました。
http://www.youtube.com/watch?v=DxhBFhzB69E&feature=youtu.be&a

Reply all
Reply to author
Forward
0 new messages