2012-12-05 10 views
11

Nel mio codice ho un file XML con più layout figlio. Ae voglio solo impostare una larghezza di questo layout figlio a livello di programmazione in base alla larghezza dello schermo del dispositivo. fino ad ora avevo provato i parametri di Layout, setparam e altri metodi ma mostra un'eccezione di puntatore nullo per ottenere l'ID del layout.Imposta larghezza di layout figlio a livello di programmazione in ANDROID?

il mio layout genitore è un layout relativo, e 1 ° layout Bambino è un layout lineare ("per questo layout ho bisogno di cambiare larghezza")

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

del codice 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; 
    } 

ecco il mio frammento di codice e commento la parte che ho provato fino ad ora e ottengo un risultato eccellente ... ``

+0

Dov'è il tuo codice? –

+0

Non pubblicare il tuo XML come screenshot, inserisci il codice reale nella domanda. – Cerbrus

+0

E 'stato risposto qui http://stackoverflow.com/questions/5715612/how-to-set-setlayoutparams-for-linear-layout-elements –

risposta

12

Potete fare questo: Impostare l'id per questo layout lineare figlio e quindi:

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:

ti vedo già provato questo, mi dispiace. Ma ci sono due layout lineari no?

+0

yup amico ci sono più di due layout lineare !! Dado thnx per la risposta .. :) – Manish

+0

Jeah a volte non possiamo vedere l'ovvio :) – vodich

6

mettere questo in codice 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 per una risposta così rapida ... ma ho anche provato, dà un'eccezione di puntatore nullo al 4 ° linea dove siamo set params di layout :(. – Manish

+0

Allora penso che non hai trovato correttamente riferimento layout. childLayout era ancora nulla in quel punto. si prega di inviare il vostro codice –

+0

@ sherya- ho appena aggiornato il mio post !! prega di Chech che. – Manish

Problemi correlati