web-dev-qa-db-ja.com

アンドロイドでカスタムダイアログボックスを作成する方法?

以下のようなカスタムダイアログボックスを作成したい

enter image description here

私は以下のことを試しました。

  1. AlertDialog.Builder のサブクラスを作成し、カスタムのタイトルとカスタムのコンテンツビューを使用してそれを使用しましたが、結果が予想どおりではありませんでした。

  2. 別の試みとして、 DialogFragment をサブクラス化してonCreateDialog内のダイアログをカスタマイズするという方法がありましたが、期待どおりにはなりませんでした。

  3. それから私は普通の Dialog クラスを使ってみました。結果は予想通りではありませんでした。

3つのケースすべてで問題は、タイトルビューを見落としたときにダイアログのサイズが予想どおりにならず、タイトルビューを使用したときにコンテンツビューの周囲に太い境界線が表示されることです。今、私は私の頭の中に2つの質問があります...

  1. どうすればそれを達成できますか?私はすでにたくさんのことを試してきたので、直接的な答えはもっと感謝されるでしょう。

  2. Androidアプリでエラーまたは警告ダイアログを表示するための最良の方法は何ですか?

_ edit _ Android Developer Documentation ユーザーにエラー/警告メッセージを表示するには、DialogFragmentsまたはDialogのいずれかを使用することをお勧めします。しかしある時点で彼らは言う...

ヒント:カスタムダイアログが必要な場合は、Dialog APIを使用する代わりに、Activityをダイアログとして表示することもできます。単純にアクティビティを作成し、そのテーマをmanifest要素でTheme.Holo.Dialogに設定します。

その意味は何ですか?エラーメッセージを表示するためだけにアクティビティを使用するのは、それほどやりすぎではありませんか。

306
Amit

ここで私は次のような簡単なダイアログを作成しました:

Dialog Box

custom_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="80dp"
    Android:background="#3E80B4"
    Android:orientation="vertical" >

    <TextView
        Android:id="@+id/txt_dia"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center"
        Android:layout_margin="10dp"
        Android:text="Do you realy want to exit ?"
        Android:textColor="@Android:color/white"
        Android:textSize="15dp"
        Android:textStyle="bold"/>


    <LinearLayout
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center"
        Android:background="#3E80B4"
        Android:orientation="horizontal" >

        <Button
            Android:id="@+id/btn_yes"
            Android:layout_width="100dp"
            Android:layout_height="30dp"
            Android:background="@Android:color/white"
            Android:clickable="true"
            Android:text="Yes"
            Android:textColor="#5DBCD2"
            Android:textStyle="bold" />

        <Button
            Android:id="@+id/btn_no"
            Android:layout_width="100dp"
            Android:layout_height="30dp"
            Android:layout_marginLeft="5dp"
            Android:background="@Android:color/white"
            Android:clickable="true"
            Android:text="No"
            Android:textColor="#5DBCD2"
            Android:textStyle="bold" />
    </LinearLayout>

</LinearLayout>

extends Dialogimplements OnClickListenerが必要です

public class CustomDialogClass extends Dialog implements
    Android.view.View.OnClickListener {

  public Activity c;
  public Dialog d;
  public Button yes, no;

  public CustomDialogClass(Activity a) {
    super(a);
    // TODO Auto-generated constructor stub
    this.c = a;
  }

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.custom_dialog);
    yes = (Button) findViewById(R.id.btn_yes);
    no = (Button) findViewById(R.id.btn_no);
    yes.setOnClickListener(this);
    no.setOnClickListener(this);

  }

  @Override
  public void onClick(View v) {
    switch (v.getId()) {
    case R.id.btn_yes:
      c.finish();
      break;
    case R.id.btn_no:
      dismiss();
      break;
    default:
      break;
    }
    dismiss();
  }
}

ダイアログを呼び出す方法?

R.id.TXT_Exit:
CustomDialogClass cdd=new CustomDialogClass(Values.this);
cdd.show();  

更新情報

久しぶりに私の友人の一人が私に透明な背景を持つ曲線形状のダイアログを作るように頼んだ。だから、ここで私はそれを実装しました。

enter image description here

