安卓线性布局居中和右对齐

13

这是我的代码:

在此输入图像描述

    <?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>

我希望实现这个效果:

enter image description here

水平居中文本,垂直居中按钮。

我还需要做什么?我没有尝试RelativeLayout, 我更喜欢使用LinearLayout。

9个回答

34
android:gravity="right|center_vertical"

将您的TextView右对齐。那么center_horizontal呢?

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


尝试将TextView的宽度设置为fill_parent。 - banzai86
2
这不是一个解决方案。重力只对文本内容起作用。不知道为什么会被点赞。 - Harmen

13

试试这个

<?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位于按钮左侧的中心位置,但不在显示屏宽度的中心位置。 - erdomester
我错过了textView居中显示的部分。如果文本宽度超过显示宽度减去按钮宽度,应该如何对齐文本? - Vladimir
我发现如果TextView和LinearLayout相邻,那么我可以使TextView中的文本居中对齐,但不能在显示器的宽度上居中对齐。因此,使用LinearLayout无法解决这个问题。 - erdomester
它只给你留下两个选择:为你的textView添加与按钮相同大小的左边距(或在文字左侧添加一个虚拟的不可见按钮,与右侧那个大小相同,这实际上是一个不太正规的hack),或者使用相对布局。 - Vladimir
是的,用这些技巧可以解决。我使用相对布局来解决它。尽管如此,考虑到你离解决方案最近并提出了这些技巧的想法,我接受你的解决方案。 - erdomester
显示剩余2条评论

4
我发现没有一个答案完全符合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" 对我来说很有效,可以让我的TextView居中显示! - deimos1988

2

您在TextView中使用了android:gravity="right|center_vertical"。请改用android:gravity="center"


1
尝试在水平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>

请勿在多个问题中发布完全相同的答案。如果这些问题是重复的,请在问题下留言指出。如果这些问题不是重复的,则请根据所问的问题调整您的代码和答案。 - George Stocker

0

我认为,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>

按钮变宽了。 - erdomester
请检查编辑后的答案。它使用了一些硬编码,例如paddingTop="5dip",但这对您可能不是问题。请根据您在android图标位置使用的图像进行调整。 - Hiral Vadodaria
android:layout_marginLeft="150px" 是一种解决方案,但这是一个我不喜欢的固定解。现在清楚了,问题只能通过相对布局来解决。 - erdomester

0

TextViewLinearLayout 定义布局权重

android:layout_weight="1" 设置给 TextView

android:layout_weight="0" 设置给 LinearLayout

同时将 layout_width="wrap_content" 改为 LinearLayout,并将 layout_gravity="center" 设置给 TextView


不,它不行。我发现如果TextView和LinearLayout相邻,那么我可以将文本在TextView中居中对齐,但不能在显示器的宽度上居中对齐。 - erdomester
最好使用相对布局。如果您不了解相对布局,我可以为您提供上述布局的答案。 - Ramakrishna

0

解决方案是 - android:gravity="center_vertical"

通常你还需要注意它的父级位置,以确保它正常工作。


0

只需使用RelativeLayout,然后就完成了!!!

<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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接