web-dev-qa-db-ja.com

Androidでカスタムアラートダイアログを作成する方法は?

サンプルアプリを開発しています。ボタンをクリックすると、タイトルとボタンを持つアラートを表示できます。ただし、ユーザー名(ラベル)とテキストフィールド(編集フィールド)とボタン。ボタンをクリックすると、そのための別のポップアップxmlファイルを作成できますか?

public void selfDestruct(View view) {
         // Kabloey
         Log.d("Naveen", "Test====");
         System.out.println("----------------------ghfgjhf-----------------");
         AlertDialog alertDialog = new AlertDialog.Builder(SecondActivity.this).create();
         alertDialog.setTitle("Reset...");
         alertDialog.setMessage("R u sure?");
         alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
              public void onClick(DialogInterface dialog, int which) {

               //here you can add functions

            } });
         alertDialog.show();
     }

   <Button
     Android:layout_height="wrap_content"
     Android:layout_width="wrap_content"
     Android:text="@string/self_destruct"
     Android:onClick="selfDestruct" />
18
user1542984

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="fill_parent"
    Android:orientation="vertical" >


    <EditText
        Android:id="@+id/editText"
        Android:hint="Enter some thing"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content" >

    <requestFocus />
    </EditText>

    <LinearLayout                
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:orientation="horizontal"   
        Android:layout_marginTop="10dp">     

        <Button
            Android:id="@+id/save"
            Android:layout_marginTop="15dp"
            Android:layout_weight="1"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:text="SAVE" />

        <Button
            Android:id="@+id/cancel"
            Android:layout_marginTop="15dp"
            Android:layout_weight="1"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:text="Cancel" />

    </LinearLayout>
</LinearLayout>

custom_dialog.xmlを拡張する必要があります

final Dialog dialog = new Dialog(this);

dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Custom Alert Dialog");

final EditText editText = (EditText) dialog.findViewById(R.id.editText);
Button btnSave          = (Button) dialog.findViewById(R.id.save);
Button btnCancel        = (Button) dialog.findViewById(R.id.cancel);
dialog.show();
30
Amit Gupta

通常のアクティビティを作成し、Android:themeダイアログへ:

   <activity
        Android:name="com.example.carsharingkitdemo.YourPopUpActivity"
        Android:theme="@Android:style/Theme.Holo.Dialog" >
    </activity>

このアクティビティのxmlファイルで、このダイアログフィールドの高さと幅を決定できます。例えば:

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="300dp"
Android:layout_height="100dp">

重要なのはマニフェスト部分です。

4
silvia_aut

使用してみてください: PopupWindow

ここに例を見つけることができます: http://Android-er.blogspot.co.il/2012/03/example-of-using-popupwindow.html

3
Evgeni Roitburg

このコードのようにDialogを使用できます:

final Dialog dialog = new Dialog(context);
// dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.custom);
dialog.setTitle("Title...");

// set the custom dialog components - text, image and button
TextView text = (TextView) dialog.findViewById(R.id.text);
text.setText("Android custom dialog example!");
Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK);
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();

タイトルバーを削除する場合は、defineの後にこのコードを使用します。

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
2
Bashar Staifan

私のために働く

Dialog m_dialog; 
m_dialog = new Dialog(BusinessDetail.this);
            m_dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

            LayoutInflater m_inflater = LayoutInflater.from(BusinessDetail.this);
            View m_view = m_inflater.inflate(R.layout.rateus_popup, null);
            myPopLay = (LinearLayout) m_view.findViewById(R.id.myPopLay);
m_dialog.setContentView(m_view);
            m_dialog.show();
1
madhu sudhan

XMLコードとアクティビティコードを参照してください。

 <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:orientation="vertical" >

    <TextView
        Android:id="@+id/text"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentTop="true"
        Android:layout_centerHorizontal="true"
        Android:layout_marginTop="56dp"
        Android:text="Popup Window will display on this Activity" />

    <Button
        Android:id="@+id/popupbutton"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_centerHorizontal="true"
        Android:layout_centerVertical="true"
        Android:text="Show Popup" />

</RelativeLayout>

アクティビティファイル

package com.nkm.popup;

import Android.app.Activity;
import Android.os.Bundle;
import Android.view.View;
import Android.view.View.OnClickListener;
import Android.view.ViewGroup.LayoutParams;
import Android.widget.Button;
import Android.widget.LinearLayout;
import Android.widget.PopupWindow;
import Android.widget.TextView;

public class PopupDemoActivity extends Activity implements OnClickListener {
LinearLayout layoutOfPopup;
PopupWindow popupMessage;
Button popupButton, insidePopupButton;
TextView popupText;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    init();
    popupInit();
}

public void init() {
    popupButton = (Button) findViewById(R.id.popupbutton);
    popupText = new TextView(this);
    insidePopupButton = new Button(this);
    layoutOfPopup = new LinearLayout(this);
    insidePopupButton.setText("OK");
    popupText.setText("This is Popup Window.press OK to dismiss         it.");
    popupText.setPadding(0, 0, 0, 20);
    layoutOfPopup.setOrientation(1);
    layoutOfPopup.addView(popupText);
    layoutOfPopup.addView(insidePopupButton);
}

public void popupInit() {
    popupButton.setOnClickListener(this);
    insidePopupButton.setOnClickListener(this);
    popupMessage = new PopupWindow(layoutOfPopup, LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT);
    popupMessage.setContentView(layoutOfPopup);
}

