AlertDialog 中的 Android EditText 似乎太宽了

Posted

技术标签:

【中文标题】AlertDialog 中的 Android EditText 似乎太宽了【英文标题】:Android EditText in AlertDialog seems too wide 【发布时间】: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。

【问题讨论】:

【参考方案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 已被标记为具有尚未满足的限制。

以上是关于AlertDialog 中的 Android EditText 似乎太宽了的主要内容,如果未能解决你的问题,请参考以下文章

Android中的AlertDialog(警告对话框)

Android中的AlertDialog遇到的错误

没有AlertDialog的android中的多选微调器

AlertDialog 中的 Android EditText 似乎太宽了

Android中的AlertDialog使用示例三(单向选择确定对话框)

Android中的AlertDialog使用示例四(多项选择确定对话框)