b85411
b85411

Reputation: 10000

Add bigger margin to EditText in Android AlertDialog

I have an EditText inside an AlertDialog. It looks like this.

enter image description here

See where it says tddjdjck and how it is indented quite a lot. That is what I want (I used setPadding with left and right set to 50), but I also want the blue line under it to be indented too. How do I do that?

The code I am using is below:

            final AlertDialog.Builder alert = new AlertDialog.Builder(thisActivity);
            final EditText input = new EditText(thisActivity);
            input.setSingleLine();
            input.setPadding(50, 0, 50, 0);

            alert.setTitle("by...");
            alert.setMessage("enter the name of the person who did:");
            alert.setView(input);
            alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    String value = input.getText().toString().trim();

                }
            });

            alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    dialog.cancel();
                }
            });
            alert.show();  

Thank you

Upvotes: 50

Views: 23652

Answers (6)

sekores
sekores

Reputation: 1

In Kotlin you can do it like this:

the margin values need to be set in px and if you want to use dp-values then dont forget to convert it to px.

editText.updateLayoutParams<FrameLayout.LayoutParams> {
    this.leftMargin = 50
    this.rightMargin = 50
}

Important! you need to update the layout params after setting the view in the AlertDialog

You can see it in this example:

val editText = EditText(this)
editText.setText("tddjdjck")

AlertDialog.Builder(this)
    .setTitle("by...")
    .setMessage("enter the name of the person who did:")
    .setView(editText)
    .setNegativeButton("Cancel"){ dialog, _ ->
        dialog.cancel()
    }.setPositiveButton("Ok"){ dialog, _ ->
        //your execution
    }.show()

editText.updateLayoutParams<FrameLayout.LayoutParams> {
    this.leftMargin = 50
    this.rightMargin = 50
}

Upvotes: 0

Jothiprakash
Jothiprakash

Reputation: 1

        float paddingDp = 10f;
        int paddingPx = 5;


            paddingPx = (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, 
                         paddingDp, activity.Resources.DisplayMetrics);
           //alert dialog
           adDialog.SetView(input, paddingPx, 5, paddingPx, 5);

try this below extension i did this For xamarin android ,i hope this will work for Java as well with little modifications

 public static AlertDialog ShowInputDialogue(this Activity activity, string title, string message, string txtValue, string dismissButtonText, string submitButtonText, Action<string> OnSubmit,bool TextInputType =false,bool isEdittable =true)
    {
        AlertDialog adDialog = null;
        try
        {
            adDialog = new AlertDialog.Builder(activity).Create();
            // Create TextView
            EditText input = new EditText(activity);
            input.ImeOptions = Android.Views.InputMethods.ImeAction.Done;
            input.Enabled = isEdittable;
            float paddingDp = 10f;
            int paddingPx = 5;
            if (!TextInputType)
            {
                input.SetBackgroundResource(Resource.Color.edit_text_shape);
                input.InputType = Android.Text.InputTypes.ClassNumber | Android.Text.InputTypes.NumberFlagDecimal;
                input.Text = txtValue;
                //input.SetMaxLines(5);
                //input.SetLines(5);
            }
            else
            {
                input.SetBackgroundResource(Resource.Color.edit_text_shape);

                // Convert to pixels
                paddingPx = (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, paddingDp, activity.Resources.DisplayMetrics);
                input.SetPadding(paddingPx, paddingPx, paddingPx, paddingPx);

                input.Text = txtValue;
                input.SetMaxLines(5);
                input.SetLines(5);
            }
            //input.FocusChange += (object sender, View.FocusChangeEventArgs e) =>
            //{
            //    // request a soft keyboard.
            //    InputMethodManager imm = (InputMethodManager)activity.GetSystemService(Context.InputMethodService);
            //    if (e.HasFocus)
            //        imm.ToggleSoftInput(ShowFlags.Forced, HideSoftInputFlags.None);
            //};


            input.EditorAction += (s, e) =>
            {
                if (e.ActionId == ImeAction.Done)
                {
                    adDialog.Hide();
                    adDialog.Cancel();

                    if (OnSubmit != null)
                        OnSubmit(input.Text);


                }

            };


            //adDialog.Window.ClearFlags(WindowManagerFlags.NotFocusable | WindowManagerFlags.AltFocusableIm);
            adDialog.SetTitle(title);
            adDialog.SetMessage(message);
            adDialog.SetView(input, paddingPx, 5, paddingPx, 5);
            adDialog.SetButton(dismissButtonText, new EventHandler<DialogClickEventArgs>(
                (s, args) =>
                {
                    adDialog.Hide();
                    adDialog.Cancel();

                    View view = adDialog.CurrentFocus;
                    if (view != null)
                    {
                        InputMethodManager imm = (InputMethodManager)activity.GetSystemService(Context.InputMethodService);
                        imm.HideSoftInputFromWindow(view.WindowToken, HideSoftInputFlags.None);
                    }
                }));
            adDialog.SetButton2(submitButtonText, new EventHandler<DialogClickEventArgs>(
                (s, args) =>
                {
                    if (OnSubmit != null)
                        OnSubmit(input.Text);

                    View view = adDialog.CurrentFocus;
                    if (view != null)
                    {
                        InputMethodManager imm = (InputMethodManager)activity.GetSystemService(Context.InputMethodService);
                        imm.HideSoftInputFromWindow(view.WindowToken, HideSoftInputFlags.None);
                    }
                }));
            adDialog.Window.Attributes.WindowAnimations = Resource.Style.DialogAnimation_2;

            adDialog.Show();
            //input.RequestFocus();
            SetDialogueTheme(activity, adDialog);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        return adDialog;
    }

Usage in activity:

   this.ShowInputDialogue("Title", "", "editetext notes", "Cancel", "Save", async (val) =>
                        {
                        try
                        {
                         //handle for save

                        }
                        catch (Exception ex)
                        {
                          
                        }
                    }, true);

Upvotes: 0

Mahmudul Hasan Shohag
Mahmudul Hasan Shohag

Reputation: 3131

I make a general single input AlertDialog function. The code is self-explanatory.

enter image description here

Utils.java

public class Utils {

    /**
     * Convert dp to px value.
     * -
     * Source: https://stackoverflow.com/a/6327095/2263329
     */
    public static int dpToPx(float dp, Resources resources) {
        float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, resources.getDisplayMetrics());
        return (int) px;
    }

    /**
     * Show an AlertDialog with a single input box.
     *
     * @param context         Application context
     * @param title           Dialog title
     * @param message         Dialog input message/hint
     * @param inputType       InputType of EditText
     * @param positiveBtnText Dialog positive button text
     * @param negativeBtnText Dialog negative button text
     * @param listener        Dialog buttons click listener
     */
    public static void showSingleInputDialog(
            @NonNull Context context,
            @NonNull String title,
            @NonNull String message,
            int inputType,
            @NonNull String positiveBtnText,
            @NonNull String negativeBtnText,
            @NonNull final SingleInputDialogListener listener
    ) {
        AlertDialog.Builder alert = new AlertDialog.Builder(context);
        alert.setTitle(title);

        TextInputLayout textInputLayout = new TextInputLayout(context);

        final EditText input = new EditText(context);
        input.setSingleLine(true);
        input.setInputType(inputType);
        input.setHint(message);

        FrameLayout container = new FrameLayout(context);
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        int left_margin = Utils.dpToPx(20, context.getResources());
        int top_margin = Utils.dpToPx(10, context.getResources());
        int right_margin = Utils.dpToPx(20, context.getResources());
        int bottom_margin = Utils.dpToPx(4, context.getResources());
        params.setMargins(left_margin, top_margin, right_margin, bottom_margin);

        textInputLayout.setLayoutParams(params);

        textInputLayout.addView(input);
        container.addView(textInputLayout);

        alert.setView(container);

        alert.setPositiveButton(positiveBtnText, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {

                listener.positiveCallback(input.getText().toString());

            }
        });

        alert.setNegativeButton(negativeBtnText,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {

                        listener.negativeCallback();

                    }
                });

        alert.show();
    }

}