曲がった形を作るためには、以下のように別のcurve_shap.XMLを作成する必要があります、

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >

    <solid Android:color="#000000" />

    <stroke
        Android:width="2dp"
        Android:color="#ffffff" />

    <corners
        Android:bottomLeftRadius="20dp"
        Android:bottomRightRadius="20dp"
        Android:topLeftRadius="20dp"
        Android:topRightRadius="20dp" />

</shape>

さて、メインビューのLayoutにこのcurve_shap.XMLを追加します。私の場合はLinearLayoutを使いました

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="fill_parent"
        Android:layout_height="80dp"
        Android:background="@drawable/curve_shap"
        Android:orientation="vertical" >
...
</LinearLayout>

どうやってこれを呼ぶの?

CustomDialogClass cdd = new CustomDialogClass(MainActivity.this);
cdd.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
cdd.show();

私はそれがあなたのために働くことを願っています。

496
Chintan Khetiya

これはダイアログの例です。xmlで作成してください。

enter image description here

次のコードxmlは単なる例です。デザインまたはビューはここで実装されます。

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="#ffffffff">

<ImageView
    Android:layout_width="match_parent"
    Android:layout_height="120dp"
    Android:id="@+id/a"
    Android:gravity="center"
    Android:background="#DA5F6A"
    Android:src="@drawable/dialog_cross"
    Android:scaleType="fitCenter" />

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="TEXTO"
    Android:id="@+id/text_dialog"
    Android:layout_below="@+id/a"
    Android:layout_marginTop="20dp"
    Android:layout_marginLeft="4dp"
    Android:layout_marginRight="4dp"
    Android:layout_marginBottom="20dp"
    Android:textSize="18sp"
    Android:textColor="#ff000000"
    Android:layout_centerHorizontal="true"
    Android:gravity="center_horizontal" />

<Button
    Android:layout_width="wrap_content"
    Android:layout_height="30dp"
    Android:text="OK"
    Android:id="@+id/btn_dialog"
    Android:gravity="center_vertical|center_horizontal"
    Android:layout_below="@+id/text_dialog"
    Android:layout_marginBottom="20dp"
    Android:background="@drawable/btn_flat_red_selector"
    Android:layout_centerHorizontal="true"
    Android:textColor="#ffffffff" />

</RelativeLayout>

このコード行はdrawableのリソースです。

Android:src="@drawable/dialog_cross"
Android:background="@drawable/btn_flat_red_selector"

dialogを拡張するクラスを作成することもできます。これも次のようなものです。

public class ViewDialog {

    public void showDialog(Activity activity, String msg){
        final Dialog dialog = new Dialog(activity);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setCancelable(false);
        dialog.setContentView(R.layout.dialog);

        TextView text = (TextView) dialog.findViewById(R.id.text_dialog);
        text.setText(msg);

        Button dialogButton = (Button) dialog.findViewById(R.id.btn_dialog);
        dialogButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
            }
        });

        dialog.show();

    }
}

最後に、たとえばあなたのアクティビティの中での呼び出しの形式です。

ViewDialog alert = new ViewDialog();
alert.showDialog(getActivity(), "Error de conexión al servidor");

私はあなたのためにその仕事を願っています。

158
Alex Zaraos

これを行うもう1つの簡単な方法。

ステップ1)適切なIDのレイアウトを作成します。

ステップ2)あなたが望むところならどこでも以下のコードを使用してください。

LayoutInflater factory = LayoutInflater.from(this);
final View deleteDialogView = factory.inflate(R.layout.mylayout, null);
final AlertDialog deleteDialog = new AlertDialog.Builder(this).create();
deleteDialog.setView(deleteDialogView);
deleteDialogView.findViewById(R.id.yes).setOnClickListener(new OnClickListener() {    
    @Override
    public void onClick(View v) {
        //your business logic 
        deleteDialog.dismiss();
    }
});
deleteDialogView.findViewById(R.id.no).setOnClickListener(new OnClickListener() {    
    @Override
    public void onClick(View v) {
        deleteDialog.dismiss();    
    }
});

deleteDialog.show();
80
Swapnil

以下のテーマをvalues -> style.xmlに追加してください

