【问题标题】:Android linear layout align center and rightAndroid 线性布局居中右对齐
【发布时间】:2011-12-02 01:05:46
【问题描述】:

这就是我所拥有的:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/LinearLayout01"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:background="#FFFFFF">
    <LinearLayout android:id="@+id/LinearLayout01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:background="#E30000"
        android:layout_gravity="center_horizontal|center_vertical"
        android:gravity="center_horizontal|center_vertical">
        <TextView 
            android:id="@+id/TextView00"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#FFFFFF"
            android:textSize="20px"
            android:textStyle="bold"
            android:text="Something"
            android:gravity="right|center_vertical"
            />
        <LinearLayout android:id="@+id/LinearLayout01"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:orientation="horizontal"
            android:gravity="right|center_vertical"
            android:layout_gravity="center_vertical"
            android:background="#E30000">
            <Button 
                android:id="@+id/btnCalls"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:drawableLeft="@drawable/icon"
                android:gravity="right|center_vertical"
            />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

我想要这个:

因此水平居中对齐文本,垂直居中对齐按钮。

我错过了什么?我没有尝试过RelativeLayout,我更喜欢LinearLayout 来解决这个问题。

【问题讨论】:

    标签: android layout android-linearlayout center


    【解决方案1】:
    android:gravity="right|center_vertical"
    

    将您的 TextView 向右对齐。 center_horizo​​ntal 怎么样?

    而且你的LinearLayouts有相同的ID,如果没有更多的代码,那么我会删除其中一个。

    【讨论】:

    • 尝试将textview的宽度设置为fill_parent
    • 这不是解决方案。重力仅适用于文本内容。不知道这是如何获得赞成票的。
    【解决方案2】:

    试试这个

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout android:id="@+id/LinearLayout01"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:background="#FFFFFF">
        <LinearLayout android:id="@+id/LinearLayout01"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:orientation="horizontal"
            android:background="#E30000"
            android:layout_gravity="center_horizontal|center_vertical" 
            android:gravity="center_vertical">
            <TextView 
                android:id="@+id/TextView00"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#FFFFFF"
                android:textSize="20px"
                android:textStyle="bold"
                android:text="Something"
                android:layout_weight="1" 
                android:gravity="center"/>
            <LinearLayout android:id="@+id/LinearLayout01"
                android:layout_height="wrap_content"
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:orientation="horizontal"
                android:gravity="right|center_vertical"
                android:layout_gravity="center_vertical"
                android:background="#E30000"                
                android:layout_width="wrap_content">
                <Button 
                    android:id="@+id/btnCalls"
                    android:layout_width="wrap_content"
                    android:drawableLeft="@drawable/icon"
                    android:gravity="right|center_vertical" 
                    android:layout_height="wrap_content" 
                    android:layout_margin="5dip"/>
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>
    

    【讨论】:

    • 差不多。文本视图位于按钮左侧位置的中心,但不在显示宽度的中心。
    • 我错过了关于 textView 在显示中心对齐的部分。如果文本宽度大于显示宽度减去按钮宽度,应该如何对齐?
    • 我发现如果 textview 和 linearlayout 彼此相邻,这意味着我可以在 textview 中居中对齐文本,但不能在显示宽度中居中对齐。所以线性布局无法解决这个问题。
    • 它留给您的选项比 - 为您的 textView 添加左边距按钮的大小(或在文本的左侧添加假的不可见按钮,与右侧的大小相同,这实际上是一个肮脏的黑客)或使用相对布局
    • 是的,有了这个技巧,它就可以解决。我通过使用相对布局解决了它。尽管我接受了您的解决方案,但考虑到您是最接近解决方案的人并且出于黑客的想法。
    【解决方案3】:

    我发现没有一个答案完全符合 OP 的预期,但 RelativeLayout 解决方案是最接近的。除了 TextView 没有居中。但是,使用 layout_centerInParent=true,就像一个魅力:

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView 
             android:id="@+id/TextView00"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:textColor="#FFFFFF"
             android:textSize="20px"
             android:textStyle="bold"
             android:text="Something"
             android:layout_centerInParent="true" />
    
        <Button 
             android:id="@+id/btnCalls"
             android:drawableLeft="@drawable/icon"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_alignParentRight="true"/>
    </RelativeLayout>
    

    【讨论】:

    • "layout_centerInParent=true" 为我的文本视图居中工作!
    【解决方案4】:

    您在文本视图中使用了android:gravity="right|center_vertical"。使用android:gravity="center"

    【讨论】:

      【解决方案5】:

      尝试在你想看左边的元素和你想看右边的元素之间的水平LinearLayout中添加空视图,例如:

          <LinearLayout
              android:layout_width="fill_parent"
              android:layout_height="wrap_content" >
      
              <Button
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content" />
      
              <View
                  android:layout_width="0dp"
                  android:layout_height="0dp"
                  android:layout_weight="1"
                  />                
      
              <Button
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content" />
      
          </LinearLayout>
      

      【讨论】:

      • 请不要对多个问题发布完全相同的答案。如果问题是重复的,请在问题上留下评论以表明这一点。如果问题不重复,请调整您的代码和对所提问题的回答。
      【解决方案6】:

      TextViewLinearLayout 定义布局权重

      android:layout_weight="1" 设置为TextView

      android:layout_weight="0" 设置为LinearLayout

      并将layout_width="wrap_content" 更改为LinearLayout 并将layout_gravity="center" 设置为TextView

      【讨论】:

      • 不,它没有。我发现如果 textview 和 linearlayout 彼此相邻,这意味着我可以将 textview 中的文本居中对齐,但不能居中对齐显示的宽度。
      • 最好使用相对布局。如果您不知道相对布局,我将为上述布局提供答案。
      【解决方案7】:

      我认为,gravity 是指组件内事物的位置(对于 textview,它表示您给定的文本)在组件中 layout_gravity 表示组件本身在整个布局中的位置。所以...

      尝试使用:

      <?xml version="1.0" encoding="utf-8"?>
          <LinearLayout android:id="@+id/LinearLayout01"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:background="#FFFFFF"
              >
              <LinearLayout android:id="@+id/LinearLayout01"
                  android:layout_width="fill_parent"
                  android:layout_height="wrap_content"
                  xmlns:android="http://schemas.android.com/apk/res/android"
                  android:orientation="horizontal"
                  android:background="#E30000"
                  android:layout_gravity="right"
                  android:gravity="center_vertical|right"                    
                  >
                      <LinearLayout
                          android:layout_width="wrap_content"
                          android:layout_height="wrap_content"
                          android:layout_gravity="right|center_vertical"
                          android:gravity="center_vertical|center" 
                          android:layout_weight="0.9"
                      >
                          <TextView 
                              android:id="@+id/TextView00"
                              android:layout_width="wrap_content"
                              android:layout_height="wrap_content"
                              android:textColor="#FFFFFF"
                              android:textSize="20px"
                              android:textStyle="bold"
                              android:text="Something"
                              android:gravity="center_horizontal"
                              android:layout_gravity="center_horizontal|center_vertical" 
      
                          />
                      </LinearLayout>
                      <LinearLayout
                          android:layout_width="wrap_content"
                          android:layout_height="wrap_content"
                          android:layout_gravity="right|center_vertical"
                          android:gravity="center_vertical|right"                    
                          android:paddingTop="5dip"
                          android:layout_weight="0.1"
                      >
                          <Button 
                              android:id="@+id/btnCalls"
                              android:layout_width="wrap_content"
                              android:layout_height="wrap_content"
                              android:drawableLeft="@drawable/icon"
                              android:layout_gravity="center_vertical"
                              android:gravity="center"                                    
                          />
                      </LinearLayout>
              </LinearLayout>
          </LinearLayout>
      

      【讨论】:

      • 没什么。按钮变宽了。
      • 请检查编辑后的答案。它使用了一些硬修复,例如 paddingTop="5dip" 但这对您来说可能不是问题。请根据您使用的图像来代替 android 图标进行调整。
      • android:layout_marginLeft="150px" 是一个解决方案,但这是一个我不喜欢的硬修复。不清楚这个问题只能通过 relativelayout 解决。
      【解决方案8】:

      只需使用RelativeLayout,然后wallaaa!!!

      <RelativeLayout
          android:layout_width="match_parent"
          android:layout_height="wrap_content">
          <TextView 
               android:id="@+id/TextView00"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:textColor="#FFFFFF"
               android:textSize="20px"
               android:textStyle="bold"
               android:text="Something"
               android:gravity="center" />
      
          <Button 
               android:id="@+id/btnCalls"
               android:drawableLeft="@drawable/icon"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_alignParentRight="true"/>
      </RelativeLayout>
      

      【讨论】:

        【解决方案9】:

        解决办法是—— android:gravity="center_vertical"

        通常,您还必须注意其父级的位置以确保其正常工作。

        【讨论】:

          猜你喜欢
          • 2014-10-24
          • 2014-01-14
          • 2011-05-17
          • 2018-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多