【问题标题】:Android: Set Margin for Edit Text in AlertDialog BoxAndroid:在警报对话框中设置编辑文本的边距
【发布时间】:2016-08-11 03:47:03
【问题描述】:

我正在尝试创建一个 Alert Dialog 框,例如 Lollipop,一切正常,但我被困在 EditText 的一个部分>

我想要一个带有下划线的 EditText 和 20dp 的 左右边距。对于下划线,我尝试了 setBackground() ,它工作正常.

但是有一个问题是 setBackground() 不能工作 API 16级以下。

对于 setMargin 我试过了

 final EditText input = new EditText(MainActivity.this);
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    lp.setMargins(30,0,30,0);
    input.setLayoutParams(lp);
    input.setGravity(View.TEXT_ALIGNMENT_GRAVITY);
    input.setBackground(getResources().getDrawable(R.drawable.edit_text_line)); 
    builder.setView(input);

但使用父级宽度编辑文本。

完整代码

  AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Message");
    builder.setMessage("Do you want to\n"+""+"exit from app");

    final EditText input = new EditText(MainActivity.this);
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    lp.setMargins(30,0,30,0);
    input.setLayoutParams(lp);
    input.setGravity(View.TEXT_ALIGNMENT_GRAVITY);
    input.setBackground(getResources().getDrawable(R.drawable.edit_text_line)); //call reequires api 16 and above
    builder.setView(input);

    builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });

    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            Toast.makeText(MainActivity.this, "You exit from app " + input.getText().toString(),
                    Toast.LENGTH_LONG).show();

        }
    });

    AlertDialog alert = builder.create();
    alert.show();
    Button nbutton = alert.getButton(DialogInterface.BUTTON_NEGATIVE);
    nbutton.setTextColor(Color.parseColor("#7e7e7e"));
    Button pbutton = alert.getButton(DialogInterface.BUTTON_POSITIVE);
    pbutton.setTextColor(Color.parseColor("#109c8f"));

有什么方法可以为 EditText 设置 background 在 API 16 下工作并且 setMargin 左右为 编辑文本.

【问题讨论】:

  • margin 的一个解决方法是添加一个线性布局并设置左右填充到这个布局。将您的编辑文本放在此线性布局中,而不是将其直接放在对话框中。
  • 尝试使用 ViewGroup.MarginLayoutParams ..!!!
  • @Binil S 请参阅下面的答案。

标签: android android-edittext android-alertdialog android-5.1.1-lollipop


【解决方案1】:

使用此代码对我有用。

     final EditText input = new EditText(MainActivity.this);
     input.setSingleLine();
     FrameLayout container = new FrameLayout(thisActivity);
     FrameLayout.LayoutParams params = new  FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);

     params.topMargin = convertDpToPx(30);
     params.bottomMargin = convertDpToPx(30);

     input.setLayoutParams(params);
     container.addView(input);

【讨论】:

  • 在 AlertDialog 中使用时,不要忘记将容器添加为 alertDialog 的 VIEW :- alertDialog.setView(container);
【解决方案2】:

根视图的边距不起作用。尝试按照其他答案中的说明向父布局添加填充。
但不是在 java 中创建对话框布局,我建议你膨胀一个 xml 并使用 AppCompatEditText 如果你想使用线条背景
这是给你的示例代码

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Message");
// Why are you setting message here when you are inflating custom view?
// You need to add another TextView in xml if you want to set message here
// Otherwise the message will not be shown
// builder.setMessage("Do you want to\n"+""+"exit from app");
View view = LayoutInflater.from(this).inflate(R.layout.dialog_layout, null);
final AppCompatEditText input = (AppCompatEditText) view.findViewById(R.id.editText);
builder.setView(view);
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
        dialog.cancel();
    }
});

builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
        Toast.makeText(MainActivity.this, "You exit from app " + input.getText().toString(),
                Toast.LENGTH_LONG).show();

    }
});

AlertDialog alert = builder.create();
alert.show();

最后,您无法在创建对话框后立即获得按钮。如果您想自定义按钮文本颜色,您需要在OnShowListener 中执行此操作。或者使用 android.support.v7.app.AlertDialog 进行更新的 Dialog 设计。

Button nbutton = alert.getButton(DialogInterface.BUTTON_NEGATIVE);
// will be null
// nbutton.setTextColor(Color.parseColor("#7e7e7e"));
Button pbutton = alert.getButton(DialogInterface.BUTTON_POSITIVE);
// will be null
// pbutton.setTextColor(Color.parseColor("#109c8f"));

dialog_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:app="http://schemas.android.com/apk/res-auto"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical">

    <android.support.v7.widget.AppCompatEditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_margin="16dp"
        app:backgroundTint="@color/colorPrimary"/>

</LinearLayout>

【讨论】:

    【解决方案3】:

    希望对您有帮助

    这对我有用...

    通过将RelativeLayout 设置为EditText 的根,因为根视图的边距不起作用。

    public void ShowDialog() {
            AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity());
            alertDialog.setTitle("App Name");
            alertDialog.setMessage("Message");
            final EditText input = new EditText(getContext());
            input.setHint("Hint Text");
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                    LinearLayout.LayoutParams.MATCH_PARENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);
            lp.setMargins(36,36,36,36);
            input.setLayoutParams(lp);
            RelativeLayout container = new RelativeLayout(getContext());
            RelativeLayout.LayoutParams rlParams=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
            container.setLayoutParams(rlParams);
            container.addView(input);
            //now set view to dialog
            alertDialog.setView(container);
            alertDialog.setPositiveButton("Ohk", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    if (input.getText().toString().isEmpty()) {
                        input.setText("No Valid");
                        return;
                    }
                }
            });
            alertDialog.show();
        }
    

    【讨论】:

      猜你喜欢
      • 2014-12-15
      • 1970-01-01
      • 2013-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      相关资源
      最近更新 更多