<style name="Theme_Dialog" parent="Android:Theme.Light">
     <item name="Android:windowNoTitle">true</item>
     <item name="Android:windowBackground">@Android:color/transparent</item>
</style>

このテーマをonCreateDialogメソッドで次のように使用します。

Dialog dialog = new Dialog(FlightBookActivity.this,R.style.Theme_Dialog);

タイトルバーを含むダイアログレイアウトをxmlファイルに定義し、そのxmlファイルを次のように設定します。

dialog.setContentView(R.layout.your_dialog_layout);
33
Vineet Shukla

単純な最初のクラスを作成する

 public class ViewDialog {

        public void showDialog(Activity activity, String msg){
            final Dialog dialog = new Dialog(activity);
            dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            dialog.setCancelable(false);
            dialog.setContentView(R.layout.custom_dialogbox_otp);
            dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Android.graphics.Color.TRANSPARENT));

            TextView text = (TextView) dialog.findViewById(R.id.txt_file_path);
            text.setText(msg);

            Button dialogBtn_cancel = (Button) dialog.findViewById(R.id.btn_cancel);
            dialogBtn_cancel.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
//                    Toast.makeText(getApplicationContext(),"Cancel" ,Toast.LENGTH_SHORT).show();
                    dialog.dismiss();
                }
            });

            Button dialogBtn_okay = (Button) dialog.findViewById(R.id.btn_okay);
            dialogBtn_okay.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
//                    Toast.makeText(getApplicationContext(),"Okay" ,Toast.LENGTH_SHORT).show();
                    dialog.cancel();
                }
            });

            dialog.show();
        }
    }

次にcustom_dialogbox_otpを作成します

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="330dp"
    Android:layout_height="160dp"
    Android:background="#00555555"
    Android:orientation="vertical"
    Android:padding="5dp"
    Android:weightSum="100">

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:background="@drawable/round_layout_otp"
        Android:orientation="vertical"
        Android:padding="7dp"
        Android:weightSum="100">

        <LinearLayout
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:layout_weight="60"
            Android:orientation="horizontal"
            Android:weightSum="100">

            <LinearLayout
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:layout_weight="80"
                Android:gravity="center">

                <ImageView
                    Android:id="@+id/a"
                    Android:layout_width="50dp"
                    Android:layout_height="50dp"
                    Android:background="#DA5F6A"
                    Android:gravity="center"
                    Android:scaleType="fitCenter"
                    Android:src="@mipmap/infoonetwo" />

            </LinearLayout>

            <LinearLayout
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:layout_weight="20">

                <TextView
                    Android:id="@+id/txt_file_path"
                    Android:layout_width="wrap_content"
                    Android:layout_height="wrap_content"
                    Android:layout_gravity="center"
                    Android:singleLine="true"
                    Android:text="TEXTO"
                    Android:textColor="#FFFFFF"
                    Android:textSize="17sp"
                    Android:textStyle="bold" />
            </LinearLayout>
        </LinearLayout>

        <LinearLayout
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:layout_weight="40"
            Android:background="@drawable/round_layout_white_otp"
            Android:orientation="vertical"
            Android:weightSum="100">

            <LinearLayout
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:layout_gravity="center"
                Android:layout_weight="60">

                <TextView
                    Android:layout_width="match_parent"
                    Android:layout_height="match_parent"
                    Android:gravity="center"
                    Android:text="Do you wanna Exit..?"
                    Android:textColor="#ff000000"
                    Android:textSize="15dp"
                    Android:textStyle="bold" />
            </LinearLayout>

            <LinearLayout
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:layout_weight="40"
                Android:orientation="horizontal"
                Android:weightSum="100">


                <LinearLayout
                    Android:layout_width="match_parent"
                    Android:layout_height="match_parent"
                    Android:layout_marginRight="30dp"
                    Android:layout_weight="50"
                    Android:gravity="center|right">

                    <Button
                        Android:id="@+id/btn_cancel"
                        Android:layout_width="80dp"
                        Android:layout_height="25dp"
                        Android:background="@drawable/round_button"
                        Android:gravity="center"
                        Android:text="CANCEL"
                        Android:textSize="13dp"
                        Android:textStyle="bold"
                        Android:textColor="#ffffffff" />

                </LinearLayout>

                <LinearLayout
                    Android:layout_width="match_parent"
                    Android:layout_height="match_parent"
                    Android:layout_marginLeft="30dp"
                    Android:layout_weight="50"
                    Android:gravity="center|left">


                    <Button
                        Android:id="@+id/btn_okay"
                        Android:layout_width="80dp"
                        Android:layout_height="25dp"
                        Android:background="@drawable/round_button"
                        Android:text="OKAY"
                        Android:textSize="13dp"
                        Android:textStyle="bold"
                        Android:textColor="#ffffffff" />

                </LinearLayout>
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

