Android获得了夸大的布局layout_width和layout_height值

时间:2013-05-12 14:53:46

标签: android layout

在Android中,如何获取我在XML文件中设置的值

my_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="300dp"
    android:layout_height="500dp"
    android:orientation="vertical" >
    .....
<RelativeLayout/>

我尝试过以下方法但没有成功:

View v = ((LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(
            R.layout.my_layout, null);

//this gave me -1(LayoutParams.FILL_PARENT), which is not what I want. I need 300
v.getLayoutParams().width
// same for height, it gives me -1
 v.getLayoutParams().width

我不关心View的实际外观,我只需要值......

我知道在测量完成后我可以得到视图的宽度和高度(onGlobalLayout),但这不是我需要的。我需要的是我的XML中的值。

EDIT1:我知道v.getWidth()和v.getHeight()在屏幕上显示View后工作,在测量发生之前它们不起作用

5 个答案:

答案 0 :(得分:2)

如果您要执行的操作是解析xml布局以获取某些属性,请尝试以下操作:

 Resources r = getResources();
    XmlResourceParser parser = r.getLayout(R.layout.your_layout);

    int state = 0;
    do {
        try {
            state = parser.next();
        } catch (XmlPullParserException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }       
        if (state == XmlPullParser.START_TAG) {
            //here get the attributes you want..., with AttributeSet for example
            }
        }
    } while(state != XmlPullParser.END_DOCUMENT);

答案 1 :(得分:2)

而不是这样做:

View v = ((LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(
            R.layout.my_layout, null);

这样做:

View v = ((LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(
        R.layout.my_layout, parentView,false);

这会设置父视图而不是使用null

有关详细信息,请参阅:http://www.doubleencore.com/2013/05/layout-inflation-as-intended/

答案 2 :(得分:0)

你试过吗

int width = v.getWidth();
    int height = v.getHeight();

希望这会有所帮助

答案 3 :(得分:0)

你在哪里打电话getLayoutParams().widthgetLayoutParams().height?尝试在onCreateView()上执行此操作,它在我的结束时按预期工作。

答案 4 :(得分:0)

Button b= (Button) yourView.findViewById(R.id.your_button_id); 
System.out.println("b.getMeasuredHeight()= "+b.getMeasuredHeight()); 
System.out.println("b.getMeasuredWidth()+ "+ b.getMeasuredWidth());