xml居中textview到左边

问题描述:

我尝试在我的屏幕顶部创建一些笔画,其中显示4件东西。左侧的后退按钮,中间的水平名称以及右侧的scoreInfoOne和scoreInfoTwo,但是位于下方。我使用下面的代码,但奇怪的是,关卡名称看起来并不居中,scoreInfoTwo的值越长,关卡名称就越左。有任何想法吗?xml居中textview到左边

<LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="35dp" 
     android:background="#25ab89" 
     android:orientation="horizontal" 
     android:weightSum="4" > 

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:layout_weight="1" 
      android:gravity="center" 
      android:orientation="vertical" > 

      <ImageView 
       android:id="@+id/ivBackButton" 
       android:layout_width="18dp" 
       android:layout_height="18dp" 
       android:src="@drawable/arrow" /> 
     </LinearLayout> 

     <TextView 
      android:id="@+id/tvScoreBoard" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:layout_weight="2" 
      android:gravity="center" 
      android:text="level" 
      android:textColor="#ffffff" 
      android:textSize="18dp" /> 

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:layout_weight="1" 
      android:gravity="right" 
      android:orientation="vertical" 
      android:paddingRight="2dp" > 

      <TextView 
       android:id="@+id/tvScoreInfoOne" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="right" 
       android:text="0/30" 
       android:textColor="#ffffff" 
       android:textSize="12dp" /> 

      <TextView 
       android:id="@+id/tvScoreInfoTwo" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="right" 
       android:text="score:" 
       android:textColor="#ffffff" 
       android:textSize="12dp" > 
      </TextView> 
     </LinearLayout> 

你的孩子的意见,必须在layout_width设置为零:

android:layout_width="0px" 

所以,你的布局会再看看这样的:

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="35dp" 
    android:background="#25ab89" 
    android:orientation="horizontal" 
    android:weightSum="4" > 

    <LinearLayout 
     android:layout_width="0px" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="1" 
     android:gravity="center" 
     android:orientation="vertical" > 

     <ImageView 
      android:id="@+id/ivBackButton" 
      android:layout_width="18dp" 
      android:layout_height="18dp" 
      android:src="@drawable/arrow" /> 
    </LinearLayout> 

    <TextView 
     android:id="@+id/tvScoreBoard" 
     android:layout_width="0px" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="2" 
     android:gravity="center" 
     android:text="level" 
     android:textColor="#ffffff" 
     android:textSize="18dp" /> 

    <LinearLayout 
     android:layout_width="0px" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="1" 
     android:gravity="right" 
     android:orientation="vertical" 
     android:paddingRight="2dp" > 

     <TextView 
      android:id="@+id/tvScoreInfoOne" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="right" 
      android:text="0/30" 
      android:textColor="#ffffff" 
      android:textSize="12dp" /> 

     <TextView 
      android:id="@+id/tvScoreInfoTwo" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="right" 
      android:text="score:" 
      android:textColor="#ffffff" 
      android:textSize="12dp" > 
     </TextView> 
</LinearLayout> 
+0

非常感谢你,这是诀窍!你能解释我出了什么问题吗?我使用了包装内容,它不应该占据比我给予的重量更多的地方,不是吗? – 2013-02-21 20:04:41

+0

'wrap_content'将忽略权重值。您应该始终使用'0px'(或任何其他测量 - “dip”,“dp”等)在布局方向上。因此,对于加权水平布局,您将宽度设置为0,对于垂直布局,您可以将layout_height设置为零。 – Phil 2013-02-21 20:06:42

首先,你不能在LinearLayout使用android:layout_gravity="anything"。对于LinearLayout,您可以使用权重来定义要使用多少空间。对于您正在尝试做的事情,我建议您使用RelativeLayout,然后您可以使用android:layout_below="@+id/other_textview来定义您想要的TextView或其他项目的位置,并且有很多android:layout_[direction]可供选择,并且可以使用layout_gravity="center_horizontal"

<RelativeLayout 
      android:layout_width="fill_parent" 
      android:layout_height="35dp" 
      android:background="#25ab89"> 

       <ImageView 
        android:id="@+id/ivBackButton" 
        android:layout_width="18dp" 
        android:layout_height="18dp" 
        android:layout_alignParentLeft="true" 
        android:layout_alignParentTop="true" 
        android:src="@drawable/arrow" /> 

       <TextView 
        android:id="@+id/tvScoreBoard" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center_horizontal" 
        android:layout_below="@id/ivBackButton" 
        android:gravity="center" 
        android:text="level" 
        android:textColor="#ffffff" 
        android:textSize="18dp" /> 

       <TextView 
        android:id="@+id/tvScoreInfoOne" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="right" 
        android:layout_below="@id/tvScoreBoard" 
        android:alignParentRight="true" 
        android:text="0/30" 
        android:textColor="#ffffff" 
        android:textSize="12dp" /> 

       <TextView 
        android:id="@+id/tvScoreInfoTwo" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="right" 
        android:layout_below="@id/tvScoreInfoTwo" 
        android:alignParentRight="true" 
        android:text="score:" 
        android:textColor="#ffffff" 
        android:textSize="12dp" /> 
</RelativeLayout> 
+0

感谢@Matt,也应该工作..这是更少的代码。前三个项目彼此相邻,所以我应该使用onRightOf我猜。 – 2013-02-21 20:08:04

+1

我只是试图得到你想要做的事情,然后写我的代码来匹配。你可以很容易地通过使用'layout_toRightOf =“”'等快速改变它。 – Matt 2013-02-21 20:09:48