统一的EditText大小

时间:2011-05-17 02:23:25

标签: java android android-edittext

我正在尝试将所有编辑文本视图设置为相同大小,而不使用像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());

有关为什么这不符合我想要的方式的任何建议?

3 个答案:

答案 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属性...)