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

これを行う代わりに:

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 に答える
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 に答える
0

やってみました

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

お役に立てれば

于 2013-05-12T14:56:44.863 に答える
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 に答える
0

どこに電話getLayoutParams().widthしていgetLayoutParams().heightますか?でそれを試してみてくださいonCreateView()。私の側では意図したとおりに機能しています。

于 2013-05-12T15:58:50.893 に答える