それからあなたのdrawableでxmlファイルの下に作成します。
round_layout_white_otp.xmlの

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="rectangle" >

    <!-- <corners Android:radius="10dp" /> -->
    <corners
        Android:bottomLeftRadius="18dp"
        Android:bottomRightRadius="16dp"
        Android:topLeftRadius="38dp"
        Android:topRightRadius="36dp" />
    <solid Android:color="#C0C0C0" />
    </shape>

round_layout_otp.xmlの場合

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="rectangle" >

    <!-- <corners Android:radius="10dp" /> -->
    <corners
        Android:bottomLeftRadius="18dp"
        Android:bottomRightRadius="16dp"
        Android:topLeftRadius="38dp"
        Android:topRightRadius="38dp" />
    <solid Android:color="#DA5F6A" />
    </shape>

round_button

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="rectangle" >

    <!-- <corners Android:radius="10dp" /> -->
    <corners
        Android:bottomLeftRadius="7dp"
        Android:bottomRightRadius="7dp"
        Android:topLeftRadius="7dp"
        Android:topRightRadius="7dp" />
    <solid Android:color="#06A19E" />
    </shape>

最後に下のコードを使ってダイアログを視覚化します:)

ViewDialog alert = new ViewDialog();
        alert.showDialog(ReceivingOTPRegActivity.this, "OTP has been sent to your Mail ");

あなたの出力:)

enter image description here

19
Agilanbu

カスタムダイアログボックスを作成する最も簡単な方法:

  1. ダイアログを初期化して表示する:

     ViewDialog alertDialoge = new ViewDialog();
     alertDialoge.showDialog(getActivity(), "PUT DIALOG TITLE");
    
  2. メソッドを作成します。

    public class ViewDialog {
    
      public void showDialog(Activity activity, String msg) {
    
        final Dialog dialog = new Dialog(activity);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setCancelable(false);
        dialog.setContentView(R.layout.custom_dialoge_feedback);
    
        TextView text = (TextView) dialog.findViewById(R.id.text_dialog_feedback);
        text.setText(msg);
    
        Button okButton = (Button) dialog.findViewById(R.id.btn_dialog_feedback);
        Button cancleButton = (Button) dialog.findViewById(R.id.btn_dialog_cancle_feedback);
        final EditText edittext_tv = (EditText) dialog.findViewById(R.id.dialoge_alert_text_feedback);
    
        okButton.setOnClickListener(new View.OnClickListener() {
    
            @Override
            public void onClick(View v) {
                //Perfome Action
            }
        });
        cancleButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.dismiss();
            }
        });
    
        dialog.show();
    
        }
    }
    
  3. 必要なレイアウトXMLを作成します。

11
public static void showCustomAlertDialog(Context context, String name,
            String id, String desc, String fromDate, String toDate,
            String resions) {
        final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                context);
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.dialog, null);
        alertDialogBuilder.setView(view);
        alertDialogBuilder.setCancelable(false);
        final AlertDialog dialog = alertDialogBuilder.create();
        dialog.show();
        txt_empId = (TextView) view.findViewById(R.id.txt_dialog_empcode);
        txt_empName = (TextView) view.findViewById(R.id.txt_dialog_empname);
        txt_desc = (TextView) view.findViewById(R.id.txt_dialog_desc);
        txt_startDate = (TextView) view.findViewById(R.id.txt_dialog_startDate);
        txt_resions = (TextView) view.findViewById(R.id.txt_dialog_endDate);
        txt_empId.setTypeface(Utils.setLightTypeface(context));
        txt_empName.setTypeface(Utils.setLightTypeface(context));
        txt_desc.setTypeface(Utils.setLightTypeface(context));
        txt_startDate.setTypeface(Utils.setLightTypeface(context));
        txt_resions.setTypeface(Utils.setLightTypeface(context));

        txt_empId.setText(id);
        txt_empName.setText(name);

        txt_desc.setText(desc);
        txt_startDate.setText(fromDate + "\t to \t" + toDate);
        txt_resions.setText(resions);



        btn_accept = (Button) view.findViewById(R.id.btn_dialog_accept);
        btn_reject = (Button) view.findViewById(R.id.btn_dialog_reject);
        btn_cancel = (Button) view.findViewById(R.id.btn_dialog_cancel);
        btn_accept.setTypeface(Utils.setBoldTypeface(context));
        btn_reject.setTypeface(Utils.setBoldTypeface(context));
        btn_cancel.setTypeface(Utils.setBoldTypeface(context));

        btn_cancel.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                dialog.dismiss();

            }
        });

    }
11

カスタムダイアログを表示する最も簡単な方法としてこれを見つけました。

あなたはyour_layout.xmlのレイアウトを持っています

public void showCustomDialog(final Context context) {
    Dialog dialog = new Dialog(context);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = inflater.inflate(R.layout.your_layout, null, false);
    findByIds(view);  /*HERE YOU CAN FIND YOU IDS AND SET TEXTS OR BUTTONS*/
    ((Activity) context).getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
    dialog.setContentView(view);
    final Window window = dialog.getWindow();
    window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
    window.setBackgroundDrawableResource(R.color.colorTransparent);
    window.setGravity(Gravity.CENTER);
    dialog.show();
}
4
Khemraj

この単純な Androidダイアログポップアップライブラリ を使って、雑然としたダイアログコードをカットすることができます。あなたの活動に使うのはとても簡単です。その後、あなたはダイアログを表示するためにあなたの活動の中でこのコードを持つことができます

Pop.on(this).with().title(R.string.title).layout(R.layout.custom_pop).show();

ここで、 R.layout.custom_pop は、あなたのダイアログを飾りたいあなたのカスタムレイアウトです。

4
Dharmesh Gohil

enter image description here

上のスクリーンショットは私の成果です。

ステップ:

  1. Xmlを作成する必要があります。 // uiデザイン
  2. メソッドを書く必要があります。 //アクセス方法を定義する
  3. 好きな場所に電話してください。 //コールバックにアクセスする

与えられたリンクを参照してくださいコードリファレンス CustomDialogBox

3
Agilanbu

背景色とテキストスタイルを変更する最も簡単な方法は以下のようにAndroidのアラートダイアログのカスタムテーマを作ることです -

以下のコードをstyles.xmlに追加するだけです。

    <style name="AlertDialogCustom" parent="@Android:style/Theme.Dialog">
    <item name="Android:textColor">#999999</item>
    <item name="Android:windowIsFloating">true</item>
    <item name="Android:windowContentOverlay">@null</item>
    <item name="Android:windowTitleStyle">@null</item>
    <item name="Android:typeface">monospace</item>
    <item name="Android:backgroundDimEnabled">false</item>
    <item name="Android:textSize">@dimen/abc_text_size_medium_material</item>
    <item name="Android:background">#80ff00ff</item>
</style>

:これでカスタマイズが完了しました。alertBuilderオブジェクトに適用するだけです。

    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this,R.style.AlertDialogCustom);

願って、これはあなたを助けるでしょう!

3
Mahamadali

カスタムアラートレイアウトcustom_aler_update.xmlを作成します。

次にアクティビティにコピー

        AlertDialog basic_reg;
    AlertDialog.Builder builder ;
    builder = new AlertDialog.Builder(ct, R.style.AppCompatAlertDialogStyle);
    LayoutInflater inflater = ((Activity) ct).getLayoutInflater();
    View v = inflater.inflate(R.layout.custom_aler_update, null);
    builder.setView(v);
    builder.setCancelable(false);
    builder.create();
    basic_reg = builder.show();

