2010-07-20 4 views
24

Следующий код XML не работает, чтобы отцентрировать ImageView в LinearLayout:Как центрировать ImageView в LinearLayout?

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <ImageView 
     android:id="@+id/myimg" 
     android:layout_width="36dip" 
     android:layout_height="36dip" 
     android:scaleType="fitXY" 
     android:layout_gravity="center_horizontal" 
     android:background="@drawable/my_background" 
    /> 
</LinearLayout> 

И это RelativeLayout код, который удивительно работает:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <ImageView 
     android:id="@+id/myimg" 
     android:layout_width="36dip" 
     android:layout_height="36dip" 
     android:scaleType="fitXY" 
     android:layout_centerHorizontal="true" 
     android:background="@drawable/my_background" 
    /> 
</RelativeLayout> 

Может кто-нибудь сказать мне, почему? Благодаря!

+0

Я никогда не мог получить гравитационный атрибуты работают правильно. Я бы просто пошел с относительной планировкой. – Falmarri

+0

Без масштабирования изображения (scaleType) вы можете это сделать, изменив андроид: layout_width = "36dip" на "fill_parent". –

+2

У меня всегда есть проблемы с гравитацией. Одна вещь, которую вы можете попробовать, - поместить атрибут layout_gravity в * parent * - LinearLayout - вместо ImageView. – MatrixFrog

ответ

2

Проблема заключается в том, что вы используете android: layout_width = "fill_parent" в LinearLayout. Измените его на «wrap_content»

+0

Это, к сожалению, делает только обертывание: границы линейной компоновки практически равны (относительно возможных прокладок и полей) по сравнению с ImageView вместо центрирования ImageView внутри некоторого большего LinearLayout. –

28

Вы должны установить вертикальную ориентацию на вашем LinearLayout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical"> 
<ImageView 
    android:id="@+id/myimg" 
    android:layout_width="36dip" 
    android:layout_height="36dip" 
    android:scaleType="fitXY" 
    android:layout_gravity="center_horizontal" 
    android:background="@drawable/my_background" 
/> 

+0

Это сработало для меня, хороший ответ –

7

Что обычно работает для меня, я обернуть ImageView внутри RelativeLayout, когда затем переходит в LinearLayout, убедившись, что атрибуты высоты и ширины relativelayout соответствуют linearLayout. И вы знаете, как сохранить изображение в центре релятивирования.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content"> 
       <RelativeLayout 
         android:layout_width="match_parent" 
         android:layout_height="match_parent" 
         <ImageView 
          android:id="@+id/myimg" 
          android:layout_width="36dip" 
          android:layout_height="36dip" 
          android:scaleType="fitXY" 
          android:orientation="vertical" 
          android:layout_gravity="center_horizontal" 
          android:background="@drawable/my_background" 
         /> 
       </RelativeLayout> 
    </LinearLayout> 
+2

Что случилось с парнями LinearLayout ??? –

2
<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="0dp" 
    android:layout_weight="0.50" 
    android:gravity="center" 
    android:layout_height="wrap_content"> 
    <ImageView 
     android:id="@+id/addToDateOrReceipt" 
     android:layout_width="25dp" 
     android:layout_height="25dp" /> 
</LinearLayout> 

Установите андроид: гравитационное свойство вашего LineraLayout к центру.

12

Извините, но выше код не работает для меня, поэтому я разместить свой код, который работал для меня

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/colorPrimary" 
    android:gravity="center_horizontal|center_vertical" 
    android:orientation="vertical"> 

    <ImageView 
     android:id="@+id/ivPic" 
     android:layout_width="70dp" 
     android:layout_height="70dp" /> 

</LinearLayout> 

Я надеюсь, что это помогает для тех, кто нуждается.

+1

Это полезно для меня, Итак, я продвигаю ваш ans :) –

+1

Отлично работает для меня. Спасибо! –

0

Вы также можете сделать это с помощью FrameLayout и внутри него LinearLayout, поэтому его проще управлять и проще разместить в центре обзора.

<?xml version="1.0" encoding="utf-8"?> 

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:orientation="vertical"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/app_name" /> 

    <ImageView 
     android:id="@+id/ivPic" 
     android:layout_width="70dp" 
     android:layout_height="70dp" /> 
</LinearLayout> 
</FrameLayout> 

Я знаю, что вы спрашиваете о том, как отцентрировать ImageView в макете, но хотел, чтобы обеспечить еще один способ сделать это

Смежные вопросы