代码之家  ›  专栏  ›  技术社区  ›  Binil Surendran

Android:在Alert对话框中设置编辑文本的边距

  •  3
  • Binil Surendran  · 技术社区  · 9 年前

    我正在尝试创建一个 警报对话框 盒子状的 棒棒糖 ,一切都很顺利,但我被困在一个区域 编辑文本

    我想要一个 编辑文本 带下划线和 左边距和右边距 20dp。对于下划线,我尝试过 设置背景() ,工作正常。

    但有一个问题 设置背景() 不会起作用 美国石油学会 级别低于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"));
    

    有什么方法可以设置 出身背景 对于 编辑文本 在API 16和 设置边距 左侧和右侧 编辑文本 .

    3 回复  |  直到 8 年前
        1
  •  5
  •   Rehan    8 年前

    根视图上的边距无效。如其他答案所述,尝试向父布局添加填充。
    但是,我建议您不要用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"));
    

    对话框布局.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>
    
        2
  •  3
  •   user5248371 user5248371    9 年前

    使用此代码,它对我有效。

         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);
    
        3
  •  0
  •   Ashvin solanki    6 年前

    愿此有所帮助

    这是我的工作。。。

    通过设置 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();
        }