スタイルにこだわる

  <style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">@color/colorAccent</item>
    <item name="Android:textColorPrimary">@color/primaryTextColor</item>
    <item name="Android:background">@color/white</item>
</style>
3
Ebin Joy

アラートダイアログのレイアウトを作成する

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical" 
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">
    <Button
        Android:id="@+id/btn"
        Android:layout_width="match_parent"
        Android:text="Custom Alert Dialog"
        Android:layout_height="40dp">
    </Button>
</LinearLayout>

アクティビティクラスに以下のコードを追加します。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    LayoutInflater inflate = LayoutInflater.from(this);
    alertView = inflate.inflate(R.layout.your_alert_layout, null);
    Button btn= (Button) alertView.findViewById(R.id.btn);

    showDialog();
  }

 public void showDialog(){
        Dialog alertDialog = new Dialog(RecognizeConceptsActivity.this);
        alertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        alertDialog.setContentView(alertView);
        alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        alertDialog.show();
    }

ダイアログフラグメントは、カスタムアラートダイアログを作成する最も簡単な方法です。上記のコードに従って、ダイアログのカスタムビューを作成し、それをダイアログフラグメントを使用して実装します。レイアウトファイルに次のコードを追加します。

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="80dp"
    Android:background="#3E80B4"
    Android:orientation="vertical">

    <TextView
        Android:id="@+id/txt_dia"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center"
        Android:layout_margin="10dp"
        Android:text="Do you realy want to exit ?"
        Android:textColor="@Android:color/white"
        Android:textSize="15dp"
        Android:textStyle="bold" />


    <LinearLayout
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center"
        Android:background="#3E80B4"
        Android:orientation="horizontal">

        <Button
            Android:id="@+id/btn_yes"
            Android:layout_width="100dp"
            Android:layout_height="30dp"
            Android:background="@Android:color/white"
            Android:clickable="true"
            Android:text="Yes"
            Android:textColor="#5DBCD2"
            Android:textStyle="bold" />

        <Button
            Android:id="@+id/btn_no"
            Android:layout_width="100dp"
            Android:layout_height="30dp"
            Android:layout_marginLeft="5dp"
            Android:background="@Android:color/white"
            Android:clickable="true"
            Android:text="No"
            Android:textColor="#5DBCD2"
            Android:textStyle="bold" />
    </LinearLayout>

</LinearLayout>
2

これはAlert Dialogのクラスなので、どのアクティビティからでもクラスを呼び出してコードを再利用できます。

public class MessageOkFragmentDialog extends DialogFragment {
Typeface Lato;
String message = " ";
String title = " ";
int messageID = 0;

public MessageOkFragmentDialog(String message, String title) {
    this.message = message;
    this.title = title;
}


@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    LayoutInflater inflater = getActivity().getLayoutInflater();

    View convertview = inflater.inflate(R.layout.dialog_message_ok_box, null);


    Constants.overrideFonts(getActivity(), convertview);
    Lato = Typeface
            .createFromAsset(getActivity().getAssets(), "font/Lato-Regular.ttf");


    TextView textmessage = (TextView) convertview
            .findViewById(R.id.textView_dialog);

    TextView textview_dialog_title = (TextView) convertview.findViewById(R.id.textview_dialog_title);

    textmessage.setTypeface(Lato);
    textview_dialog_title.setTypeface(Lato);



    textmessage.setText(message);
    textview_dialog_title.setText(title);



    Button button_ok = (Button) convertview
            .findViewById(R.id.button_dialog);
    button_ok.setTypeface(Lato);

    builder.setView(convertview);
    button_ok.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            dismiss();

        }
    });


    return builder.create();

}
}

