在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
后工作,在测量发生之前它们不起作用
答案 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().width
和getLayoutParams().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());