如何将ImageView置于LinearLayout中心?

时间:2010-07-20 19:18:41

标签: android

以下XML代码无法将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>

有人可以告诉我为什么吗?谢谢!

8 个答案:

答案 0 :(得分:32)

您必须在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"
/>

答案 1 :(得分:24)

很抱歉,但上面的代码对我不起作用,所以我发布了适用于我的代码

<?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>

我希望对有需要的人有所帮助。

答案 2 :(得分:7)

通常对我有用的是,我将imageview包装在RelativeLayout中,然后进入LinearLayout,确保relativelayout的height和width属性与linearLayout匹配。并且您知道如何将imageview保持在relativelayout的中心。

 <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>

答案 3 :(得分:4)

<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的android:gravity属性设置为居中。

答案 4 :(得分:2)

问题是因为你在LinearLayout中使用android:layout_width =“fill_parent”。 将其更改为“wrap_content”

答案 5 :(得分:2)

让UI保持简洁易懂。

 <LinearLayout
        android:id="@+id/relativeLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/phone_auth_bg"
        android:orientation="vertical">


        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center">

            <ImageView
                android:id="@+id/imageMobile"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:src="@drawable/phone" />

        </RelativeLayout>

如果需要在图片部分更改任何属性,则可以进行更改,因为它不会导致布局UI发生任何更改。

答案 6 :(得分: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集中在一个布局中但是想提供另一种方法来实现它

答案 7 :(得分:0)

尝试在LinearLayout中使用layout_gravity和gravity属性,以使所有子项在默认情况下居中。

例如,

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SplashActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#000000"
        android:orientation="vertical"
        android:layout_gravity="center"
        android:gravity="center">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:foregroundGravity="center"
            app:srcCompat="@mipmap/app_icon_foreground">
        </ImageView>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Authenticator"
            android:textColor="#FFF"
            android:textSize="40dp"
            android:layout_margin="10dp">
        </TextView>
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

以上是启动屏幕活动。因此,有两个子级-ImageView和TextView。两者都居中对齐。