同じXMLファイルは次のとおりです。

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="match_parent"
    Android:background="#ffffff"
    Android:gravity="center_vertical|center"
    Android:orientation="vertical">

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:gravity="center"
        Android:orientation="vertical">

        <LinearLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:background="@color/blue_color"
            Android:gravity="center_horizontal"
            Android:orientation="horizontal">

            <TextView
                Android:id="@+id/textview_dialog_title"
                Android:layout_width="wrap_content"
                Android:layout_height="50dp"
                Android:gravity="center"
                Android:textColor="@color/white_color"
                Android:textSize="@dimen/txtSize_Medium" />


        </LinearLayout>

        <View
            Android:layout_width="match_parent"
            Android:layout_height="1dp"
            Android:background="@color/txt_white_color" />

        <TextView
            Android:id="@+id/textView_dialog"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_gravity="center"
            Android:layout_margin="@dimen/margin_20"
            Android:textColor="@color/txt_gray_color"
            Android:textSize="@dimen/txtSize_small" />

        <View
            Android:layout_width="match_parent"
            Android:layout_height="1dp"
            Android:background="@color/txt_white_color"
            Android:visibility="gone"/>

        <Button
            Android:id="@+id/button_dialog"
            Android:layout_width="wrap_content"
            Android:layout_height="@dimen/margin_40"
            Android:layout_gravity="center"
            Android:background="@drawable/circular_blue_button"

            Android:text="@string/ok"
            Android:layout_marginTop="5dp"
            Android:layout_marginBottom="@dimen/margin_10"
            Android:textColor="@color/txt_white_color"
            Android:textSize="@dimen/txtSize_small" />
    </LinearLayout>

</LinearLayout>
2
Pratibha Sarode

カスタムアラートダイアログを作成

cumstomDialog.xml

<ImageView
    Android:id="@+id/icon"
    Android:layout_width="50dp"
    Android:layout_height="50dp"
    Android:layout_gravity="center"
    Android:layout_margin="5dp"
    app:srcCompat="@drawable/error" />

<TextView
    Android:id="@+id/title"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center"
    Android:fontFamily="@font/muli_bold"
    Android:text="Title"
    Android:layout_marginTop="5dp"
    Android:textColor="@Android:color/black"
    Android:textSize="15sp" />


<TextView
    Android:id="@+id/description"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center"
    Android:layout_marginTop="10dp"
    Android:fontFamily="@font/muli_regular"
    Android:text="Message"
    Android:textColor="@Android:color/black"
    Android:textSize="12dp" />

<LinearLayout
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center_horizontal"
    Android:layout_marginTop="20dp"
    Android:gravity="center"
    Android:orientation="horizontal">

    <Button
        Android:id="@+id/cancelBTN"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="left"
        Android:layout_margin="5dp"
        Android:background="@drawable/bground_radius_button_white"
        Android:text="No"
        Android:textColor="@color/black" />

    <Button
        Android:id="@+id/acceptBtn"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="right"
        Android:layout_margin="5dp"
        Android:background="@drawable/bground_radius_button"
        Android:text="Yes"
        Android:textColor="@color/white" />
</LinearLayout>

あなたの活動に関するあなたのカスタムダイアログを表示します:

  public void showDialog(String title, String des, int icon) {

    final Dialog dialog = new Dialog(this);
    dialog.setContentView(R.layout.custom_dialog);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

    Button cancelBTN = dialog.findViewById(R.id.cancelBTN);
    Button acceptBTN = dialog.findViewById(R.id.acceptBtn);
    TextView tvTitle = dialog.findViewById(R.id.title);
    TextView tvDescription = dialog.findViewById(R.id.description);
    ImageView ivIcon = dialog.findViewById(R.id.icon);

    tvTitle.setText(title);
    tvDescription.setText(des);
    ivIcon.setImageResource(icon);

    cancelBTN.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.dismiss();
        }
    });

    acceptBTN.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

    dialog.show();
}

このように呼び出します。

showDialog( "タイトル"、 "メッセージ"、R.drawable.warning);

1
idris yıldız

私は私が使用しているコトリンコードを投稿しています、そしてそれは私のためにうまく働きます。ダイアログボタンのクリックリスナーを設定することもできます。

これが私のXMLコードです。

