虽然layout_centerHorizo​​ntal设置为true,但图像视图不在父级中心

时间:2015-07-24 16:08:53

标签: android android-layout

为什么我的图像视图(橙色)不在水平线性布局(蓝色)中居中,即使它的layout_centerHorizo​​ntal设置为true:

enter image description here

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:orientation="vertical"
    tools:context=".MainActivity" tools:deviceIds="wear_square"
    android:weightSum="1">

    <TextView android:id="@+id/text" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:text="@string/hello_square" />

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#6dbdff"
        android:layout_weight="0.30"
        android:weightSum="1">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:id="@+id/imageView"
            android:layout_centerHorizontal="true"
            android:background="#ff5831"
            android:layout_weight="0.37" />
    </LinearLayout>

</LinearLayout>

2 个答案:

答案 0 :(得分:1)

您不能将layout_centerHorizo​​ntal用于线性布局的子级...这是正确的实现。注意我是如何使用gravity属性的。 (如果它是RelativeLayout的直接子项

,那么您正在使用的那个将会起作用

(编辑工作......)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
              android:layout_height="match_parent" android:orientation="vertical"
              tools:context=".MainActivity" tools:deviceIds="wear_square"
              android:weightSum="1">

    <TextView android:id="@+id/text" android:layout_width="wrap_content"
              android:layout_height="wrap_content" android:text="HELLO" />

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#6dbdff"
        android:layout_weight="0.30"
        android:weightSum="1">
        <View android:layout_width="0dp" android:layout_height="10dp"
            android:layout_weight="0.315"/>

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:id="@+id/imageView"
            android:background="#ff5831"
            android:layout_weight="0.37" />
    </LinearLayout>

</LinearLayout>

替代方案,万一你不想把东西放在图像的两边......

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
              android:layout_height="match_parent" android:orientation="vertical"
              tools:context=".MainActivity" tools:deviceIds="wear_square"
              android:weightSum="1">

    <TextView android:id="@+id/text" android:layout_width="wrap_content"
              android:layout_height="wrap_content" android:text="HELLO" />

    <FrameLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#6dbdff"
        android:layout_weight="0.30"
        android:weightSum="1">

        <ImageView
            android:layout_width="200dp"
            android:layout_height="match_parent"
            android:id="@+id/imageView"
            android:layout_gravity="center_horizontal"
            android:background="#ff5831" />
    </FrameLayout>

</LinearLayout>

答案 1 :(得分:0)

不确定你需要第二个LinearLayout,所以这里就是。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:orientation="vertical"
    tools:context=".MainActivity" tools:deviceIds="wear_square"
    android:weightSum="1">

    <TextView android:id="@+id/text" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:text="@string/hello_square" />


    <ImageView
        android:layout_width="wrap_content"
        android:src="#ff5831"
        android:layout_height="0dp"
        android:id="@+id/imageView"
        android:layout_gravity="center_horizontal"
        android:layout_weight="0.37" />

</LinearLayout>

现在,我让图像的src成为你想要看到的颜色。如果您使用实际的位图参考替换它,它将根据您使用的位图和父约束进行居中和正确调整大小

  

如果我删除android:layout_weight =&#34; 0.37&#34;线(由...添加   Android Studio)然后图像视图消失了,为什么会这样?

使用此行,imageView将知道如何根据父级调整自身大小。没有,因为imageView没有图像,所以它不能根据要显示的图像位图(缺少的)和包含它的父图像来调整自身的大小。添加要显示的图像,它将返回。

最后的建议,

完全阅读有关how android draws views的文章。它真的很棒。