3

在 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

我不关心视图的实际外观,我只需要这些值......

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

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

4

5 回答 5

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);
于 2013-05-12T14:58:17.613 回答
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/

于 2013-11-29T13:05:10.083 回答
0

你有没有尝试过

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

希望这可以帮助

于 2013-05-12T14:56:44.863 回答
0

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

于 2013-05-12T15:58:50.893 回答
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());
于 2014-12-11T20:27:33.737 回答