2013-07-31 18 views
10

Mam następujący problem: Zaimplementowałem HorizontalScrollView, który zawiera w jednym przypadku LinearLayout i ImageView. W tym przypadku obraz ma około 50% szerokości ekranu. Więc chcę to wyśrodkować. Niestety jedyny sposób, jaki znalazłem, aby go wyśrodkować, to użycie layout_gravity="center" na LinearLayout.Android - Ustaw program Layout_Gravity programowo dla LinearLayout

Oto mój 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> 

Ale muszę ustawić layout_gravity programowo. Czy ktoś ma pomysł, jak mogę to osiągnąć, czy inaczej? Wszystkie rzeczy znalezione za pośrednictwem Google nie działają dla mnie tak jak this post.

Dzięki!

+0

próbowałeś encapsultaing się ImageView w LinearLayout i ustawiania parametrów dla tego układu, jak pokazano na odwiedzonej w poście? – ClaireG

+0

tak, próbowałem go ... nie działa – Ron

Odpowiedz

29

zrobić latków jak ten:

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

UPDATE: Innym sposobem, aby to zrobić:

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

      imageView.setLayoutParams(params); 
+4

nie działa. przepraszam ... – Ron

+0

Aby wartość grawitacji zadziałała, element musi mieć ustawienie MATCH_WIDTH lub zajmować całą szerokość jego obiektu nadrzędnego. Jeśli tak nie jest, to musi mieć wartość wagową 100% (co sprawia, że ​​w pełni zajmuje ona rodzica), dopiero wtedy ustawia pracę grawitacji. – somedev

6

umieścić ImageView w FrameLayout tak:

Usunięto dodatkowy kod

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

Więcej informacji here.

+1

nie działa ... ale w każdym razie, dlaczego mam umieścić widok obrazu wewnątrz 'FrameLayout' i umieścić FrameLayout.Params do obrazuView, a nie rodzic? – Ron

+0

trzecim parametrem nie jest "grawitacja" to "waga"! –

0

myślę, że ten będzie pracować dla Ciebie

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