0

我想设计一个可以与任何屏幕分辨率的设备一起使用的应用程序。

我这样做的想法是为我使用的每种视图类型创建一个自定义视图,并使用 XML 中指定的layout_widthlayout_height作为父大小的百分比(例如,layout_width="100dp"相当于fill_parent, 并且layout_width="50dp"意味着View的宽度将为父母的一半)。

这是TextView我制作的自定义类:

public class RSTextView extends TextView {

    public RSTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(int w, int h) {
        int parentWidth = ((View)this.getParent()).getWidth();
        int parentHeight = ((View)this.getParent()).getHeight();
        Log.i(null, "Width: " + w + "; Height: " + parentHeight);
        this.setMeasuredDimension(parentWidth * MeasureSpec.getSize(w) / 100,
                parentHeight * MeasureSpec.getSize(h) / 100);
    }
}

但是,它不起作用。和大小始终为 0 parentWidthparentHeight

有没有更好的方法来创建具有相对大小的应用程序?

如果这是正确的方法,我怎样才能View从方法中检索“父母”的大小onMeasure

4

1 回答 1

2

由于您在布局阶段检查视图的高度,因此您可能希望使用getMeasuredHeight, not getHeight,但我不确定您是否需要做您正在做的事情。从您的描述中很难看出,但似乎您可能正在尝试重新创建LinearLayout权重的行为。例如,如果您有一个LinearLayout带 3 个孩子的水平,您可以轻松地设置第一个占据其宽度的一半,而其他每个占据 25%,方法是分别为它们分配2、10px layout_widthlayout_weight1(或任何其他这些比例的权重)。

但是,如果您确实决定采用自定义View路线,请不要超载 whatlayout_heightlayout_widthdo - 使用自定义 XML 属性来获取百分比的参数(我会深入LinearLayout研究 's 的代码以查看如何layout_weight实现)。

于 2010-11-30T16:47:20.417 回答