2013-03-15 10 views
14

Ciao io sto usando seguente struttura di layout all'interno LinearLayoutModificare la larghezza di layout relativa e l'altezza in modo dinamico

<TableLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

    <TableRow 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 
    </TableRow> 

    <TableRow 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/tv1" 
      android:layout_height="wrap_content" 
      android:gravity="left" 
      android:paddingLeft="10dp" 
      android:textColor="#000" /> 

     <TextView 
      android:id="@+id/tv2" 
      android:layout_height="wrap_content" 
      android:layout_weight="1.0" 
      android:gravity="right" 
      android:paddingRight="10dp" 
      android:textColor="#000" /> 
    </TableRow> 
</TableLayout> 

<ImageView 
    android:id="@+id/img1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" /> 

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="320px" 
    android:layout_height="320px" 
    android:gravity="center" > 
</RelativeLayout> 

e voglio impostare relativa larghezza del layout e l'altezza in modo dinamico da file java invece di impostare a 320px nel file XML, ma non è in grado di farlo, il cambiamento dell'orientamento non è un problema, perché lo limito a solo in modalità verticale. E 'possibile impostare il layout relativo a pieno schermo utilizzando match_parent ma devo mettere un altro vista sullo schermo in modo è possibile o devo raggiungere in altro modo ...

+0

Per impostare la larghezza di layout in modo dinamico si dovrà estendere la classe RelativeLayout da una classe che si è creato e l'override del metodo onMeasure – Neil

+0

Grazie per la risposta, ho provato ogni cosa e che sta dando eccezione calco quando provo per impostare la larghezza e l'altezza in modo dinamico. Il layout relativo contiene anche altri child come visualizzazioni di immagini, quindi lo prendo come View Group nel file java ma non riesco a farlo. –

+0

Si prega di inviare l'eccezione e il codice dove punta a – Neil

risposta

22

Android non aggiorna il layout di viste con wrap_content una volta che è stato visualizzato. Anche con invalidate() o requestLayout(). Quindi, se aggiungi una vista figlio o modifichi il contenuto in modo dinamico, sei fregato.

getLayoutParams().height = x plus requestLayout() sono una buona soluzione se si conosce la "x" e se è necessario farlo SOLAMENTE UNA VOLTA. Successivamente si perde lo wrap_content in LayoutParams, poiché è stato sovrascritto.

Per risolvere ciò, ho scritto una classe statica che ricalcola le dimensioni e forza l'aggiornamento del layout per le viste con wrap_content. Il codice e le istruzioni per l'uso sono disponibili qui:

https://github.com/ea167/android-layout-wrap-content-updater

Enjoy!

+0

Hey Eric, hai un esempio di utilizzo del tuo codice? Non riesco ad accedere ai metodi della tua classe ?! – patrics

+0

Hai effettivamente salvato la mia vita con quella classe. Grazie mille. – Namnodorel

+0

Prego @Namnodorel! Sono contento che l'abbia aiutato :) – Eric

13

provare a utilizzare questa

getLayoutParams().height= x; 
requestLayout(); or invalidate(); 
2

Da sotto il codice u può ottenere l'altezza del dispositivo e larghezza: -

Display display = getWindowManager().getDefaultDisplay(); 
    int width = (display.getWidth()); 
    int height = (display.getHeight()); 

paramsTop ur layout di realative: -

Ora u può impostare l'altezza o la larghezza ciò che si desidera.

 paramsTop = new RelativeLayout.LayoutParams(width, height); 
+0

Questo è un codice deprecato. Fai riferimento alla seguente discussione per il codice non deprecato: http://stackoverflow.com/questions/4743116/get-screen-width-and-height – Simon

2

È possibile impostare Visto dimensioni dinamicamente utilizzando LayoutParams. Qualcosa di simile a questo:

RelativeLayout layout = (RelativeLayout) findViewById(R.id.yourlayout_id); 
// Gets the layout params that will allow you to resize the layout 
LayoutParams params = layout.getLayoutParams(); 
params.height = 320; 
params.width = 320; 
5

dare un id per il layout relativo a XML:

android:id="@+id/relativelayout" 

ora nel file java scrivere questo:

RelativeLayout Rl = (RelativeLayout) findViewById(R.id.relativelayout); 

RelativeLayout.LayoutParams layout_description = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT or YourUserDefinedwidth, 
         RelativeLayout.LayoutParams.FILL_PARENT or YourUserDefinedHeight); 

Rl.setLayoutParams(layout_description); 
2

Ho affrontato questo problema, la soluzione migliore per il cambiamento della larghezza del layout relativo e l'altezza in modo dinamico come questo

RelativeLayout relMain = (RelativeLayout) convertView.findViewById(R.id.relMain); 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    params.width =200; 
params.height =200; 
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
     relMain.setLayoutParams(params); 
+0

Ha funzionato per me :) –

0

Se l'intenzione di modificare l'altezza, allora questo sarebbe un trucco.

RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.yourId); 
relativeLayout.getLayoutParams().height = 100; 
relativeLayout.getLayoutParams().width = 100; 
Problemi correlati