2013-07-31 2 views
10

У меня есть следующая проблема: я внедрил HorizontalScrollView, который содержит в одном случае LinearLayout и ImageView. В этом случае изображение составляет около 50% ширины экрана. Поэтому я хочу сосредоточить его. К сожалению, единственный способ, которым я нашел центр, - использовать layout_gravity="center" на LinearLayout.Android - Установите Layout_Gravity программно для LinearLayout

Вот мой 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> 

Но мне нужно, чтобы установить layout_gravity программно. Есть ли у кого-нибудь идея, как я могу достичь этого или знаю по-другому? Все, что я нашел через Google, не работает для меня, как this post.

Спасибо!

+0

вы пробовали encapsultaing в ImageView в LinearLayout и настройки параметров для этого расположения, как показано на почте вы посетили? – ClaireG

+0

Да, я пробовал ... не работает – Ron

ответ

29

Do нечто вроде этого:

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

UPDATE: Еще один способ сделать это:

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

      imageView.setLayoutParams(params); 
+4

не работает. извините ... – Ron

+0

Итак, для того, чтобы значение силы тяжести работало, элемент должен иметь значение MATCH_WIDTH или занимать полную ширину его родителя. Если это не так, значит, оно должно иметь значение веса 100% (что делает его полностью занятым родителем), только тогда установка гравитации работает. – somedev

6

Помещенный ImageView в FrameLayout, как это:

Удалены дополнительные код

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

Дополнительная информация here.

+1

не работает ... но так или иначе, зачем мне помещать изображение в «FrameLayout» и помещать FrameLayout.Params в imageView, а не в родительский? – Ron

+0

Третий параметр - это не 'гравитация', а' вес'! –

0

Я думаю, это один будет работать для вас

FrameLayout.LayoutParams layoutParams = new ScrollView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
layoutParams1.gravity(YourGravity); 
yourImage.setLayoutParams(layoutParams); 
Смежные вопросы