Java 统一文本大小

Java 统一文本大小,java,android,android-edittext,Java,Android,Android Edittext,我试图让所有的编辑文本视图大小相同,而不使用像px或dp这样的硬定义,而是使用wrap_内容,使它们大小相同。这就是我所拥有的,但它不起作用: enterAge = (EditText) findViewById(R.id.enterAge); enterAge.addTextChangedListener(new TextWatcher1()); enterWeight = (EditText) findViewById(R.id.enterWeight);

我试图让所有的编辑文本视图大小相同,而不使用像px或dp这样的硬定义,而是使用wrap_内容,使它们大小相同。这就是我所拥有的,但它不起作用:

    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());

有什么建议可以解释为什么它不能按我希望的方式工作吗?

这完全取决于您何时执行此代码。在布局完成之前,
视图的宽度和高度值
将不会返回Java代码中的有效数据(这种情况发生的时间晚于从XML扩展布局的时间)。如果您在
onCreate()
或甚至
onResume()
中执行此操作,则为时过早,
getWidth()
可能会返回零

您需要使用布局系统来确定何时可以使用有效的视图尺寸


希望有帮助

wrap_content从根本上与您所说的相反——它指定只使视图按需要的大小显示,而不考虑父视图的大小


您需要将UI编写为具有描述如何定位视图的布局的视图层次结构。通过将文本视图放在线性布局中,创建垂直行的文本视图非常简单。

我通过引入扩展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);
    }
}

在resource中,您可以直接使用对SimpleEdit文本的引用而不是EditText(请务必记住,所有与大小相关的XML属性都将被忽略……)

这样做是错误的;没有任何规定在第一个布局或任何其他可能重要的布局之后会发生焦点更改。您需要按照文档中的说明进行操作——通过编写父视图与布局系统交互,父视图可以实现类似onLayout()的功能,以决定如何布局其子视图。另外,像setWidth()这样的API只供布局管理器定位他们的孩子使用;我不知道。我删除了这个令人不快的建议。这是真的,但我的目标是以一种适合所有屏幕大小和尺寸的方式创建xml,从平板电脑到2.7QVGA。。。因此,他们需要有大小参数来调整到父级大小,这取决于屏幕。最后我只是用重量来做。。。除了LayOutUnFoad函数很昂贵,而且我必须在我的布局中运行它,其中有多个孩子。如果你有非常特殊的特殊布局,你应该考虑只写一个自定义视图组子类来实现你想要的布局算法。