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 似乎太宽了的主要内容,如果未能解决你的问题,请参考以下文章
AlertDialog 中的 Android EditText 似乎太宽了