@Override
public void onClick(View v) {

    if (v.getId() == R.id.popupbutton) {
        popupMessage.showAsDropDown(popupButton, 0, 0);
    }

    else {
        popupMessage.dismiss();
    }
  }
}
1

これを試して...

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Reset...").setView(editText)
   .setMessage("R u sure?").setCancelable(true)
   .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int arg1) {
        //Do here whatever.....
    }
});
AlertDialog alert = builder.create();
alert.show();
}
1
Ankit

以下のコーディングを使用して、Androidでポップアップを表示します。

AlertDialog.builder builder=new AlertDilaog.Builder(this);
    builder.setMessage("PopUP Example");
    AlertDialog alert=builder.create();
    alert.setTitle("");
    alert.show();

    new Handler.postDelayed(new Runnable()
    {
    @override
    public void run()
    {
  //TODO
    alert.dismiss();
    }
    },1*1000);
    }

Youtubeリンク: https://www.youtube.com/watch?v=SEsVTTl6exg

0
Kanagalingam

PopupWindowクラスを使用して、ポップアップを作成します。

言及したいことの1つは、ポップアップを開いたボタンに添付することです。たとえば、上のスクリーンショットの「ポップアップを表示」ボタンが画面の中央に配置される場合、ポップアップウィンドウをボタンの位置に固定する必要があります。これを実現するには、最初に画面上のボタンの「x」と「y」の位置を取得し、ポップアップウィンドウに渡す必要があります。次に、ポップアップを適切に調整するためにオフセットを使用します-少し右、少し下に、ボタン全体と重ならないようにします。

私が言及したいもう1つの考えは、ポップアップに9パッチの背景画像を使用するため、より派手に見えることです。しかし、もちろん、あなたはそれをスキップして、あなたが望む背景を置くことも、まったく背景を置くこともできません。

Layout/main.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="fill_parent"
Android:background="#CCC"
Android:orientation="vertical" >

<Button
   Android:id="@+id/show_popup"
   Android:layout_width="wrap_content"
   Android:layout_height="wrap_content"
   Android:text="Show Popup" />

</LinearLayout>

ポップアップのレイアウトを定義する新しいレイアウトファイルlayout/popup_layout.xmlを作成します。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
   Android:layout_width="wrap_content"
   Android:id="@+id/popup"
   Android:layout_height="wrap_content"
   Android:background="@drawable/popup_bg"
   Android:orientation="vertical" >

<TextView
   Android:id="@+id/textView1"
   Android:layout_width="wrap_content"
   Android:layout_height="wrap_content"
   Android:text="Popup"
   Android:textAppearance="?android:attr/textAppearanceLarge" />

<TextView
   Android:id="@+id/textView2"
   Android:layout_marginTop="5dp"
   Android:layout_width="wrap_content"
   Android:layout_height="wrap_content"
   Android:text="This is a simple popup" />

<Button
   Android:id="@+id/close"
   Android:layout_marginTop="10dp"
   Android:layout_gravity="center_horizontal"
   Android:layout_width="wrap_content"
   Android:layout_height="wrap_content"
   Android:text="Close" />

</LinearLayout>

そして今、最も興味深い部分です。 TestPopupActivityを開き、以下のコードを入力します。コメントを注意深く読んで、何が起こっているのかを理解してください。

 public class TestPopupActivity extends Activity {

//The "x" and "y" position of the "Show Button" on screen.
Point p;

@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);

   Button btn_show = (Button) findViewById(R.id.show_popup);
   btn_show.setOnClickListener(new OnClickListener() {
     @Override
     public void onClick(View arg0) {

       //Open popup window
       if (p != null)
       showPopup(TestPopupActivity.this, p);
     }
   });
}

// Get the x and y position after the button is draw on screen
// (It's important to note that we can't get the position in the onCreate(),
// because at that stage most probably the view isn't drawn yet, so it will return (0, 0))
@Override
public void onWindowFocusChanged(boolean hasFocus) {

   int[] location = new int[2];
   Button button = (Button) findViewById(R.id.show_popup);

   // Get the x, y location and store it in the location[] array
   // location[0] = x, location[1] = y.
   button.getLocationOnScreen(location);

   //Initialize the Point with x, and y positions
   p = new Point();
   p.x = location[0];
   p.y = location[1];
}

// The method that displays the popup.
private void showPopup(final Activity context, Point p) {
   int popupWidth = 200;
   int popupHeight = 150;

   // Inflate the popup_layout.xml
   LinearLayout viewGroup = (LinearLayout) context.findViewById(R.id.popup);
   LayoutInflater layoutInflater = (LayoutInflater) context
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   View layout = layoutInflater.inflate(R.layout.popup_layout, viewGroup);

   // Creating the PopupWindow
   final PopupWindow popup = new PopupWindow(context);
   popup.setContentView(layout);
   popup.setWidth(popupWidth);
   popup.setHeight(popupHeight);
   popup.setFocusable(true);

   // Some offset to align the popup a bit to the right, and a bit down, relative to button's position.
   int OFFSET_X = 30;
   int OFFSET_Y = 30;

   // Clear the default translucent background
   popup.setBackgroundDrawable(new BitmapDrawable());

   // Displaying the popup at the specified location, + offsets.
   popup.showAtLocation(layout, Gravity.NO_GRAVITY, p.x + OFFSET_X, p.y + OFFSET_Y);

   // Getting a reference to Close button, and close the popup when clicked.
   Button close = (Button) layout.findViewById(R.id.close);
   close.setOnClickListener(new OnClickListener() {

     @Override
     public void onClick(View v) {
       popup.dismiss();
     }
   });
}
}
0
vicky mahale