我正在尝试将所有编辑文本视图设置为相同大小,而不使用像px或dp这样的硬定义,而是使用wrap_content并将它们全部设置为相同的大小。这就是我所拥有的,但它不起作用:
enterAge = (EditText) findViewById(R.id.enterAge);
enterAge.addTextChangedListener(new TextWatcher1());
enterWeight = (EditText) findViewById(R.id.enterWeight);
enterWeight.addTextChangedListener(new TextWatcher2());
enterWeight.setWidth(enterAge.getWidth());
enterHeight = (EditText) findViewById(R.id.enterHeight);
enterHeight.addTextChangedListener(new TextWatcher3());
enterHeight.setWidth(enterAge.getWidth());
enterMealFrequency = (EditText) findViewById(R.id.enterMealFrequency);
enterMealFrequency.addTextChangedListener(new TextWatcher4());
enterMealFrequency.setWidth(enterAge.getWidth());
有关为什么这不符合我想要的方式的任何建议?
答案 0 :(得分:1)
完全取决于您执行此代码的时间。在布局完成之前,View
的宽度和高度值不会返回Java代码中的有效数据(这种情况发生的时间晚于布局从XML中膨胀时)。如果您在onCreate()
甚至onResume()
中执行此操作,则为时过早,getWidth()
可能会返回零。
您需要使用布局系统来确定何时可以使用有效的视图大小。
希望有帮助!
答案 1 :(得分:1)
wrap_content基本上与你所说的相反 - 它指定使视图只有它需要的大小,而不管父级大小。
您需要将UI编写为视图层次结构,其中布局描述了如何定位视图。通过将它们放在LinearLayout中,可以非常简单地创建一个垂直的文本视图行,这些文本视图的宽度都相同。
答案 2 :(得分:0)
我已经解决了类似的问题,引入了我自己的扩展EditText的类,例如
public class SimpleEditText extends EditText
{
private static float textSize=14.0;
public SimpleEditText(Context context)
{
super(context);
this.setTextSize(textSize);
}
public SimpleEditText(Context context, AttributeSet attrs)
{
super(context, attrs);
this.setTextSize(textSize);
}
public SimpleEditText(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
this.setTextSize(textSize);
}
}
在资源中,您可以直接使用对SimpleEditText的引用而不是EditText(当然,必须记住,将忽略所有与大小相关的XML属性...)