2016-02-12 33 views
2

我有下面的XML文件安卓重力=“中心”工作不正常

<?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="#000000" 
       android:orientation="vertical"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_margin="100dp" 
     android:orientation="vertical" 
     android:background="#ff0000"> 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="#00ff00" 
      android:text="Button" 
      android:layout_gravity="center"/> 
    </LinearLayout> 

</LinearLayout> 

它具有以下设计。

enter image description here

不应在button被放置在中心垂直以及?我知道layout_gravitygravity是如何工作的。所以根据我的理解,按钮应该在水平方向和垂直方向都处于中心位置。

回答

4

您必须在LinearLayout

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_margin="100dp" 
    android:orientation="vertical" 
    android:gravity="center" 
    android:background="#ff0000"> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="#00ff00" 
     android:text="Button" 
     android:layout_gravity="center"/> 
</LinearLayout> 

+0

这工作正常。谢谢。但是在linearLayout中不添加gravity =“center”,它如何将按钮放置在水平中心? – thedarkpassenger

+0

你是什么意思?你不能用其他方式做。由于LinearLayout将方向上的子视图放置在一个方向上,因此您必须设置重力,以便了解它必须放置的位置 –

0

基于@vspallas答案,我找到了解决我的问题添加android:gravity="center"。基本上这种行为的原因是我为我的LinearLayout指定vertical方向。这意味着我在layout内的任何视图都应该以垂直方向显示,即一个在另一个之下。如果我有我的LinearLayout内部的三个观点,那么结果应该是这样的

View1 
View2 
View3. 

但是,如果我做了android:layout_gravity="center"用于视图2和有它的工作,根据我的期望,那么它会在中心放置View2,而不是在View1View3之间,这与orientation属性相矛盾。因此,Android允许将引力设置为父级本身,这将确保所有视图继承相同的重力,并且方向相同(LinearLayout)。