Android ImageView的重量大小不在中心LinearLayout

我意识到这可能是一个微不足道的布局问题,但我似乎无法按照我所希望的方式工作,而没有在我觉得太多的容器布局中进行分层。 我想要做的是设置一个ImageView,以满足以下条件:

  1. ImageView的宽度是其父级的宽度的某个给定百分比(现在的屏幕宽度)。
  2. ImageView在屏幕中水平居中。

我已经使用XML布局创build了一个testing用例,但实际上我将以编程方式创build这些布局和视图; 我认为这不是为了弄清楚正确的布局。

我比较熟悉Android布局中的权重,以及它们通常如何用相对加权因子来布局多个视图。 为了满足条件1,我创build了一个容器LinearLayout(水平方向),设置它的weightSum = 1,然后用我想要的任何比例(比如说0.5)embedded我的ImageView。 这工作!

接下来,我想让ImageView水平居中在屏幕上。 所以我把重心设置为“center”/“centerHorizo​​ntal”。 这是我卡住的地方,因为无论我select的重力/ layout_gravity设置如何总是alignment到左侧。

布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFFFFF"> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:weightSum="1.0"> <ImageView android:src="@drawable/earth" android:adjustViewBounds="true" android:layout_width="0" android:layout_height="wrap_content" android:layout_weight="0.5" android:layout_gravity="center_horizontal" android:id="@+id/imageView1" /> </LinearLayout> </LinearLayout> 

结果:

生成的图像与左侧对齐

我真正想要达到的是这样的:

期望的结果

但为了实现这一点,我不得不在我的ImageView的两侧插入两个哑权LinearLayouts,像这样:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFFFFF"> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:weightSum="1.0"> <LinearLayout android:orientation="horizontal" android:layout_width="0" android:layout_height="wrap_content" android:layout_weight="0.25"/> <ImageView android:src="@drawable/earth" android:adjustViewBounds="true" android:layout_width="0" android:layout_height="wrap_content" android:layout_weight="0.5" android:layout_gravity="center_horizontal" android:id="@+id/imageView1" /> <LinearLayout android:orientation="horizontal" android:layout_width="0" android:layout_height="wrap_content" android:layout_weight="0.25"/> </LinearLayout> </LinearLayout> 

在我看来,这是一个丑陋和尴尬的布局,不仅是因为我现在不得不使用另外3个LinearLayout来处理我的视图的大小和位置,而且我想以编程的方式来完成所有的布局并dynamic地。 我可能会决定在运行时左右alignment视图,或者相对于屏幕宽度更改缩放比例,这个解决scheme需要添加/删除虚拟布局视图并适当设置所有权重。

我希望有更好的布局比我会有更好的解决scheme! 理想情况下,我可以设置“重力”(虽然我还没有能够得到这个工作),或者一些替代的方式来设置宽度,而不需要水平LinearLayout容器和权重,因为没有容器我可以中心水平地在我的顶级垂直LinearLayout。

谢谢!

编辑:我只是意识到,在我的第二次布局尝试使用虚拟填充LinearLayouts,我可以做第二次填充LinearLayout(设置为0.25的重量),并在我的ImageView之前使用一个虚拟填充LinearLayout,因为它们是相对于预定在父母的weightSum。 例如:

  <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:weightSum="1.0"> <LinearLayout android:orientation="horizontal" android:layout_width="0" android:layout_height="wrap_content" android:layout_weight="0.25"/> <ImageView android:src="@drawable/earth" android:adjustViewBounds="true" android:layout_width="0" android:layout_height="wrap_content" android:layout_weight="0.5" android:layout_gravity="center_horizontal" android:id="@+id/imageView1" /> </LinearLayout> 

仍然不是我所希望的理想解决scheme。

Solutions Collecting From Web of "Android ImageView的重量大小不在中心LinearLayout"