【问题标题】:Android EditText in AlertDialog seems too wideAlertDialog 中的 Android EditText 似乎太宽了
【发布时间】:2011-06-23 01:39:29
【问题描述】:

下图中的 EditText 似乎太宽了。我假设我以某种方式滥用了 SDK,直到确信我不是在寻找一种方法来指定 EditText 两侧的一些边距/填充像素。

这个看起来更合适。

这是我的代码(创建第一个“创建标签”对话框):

final Dao<Tag, Integer> tagDao = getHelper().getTagDao();

final EditText input = new EditText(this);
input.setSingleLine(true);
input.setHint(R.string.create_tag_dialog_hint);

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(input);
builder.setTitle(getString(R.string.create_tag_dialog_title));
builder.setPositiveButton(
    getString(R.string.create_tag_dialog_positive),
    new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            String value = input.getText().toString().trim();
            Toast.makeText(getApplicationContext(), value, Toast.LENGTH_SHORT).show();
            Tag tag = new Tag(value);
            try {
                    tagDao.create(tag);
            } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
            }
        }
    });
builder.setNegativeButton(
    getString(R.string.create_tag_dialog_negative), null);
builder.show();

抱歉帖子太长,感谢任何有用的 cmets。

【问题讨论】:

    标签: android android-edittext width android-alertdialog


    【解决方案1】:

    尝试使用setPadding 方法在您的EditText 上设置一些填充。这应该在 EditText 的边缘和对话框的边界之间添加一个间隙。否

    【讨论】:

    • 填充适用于视图内的内容,因此EditText.setPadding()EditText 内的文本周围创建空间。我确实在builder.setView(input) 之后尝试了((View) input.getParent()).setPadding(10, 10, 10, 10),但这导致了一个空指针异常。无论如何,我不想找到一种方法来根据我的个人喜好(5px 左右)对其进行自定义,我希望允许 SDK 正确格式化它。我假设我使用 SDK 不正确,因此格式看起来不正确。
    【解决方案2】:

    你可以这样做:

    LinearLayout layout = new LinearLayout(this);
    layout.setOrientation(LinearLayout.VERTICAL);
    layout.setGravity(Gravity.CENTER_HORIZONTAL);
    final EditText input = new EditText(this);
    input.setSingleLine(true);
    layout.setPadding(10, 0, 10, 0);
    input.setHint("Hint");
    layout.addView(input);
    
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setView(layout);
    

    此外,setSingleLine 已被弃用。你应该使用InputStyle

    【讨论】:

    • 感谢您对弃用 SingleLine 的提醒。他们没有在文档中到处提到它。尽管如此,我似乎不需要选择一些像素来纠正这个问题。我假设目前的结果是不正确的,因为我滥用了AlertDialog.Builder(或者它可能完全是错误的技术)。
    【解决方案3】:

    将布局 marginleft 和布局 marginright 设置为 5sp。边距设置视图组周围的空间。看看ViewGroup.MarginLayoutParams

    【讨论】:

    • 我不完全确定如何应用它......但尽管 sp 不是 px,它仍然是我任意设置一些间距而不是让 android 使用默认间距。我不想根据个人喜好调整布局,我希望 Android 能够根据自己的喜好进行调整。
    【解决方案4】:

    我自己整理了一下。使用AlertDialog 的实例,您可以指定setView 并传入间距参数。这将起作用。

    final EditText input = new EditText(this);
    
    AlertDialog alertDialog = new AlertDialog.Builder(this).create();
    alertDialog.setTitle("Title");
    alertDialog.setMessage("Message");
    alertDialog.setView(input, 10, 0, 10, 0); // 10 spacing, left and right
    alertDialog.setButton("OK", new OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // Clicked
        }
    });
    alertDialog.show();
    

    编辑:我知道这个问题很老,但没有提供解决方案。

    【讨论】:

    • 注意:alertDialog.setView(View, int, int, int, int); 在新的 android api 版本中不存在。
    • @DavidPassmore 你有这种方法的潜在替代品吗??
    • @DavidPassmore 不,它存在。至少如果您使用的是 appcompat v7 AlertDialog
    • Builder.setView 只能在同一个库组中调用 (groupId=androidx.appcompat) 检查信息:此 API 已被标记为具有尚未满足的限制。
    猜你喜欢
    • 1970-01-01
    • 2015-01-07
    • 2017-07-09
    • 2020-12-06
    • 2016-08-10
    • 2020-05-05
    • 2010-12-26
    • 1970-01-01
    • 2021-03-04
    相关资源
    最近更新 更多