2012-12-05 19 views
11

W moim Kodzie mam plik XML z wieloma układami podrzędnymi. Ai po prostu chcę ustawić programowo jedną z tych rozkładów podrzędnych według szerokości ekranu urządzenia. do tej pory wypróbowałem parametry Layout, setparam i inne metody, ale pokazuje wyjątek wskaźnika pustego na uzyskanie identyfikatora układu.Ustaw programowo szerokość układu dziecka w ANDROID?

mój układ rodzic jest względne rozmieszczenie, i 1 Układ Dziecko jest układ liniowy ("w tym układzie muszę zmienić szerokość")

<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> 

kod 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; 
    } 

Oto fragment mojego kodu i komentarz do części, którą próbowałem do tej pory, i uzyskałem dobry wynik .. ``

+0

Gdzie jest kod? –

+0

Nie publikuj swojego pliku XML jako zrzutu ekranu, podaj właściwy kod w pytaniu. – Cerbrus

+0

Odpowiedź została udzielona tutaj http://stackoverflow.com/questions/5715612/how-to-set-setlayoutparams-for-linear-layout-elements –

Odpowiedz

12

Czy możesz to zrobić: Ustaw identyfikator tego układu liniowego podrzędnego, a następnie:

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() 

EDIT:

widzę już próbowała to, przepraszam. Ale są dwa układy liniowe nie?

+0

Yup kumpel jest więcej niż dwa liniowy układ !! nut thnx za twoją odpowiedź .. :) – Manish

+0

Jeah czasami nie widzimy oczywistego :) – vodich

6

umieścić to w kodzie Java:

int width = 300; 
int height = LayoutParams.WRAP_CONTENT; 
LinearLayout childLayout = (LinearLayout) findViewById(R.id.childLayout); 
childLayout.setLayoutParams(new LayoutParams(width, height)); 
+0

@ shreya: thnx za tak szybką odpowiedź ... ale też spróbowałem tego, daje zerowy wskaźnik wyjątku na 4 linii gdzie my set layout params :( – Manish

+0

Wtedy myślę, że nie znalazłeś odniesienia do układu poprawnie, childLayout wciąż był w tym punkcie zerowy.Napisz swój kod –

+0

@ sherya- właśnie zaktualizowałem swój post !! proszę, chech to. – Manish

Powiązane problemy