SingleInputDialogListener.java

public interface SingleInputDialogListener {

    void positiveCallback(String inputText);

    void negativeCallback();

}

Use example:

Utils.showSingleInputDialog(mContext,
        "Password recovery",
        "Your e-mail address",
        InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS,
        "Recover",
        "Cancel",
        new SingleInputDialogListener() {
            @Override
            public void positiveCallback(String inputText) {

                Toast.makeText(mContext, inputText, Toast.LENGTH_SHORT).show();

            }

            @Override
            public void negativeCallback() {

                // ...

            }
        });

Upvotes: 2

Vadim Ahmerov
Vadim Ahmerov

Reputation: 777

Here is Kotlin extension function for the Builder to set EditText view.

val Float.toPx: Int
get() = (this * Resources.getSystem().displayMetrics.density).toInt()

fun AlertDialog.Builder.setEditText(editText: EditText): AlertDialog.Builder {
    val container = FrameLayout(context)
    container.addView(editText)
    val containerParams = FrameLayout.LayoutParams(
            FrameLayout.LayoutParams.MATCH_PARENT,
            FrameLayout.LayoutParams.WRAP_CONTENT
    )
    val marginHorizontal = 48F
    val marginTop = 16F
    containerParams.topMargin = (marginTop / 2).toPx
    containerParams.leftMargin = marginHorizontal.toInt()
    containerParams.rightMargin = marginHorizontal.toInt()
    container.layoutParams = containerParams

    val superContainer = FrameLayout(context)
    superContainer.addView(container)

    setView(superContainer)

    return this
}

Usage example

val editText = EditText(this)
AlertDialog.Builder(this)
        .setTitle("Group Name")
        .setEditText(editText)
        .setPositiveButton("OK", { _: DialogInterface, _: Int ->
            // Do your work with text here
            val text = editText.text.toString()
            Toast.makeText(applicationContext, text, Toast.LENGTH_SHORT).show()
        })
        .setNegativeButton("Cancel", null)
        .show()

Result

enter image description here

Upvotes: 15

Ashton Engberg
Ashton Engberg

Reputation: 6109

final AlertDialog.Builder alert = new AlertDialog.Builder(thisActivity);
final EditText input = new EditText(thisActivity);
input.setSingleLine();
FrameLayout container = new FrameLayout(thisActivity);
FrameLayout.LayoutParams params = new  FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.leftMargin = getResources().getDimensionPixelSize(R.dimen.dialog_margin);
input.setLayoutParams(params);
container.addView(input);
alert.setTitle("by...");
alert.setMessage("test message");
alert.setView(container);

Make sure you add another line to your dimens.xml resource file, such as

<dimen name="dialog_margin">20dp</dimen>

Upvotes: 105

Bhargav Thanki
Bhargav Thanki

Reputation: 4954

You can pass spacing parameter in setView method

alert.setView(view ,left_space , top_space , right_space , bottom_space);

So,in your case you can try this

alert.setView(input , 50 ,0, 50 , 0);

Upvotes: 26

Related Questions