我想设计一个可以使用任何屏幕分辨率设备的应用程序。
我的想法是为我使用的每种类型的View创建一个自定义视图,并使用XML中指定的layout_width和layout_height作为父级大小的百分比(例如,layout_width =“100dp”等效) to 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);
}
}
但它不起作用。 parentWidth和parentHeight大小始终为0.
那么,首先,以这种方式做到这一点是个好主意,还是你有更好的想法来创建一个相对大小的应用程序?
如果这是正确的方法,我如何从onMeasure方法中检索View的父母大小?
谢谢!
答案 0 :(得分:2)
由于您在布局阶段检查了视图的高度,因此您可能希望使用getMeasuredHeight
,而不是getHeight
,但我不确定您是否需要执行您所做的事情干得好从您的描述中很难说,但似乎您可能正在尝试重新创建LinearLayout
权重的行为。例如,如果您有一个包含3个孩子的水平LinearLayout
,则可以轻松地将第一个占据宽度的一半,而其他每个占据25%的费用0px
{{1} } s和layout_width
分别为2,1和1(或任何其他比例的权重)。
但是,如果您决定使用自定义layout_weight
路由,请不要重载View
和layout_height
所做的事情 - 使用自定义XML属性来获取百分比的参数(我将深入研究layout_width
的代码,了解LinearLayout
是如何实现的。