在Android AlertDialog中为EditText添加更大的余量

b85*_*411 36 android margin padding android-edittext android-alertdialog

我在AlertDialog中有一个EditText.看起来像这样.

在此输入图像描述

看看它说tddjdjck的位置以及它是如何缩进的.这就是我想要的(我使用setPadding左右设置为50),但我也希望它下面的蓝线也缩进.我怎么做?

我使用的代码如下:

            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();  
Run Code Online (Sandbox Code Playgroud)

谢谢

Ash*_*erg 76

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);
Run Code Online (Sandbox Code Playgroud)

确保在dimens.xml资源文件中添加另一行,例如

<dimen name="dialog_margin">20dp</dimen>
Run Code Online (Sandbox Code Playgroud)


Bha*_*nki 22

您可以在setView方法中传递spacing参数

alert.setView(view ,left_space , top_space , right_space , bottom_space);
Run Code Online (Sandbox Code Playgroud)

所以,在你的情况下,你可以试试这个

alert.setView(input , 50 ,0, 50 , 0);
Run Code Online (Sandbox Code Playgroud)

  • 对于较新的API,不推荐使用此功能 (18认同)
  • @jbrulmans仅弃用Builder中的方法.`AlertDialog`中的方法似乎没有被弃用并达到相同的效果(在构建器上的`.create()`之后调用). (6认同)
  • @JensBrulmans但它仍然可以工作而不需要额外的十几行代码. (5认同)

Vad*_*rov 9

这是Builder的Kotlin扩展函数,用于设置EditText视图.

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
}
Run Code Online (Sandbox Code Playgroud)

用法示例

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()
Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述