我在XML文件中将EditText元素的宽度设置为fill_parent
,但是当从代码访问它时,它返回0。
我想要的是该元素在运行时的实际宽度。我怎么能这样做。
答案 0 :(得分:2)
使用getMeasuredWidth():http://developer.android.com/reference/android/view/View.html#getMeasuredWidth%28%29
另请阅读:
当View的measure()方法返回时,必须设置其getMeasuredWidth()和getMeasuredHeight()值,以及所有View的后代的值。 View的测量宽度和测量高度值必须遵守View父母施加的约束。这保证了在测量通过结束时,所有父母都接受他们孩子的所有测量。父视图可以在其子项上多次调用measure()。例如,父母可以用未指定的维度测量每个孩子一次以找出他们想要的大小,然后如果所有孩子的无约束大小的总和太大或太小,则用实际数字再次对他们调用measure()(也就是说,如果孩子们不同意他们每人得到多少空间,父母就会介入并在第二次通过时设定规则。
http://developer.android.com/guide/topics/ui/how-android-draws.html
答案 1 :(得分:1)
您可以通过创建自定义视图并覆盖onMeasure()方法来解决此问题。如果总是在xml中对layout_width使用“fill_parent”,那么传递给onMeasusre()方法的widthMeasureSpec参数应该包含父级的宽度。
public class MyCustomView extends EditText {
public MyCustomView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
}
}
您的XML看起来像这样:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<view
class="com.company.MyCustomView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
答案 2 :(得分:0)
我将引用您之前关于此主题的答案,该答案应该有所帮助: