web-dev-qa-db-ja.com

ANDROIDでプログラムで子のレイアウト幅を設定しますか?

私のコードには、複数の子レイアウトを持つXMLファイルがあります。 Aそして、デバイスの画面幅に応じて、これらの子レイアウトの幅の1つをプログラムで設定したいだけです。これまで、レイアウトパラメータ、setparam、およびその他のメソッドを試しましたが、レイアウトIDの取得時にnullポインタ例外が表示されます。

親レイアウトは相対レイアウトで、最初の子レイアウトは線形レイアウトです(「このレイアウトでは幅を変更する必要があります」)

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/parentlayout"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent">

    <LinearLayout
        Android:id="@+id/childlayout"
        Android:layout_width="250dip"
        Android:layout_height="fill_parent"
        Android:orientation="vertical" 
        Android:background="#153746">
        <LinearLayout
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:orientation="vertical"
            Android:background="@drawable/sub_title"
            Android:gravity="center_vertical" >
            <TextView
                Android:id="@+id/menu_header_label"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:textStyle="bold"
                Android:text="asd"
                Android:textColor="#ffffff"
                Android:layout_marginLeft="10dip" />

            <ImageView
                Android:id="@+id/menu_header"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content"
                Android:layout_gravity="center_horizontal" />
        </LinearLayout>
        <ListView
            Android:id="@+id/menu_listview"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:divider="@Android:color/darker_gray"
            Android:dividerHeight="1dip"
            Android:scrollingCache="false" />
    </LinearLayout>

    <FrameLayout
        Android:id="@+id/overlay"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent" >
    </FrameLayout>

</LinearLayout>

Javaコード:-

     public class SlideMenu extends LinearLayout {

    // keys for saving/restoring instance state
    public final static String KEY_MENUSHOWN = "menuWasShown";
    private final static String KEY_STATUSBARHEIGHT = "statusBarHeight";
    private final static String KEY_SUPERSTATE = "superState";

//  Display display = ((WindowManager) getWindowToken()).getDefaultDisplay(); 
//  int width = display.getWidth();  // deprecated
//  int height = display.getHeight();  // deprecated
//  float layWidth = (width*70)/100;
//  
////    LinearLayout view= (LinearLayout)findViewById(R.id.childlayout);
////    LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) view.getLayoutParams();
////    params.width = 130;
////    view.setLayoutParams(params);
//  view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, theSizeIWant));

    public static class SlideMenuItem {
        public int id;
        public Drawable icon;
        public String label;
    } 

これが私のコードスニペットで、これまでに試した部分にコメントして、すばらしい結果が得られます。

11
Manish

これを行うことができますか:IDをこの子線形レイアウトに設定してから:

LinearLayout linLayout = (LinearLayout) findViewById(R.id.yourID);
LinearLayout .LayoutParams layoutParams= new 
LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 
LinearLayout.LayoutParams.MATCH_PARENT);//or whatever , you can set the width and height programmatically and then setLayoutParams()

編集:

すでにこれを試したようです、ごめんなさい。しかし、2つの線形レイアウトはありませんか?

12
v0d1ch

これをJavaコード:

int width = 300;
int height = LayoutParams.WRAP_CONTENT;
LinearLayout childLayout = (LinearLayout) findViewById(R.id.childLayout);
childLayout.setLayoutParams(new LayoutParams(width, height));
6
MysticMagicϡ