2013-07-31 16 views
10

Ho il seguente problema: Ho implementato uno HorizontalScrollView che contiene in un caso uno LinearLayout e uno ImageView. In questo caso l'immagine è circa il 50% della larghezza dello schermo. Quindi voglio centrarlo. Sfortunatamente l'unico modo per trovare il centro è utilizzare layout_gravity="center" su LinearLayout.Android - Imposta Layout_Gravity al livello di programmazione per LinearLayout

Ecco il mio xml:

<HorizontalScrollView 
      android:layout_gravity="center" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"> 

     <LinearLayout 
       android:orientation="horizontal" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"> 

     <ImageView      
       android:src="@drawable/myImg" 
       android:layout_width="wrap_content" 
       android:adjustViewBounds="true" 
       android:layout_height="150dp"/> 

     </LinearLayout> 

    </HorizontalScrollView> 

ma ho bisogno di impostare la layout_gravity di programmazione. Qualcuno ha un'idea di come posso ottenere questo o conosce un modo diverso? Tutte le cose che ho trovato tramite Google non funzionano per me come this post.

Grazie!

+0

avete provato encapsultaing l'ImageView in un LinearLayout e impostare i parametri per il layout, come mostrato nel post che hai visitato? – ClaireG

+0

sì, l'ho provato ... non funziona – Ron

risposta

29

quarantina ti piace questo:

LayoutParams lp = new LayoutParams(); 
    lp.gravity= Gravity.CENTER_HORIZONTAL; 
    myImg.setLayoutParams(lp); 

UPDATE: Un altro modo per farlo:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
       LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
      params.weight = 1.0f; 
      params.gravity = Gravity.CENTER; 

      imageView.setLayoutParams(params); 
+4

non funziona. scusa ... – Ron

+0

Quindi, affinché il valore di gravità funzioni, l'elemento deve avere MATCH_WIDTH impostato o occupare l'intera larghezza del suo genitore. Se questo non è il caso, allora deve avere un valore di peso del 100% (che lo rende completamente occupato dal genitore), solo allora il lavoro gravitazionale viene impostato. – somedev

6

Ponga il ImageView in un FrameLayout come questo:

Rimosse in più codice

ImageView image = new ImageView(mContext); 
image.setLayoutParams(new FrameLayout.LayoutParams(width, height, gravity)); 

Ulteriori informazioni here.

+1

non funziona ... ma in ogni caso, perché devo inserire l'immagine all'interno di un 'FrameLayout' e mettere FrameLayout.Params su imageView e non sul genitore? – Ron

+0

il terzo parametro non è 'gravità 'è' peso'! –

0

penso, questo funzionerà per voi

FrameLayout.LayoutParams layoutParams = new ScrollView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
layoutParams1.gravity(YourGravity); 
yourImage.setLayoutParams(layoutParams);