layout_custom_alert_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layoutDirection="ltr"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content">

    <View
        Android:id="@+id/view6"
        Android:layout_width="match_parent"
        Android:layout_height="20dp"
        Android:background="@color/colorPrimary" />

    <androidx.constraintlayout.widget.ConstraintLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_below="@id/view6"
        Android:layout_marginStart="8dp"
        Android:layout_marginTop="8dp"
        Android:layout_marginEnd="8dp"
        Android:layout_marginBottom="8dp">


        <TextView
            Android:id="@+id/txt_alert_title"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_margin="8dp"
            Android:layout_marginStart="8dp"
            Android:layout_marginTop="8dp"
            Android:layout_marginEnd="8dp"
            tools:text="are you sure?"
            Android:textAlignment="center"
            Android:textColor="@Android:color/black"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />


        <Button
            Android:id="@+id/btn_alert_positive"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_below="@id/textView2"
            Android:layout_marginTop="8dp"
            Android:background="@Android:color/transparent"
            tools:text="yes"
            Android:textColor="@color/colorPrimaryDark"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toEndOf="@+id/btn_alert_negative"
            app:layout_constraintTop_toBottomOf="@+id/txt_alert_title" />

        <Button
            Android:id="@+id/btn_alert_negative"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_marginTop="8dp"
            Android:background="@Android:color/transparent"
            tools:text="no"
            Android:textColor="@color/colorPrimaryDark"
            app:layout_constraintEnd_toStartOf="@+id/btn_alert_positive"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/txt_alert_title" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</RelativeLayout>

mAlertDialog.kt

class mAlertDialog(context: Context) {

    private val btn_positive : Button
    private val btn_negative : Button
    private val txt_alert_title : TextView
    private val dialog : AlertDialog
    init {
        val view = LayoutInflater.from(context).inflate(R.layout.layout_custom_alert_dialog,null)

        val dialog_builder = AlertDialog.Builder(context)
        dialog_builder.setView(view)

        btn_negative = view.findViewById(R.id.btn_alert_negative)
        btn_positive = view.findViewById(R.id.btn_alert_positive)
        txt_alert_title = view.findViewById(R.id.txt_alert_title)

        dialog = dialog_builder.create() 
    }

    fun show()
    {
        dialog.show()
    }

    fun setPositiveClickListener(listener :onClickListener)
    {
        btn_positive.setOnClickListener { v ->
            listener.onClick(btn_positive)
            dialog.dismiss()
        }
    }

    fun setNegativeClickListener(listener: onClickListener)
    {
        btn_negative.setOnClickListener { v ->
            listener.onClick(btn_negative)
            dialog.dismiss()
        }
    }

    fun setPoitiveButtonText(text : String)
    {
        btn_positive.text = text
    }


    fun setNegativeButtonText(text : String)
    {
        btn_negative.text = text
    }

    fun setAlertTitle(title : String)
    {
        txt_alert_title.text = title
    }
}

クリックリスナーのインタフェース:

onClickListener.kt

interface onClickListener{
    fun onClick(view : View)
}

使用例

val dialog = mAlertDialog(context)
                dialog.setNegativeButtonText("no i dont")
                dialog.setPoitiveButtonText("yes is do")
                dialog.setAlertTitle("do you like this alert dialog?")

                dialog.setPositiveClickListener(object : onClickListener {
                    override fun onClick(view: View) {
                        Toast.makeText(context, "yes", Toast.LENGTH_SHORT).show()
                    }
                })

                dialog.setNegativeClickListener(object : onClickListener {
                    override fun onClick(view: View) {
                        Toast.makeText(context, "no", Toast.LENGTH_SHORT).show()
                    }
                })

                dialog.show()

願っています、これはあなたを助けるでしょう!

0
H.sanati

カスタムアラートのインポート:

        LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.dse_location_list_filter, null);
        final Dialog dialog = new Dialog(Acitvity_name.this);
        dialog.setContentView(view);
        dialog.setCancelable(true);
        dialog.setCanceledOnTouchOutside(true);
        dialog.show();
0
murugan mani

TcAronライブラリを使用するのが好きです。 (ここからダウンロード: https://github.com/triocoder/tcAron

  1. インポートクラス:

    import com.triocoder.tcaron.tcaronlibrary.tcAronDialogs;

  2. これを書いてください:

    tcAronDialogs.showFancyAlert(MainActivity.this、false、 "Text"、 "Close"、 "ic_hub_white"、0xFFF44336);

  3. ドキュメントを確認してください:
    https://github.com/triocoder/tcAron/wiki/showFancyAlert

0
JurijTSL