【问题标题】:How to center View inside layout如何在布局中居中查看
【发布时间】:2012-05-29 23:05:15
【问题描述】:

我必须构建如下图所示的布局。 主要任务是使文本居中。

我使用这个 xml 来实现布局。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/ll"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center_vertical"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/author"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/author">
    </LinearLayout>

    <LinearLayout
        android:id="@+id/footer_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="bottom"
        android:orientation="vertical" 
        android:layout_alignParentBottom="true">

        <LinearLayout
            android:id="@+id/menu_layout"
            android:layout_width="fill_parent"
            android:layout_height="60dp"
            android:background="@drawable/nav_overlay"
            android:gravity="center_horizontal"
            android:orientation="horizontal">

            <Button
                android:id="@+id/previous"
                android:layout_width="45dp"
                android:layout_height="45dp"
                android:background="@drawable/button" />

        </LinearLayout>

        <com.google.ads.AdView
            xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
            android:id="@+id/adView"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            ads:adSize="BANNER"
            ads:adUnitId="@string/admob_id"
            ads:loadAdOnCreate="true" />
    </LinearLayout>

</RelativeLayout>

但它工作不正确。
我需要在LinearLayout android:id="@+id/ll" 中居中TextView android:id="@+id/author"。但它以父RelativeLayoutandroid:id="@+id/main_layout"为中心。
我将android:layout_height="fill_parent" 用于LinearLayout android:id="@+id/ll"
我的布局如何不填充父级而只填充剩余空间?
如果有人遇到类似问题,请举例说明其实现。

编辑:现在我的居中文本有误,如下图所示。

目前,我认为最好的解决方案是使用 android:layout_weight。
但是当广告没有显示时 - 违反了比例。

【问题讨论】:

  • 对不起,请再检查一下我的答案。
  • 即使使用 android: layout_above: "@ + id / footer_layout" 仍然 LinearLayout android: id = "@ + id / ll" 被拉伸到完全父 RelativeLayout
  • 我刚刚测试了它,它工作得很好,我更新了我的答案。

标签: android android-layout android-linearlayout layout-gravity


【解决方案1】:

立即尝试:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<LinearLayout
    android:id="@+id/ll"
    android:layout_above="@+id/footer_layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_vertical"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/author"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/author"/>
</LinearLayout>

<LinearLayout
    android:id="@+id/footer_layout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="bottom"
    android:orientation="vertical" 
    android:layout_alignParentBottom="true">

    <LinearLayout
        android:id="@+id/menu_layout"
        android:layout_width="fill_parent"
        android:layout_height="60dp"
        android:background="@drawable/nav_overlay"
        android:gravity="center_horizontal"
        android:orientation="horizontal">

        <Button
            android:id="@+id/previous"
            android:layout_width="45dp"
            android:layout_height="45dp"
            android:background="@drawable/button" />

    </LinearLayout>

    <com.google.ads.AdView
        xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
        android:id="@+id/adView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        ads:adSize="BANNER"
        ads:adUnitId="@string/admob_id"
        ads:loadAdOnCreate="true" />
</LinearLayout>

【讨论】:

  • 很好的答案!它真的集中了。我第一次错过了一些东西。谢谢。
【解决方案2】:

在线性布局中,添加属性:gravity="center_horizo​​ntal" 并在文本视图中添加属性: layout_gravity="center_horizo​​ntal"

【讨论】:

  • 我试图这样做。但它以父RelativeLayout为中心。我希望布局不填充父级,而只填充 footer_layout 上方的剩余空间。感谢您提供帮助。
  • 尝试增加组件的重量!
  • 一个好建议。我尝试过这个。但是当广告没有显示时 - 违反了比例。
【解决方案3】:

为您的文本视图添加重力。找到以下代码

       <TextView
        android:id="@+id/author"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:text="hiiiiiiiiiii"/>

这将在布局中心提供您的文本视图...

【讨论】:

    【解决方案4】:

    更改您的文本视图布局,如下所示:

     <TextView
            android:id="@+id/author"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center"
            android:text="@string/author">
        </TextView>
    </LinearLayout>
    

    【讨论】:

      【解决方案5】:

      设置layout_centerInParent = true

      【讨论】:

      • 我添加了图片以便澄清。
      猜你喜欢
      • 2014-12-21
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多