RelativeLayout不在其LinearLayout父级中居中

时间:2013-07-24 14:30:37

标签: android android-layout layout

我试图将RelativeLayout置于其LinearLayout父级中心。

但它始终保持在左边。

enter image description here

我该如何解决这个问题?

顺便说一下,当前时间只能看到两个中的一个:(刷新/动作linearLayout)

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/app_widget_root"
              android:layout_width="wrap_content"
              android:layout_height="90dp"
              android:orientation="vertical"
              android:padding="0dp"
              android:clickable="true"
              android:focusable="true"
              android:background="@drawable/widget_bg_main"
              >
              <!--   -->
             <RelativeLayout 
              android:id="@+id/layout_main"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:orientation="horizontal" 
              android:layout_gravity="center_vertical"  
              android:gravity="center_vertical"           
              >

                        <!--========================================================================
                            * Action layout - action buttons container
                            ======================================================================== -->
                        <LinearLayout 
                        android:id="@+id/layout_action"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:orientation="vertical"
                        android:gravity="center_horizontal"
                        android:layout_toRightOf="@+id/layout_information"
                        >
                        <ImageView android:id="@+id/image_action"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:src="@drawable/widget_bt_drive_disabled"
                         android:layout_marginTop="25dp"
                        />
                        <TextView
                         android:id="@+id/text_view_action"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:textSize="15sp"
                         android:textStyle="bold"       
                         android:layout_marginTop="6dp"
                         android:textColor="@color/disabled_white"                       
                         android:text="Drive!"                
                        />
                        </LinearLayout> <!-- Action layout -->
                    <!--========================================================================
                        * Refresh layout - refresh layout
                        ======================================================================== -->              
                        <RelativeLayout 
                              android:id="@+id/layout_refresh"
                              android:layout_width="fill_parent"
                              android:layout_height="110dp"
                              android:orientation="horizontal"
                              android:layout_gravity="center_horizontal"
                              android:visibility="invisible"      
                              android:layout_marginTop="5dp"
                              android:layout_marginLeft="72dp"
                              >
                              <!-- 
                              android:clickable="true"
                              android:background="@android:drawable/list_selector_background" -->
                              <ImageView android:id="@+id/image_refresh"
                              android:layout_width="wrap_content"
                              android:layout_height="wrap_content"
                              android:src="@drawable/widget_bt_refresh_idle"
                              android:layout_gravity="center"
                             />

                              <TextView android:id="@+id/refresh_text"
                              android:layout_width="wrap_content"
                              android:layout_height="wrap_content"
                              android:textSize="18sp"
                              android:layout_marginTop="25dp"
                              android:layout_marginLeft="35dp"
                              android:textColor="@color/solid_white"                         
                              android:text="Click to refresh"                
                              />
                      </RelativeLayout> <!--  refresh notification view -->
              </RelativeLayout> <!--  main view -->             
</LinearLayout>

UPDATE1

我尝试了以下尝试失败:

<RelativeLayout 
                              android:id="@+id/layout_refresh"
                              android:layout_width="fill_parent"
                              android:layout_height="110dp"
                              android:orientation="horizontal"
                              android:visibility="invisible"      
                              android:layout_alignLeft="@+id/layout_status_image"    
                              android:layout_marginTop="5dp"
                              android:layout_marginLeft="72dp"
                              android:gravity="center"
                              android:layout_gravity="center"
                              >
                              <!-- 
                              android:clickable="true"
                              android:background="@android:drawable/list_selector_background" -->
                              <ImageView android:id="@+id/image_refresh"
                              android:layout_width="wrap_content"
                              android:layout_height="wrap_content"
                              android:src="@drawable/widget_bt_refresh_idle"
                              android:layout_centerInParent="true"
                              />

                              <TextView android:id="@+id/refresh_text"
                              android:layout_width="wrap_content"
                              android:layout_height="wrap_content"
                              android:textSize="18sp"
                              android:layout_marginTop="25dp"
                              android:layout_marginLeft="35dp"
                              android:textColor="@color/solid_white"                         
                              android:text="Click to refresh"                
                              />

enter image description here

我想在中心制作图片和文字

更新3

XML

android:id="@+id/app_widget_root"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="@drawable/widget_bg_main"

android:clickable="true"

android:focusable="true"

android:orientation="horizontal"

android:padding="0dp" 

android:gravity="center_vertical"

>



   <RelativeLayout

        android:id="@+id/layout_status_image"

        android:layout_width="82dp"

        android:layout_height="fill_parent"

        android:layout_gravity="center_vertical"

        android:gravity="center_vertical"

        android:orientation="horizontal" 

        android:layout_weight=".2">





        <ImageView

            android:id="@+id/image_status"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_marginLeft="9dp"

            android:src="@drawable/widget_icon_no_data"

            android:visibility="invisible" />

        <!--

                          Layout is necessary because the setVisibility of ProgressBar is not working 

  through remote views in 2.1. So wrapped by this layout 

        -->



        <FrameLayout

            android:id="@+android:id/widget_progress"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_marginLeft="1dp"

            android:layout_marginTop="1dp" 

            android:layout_centerInParent="true">



            <ProgressBar

                style="?android:attr/progressBarStyle"

                android:layout_width="39dp"

                android:layout_height="39dp"

                android:indeterminateOnly="true"

                android:orientation="vertical" />

        </FrameLayout>

    </RelativeLayout> <!-- Status image layout -->





    <!--

                        ========================================================================

* Information layout - contains all the texts 

========================================================================

    -->



    <LinearLayout

        android:id="@+id/layout_information"

        android:layout_width="190dp"

        android:layout_height="fill_parent"

        android:orientation="vertical" 

        android:layout_weight=".6"

        >



        <TextView

            android:id="@+id/text_view_destination"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"



            android:paddingTop="8dp"

            android:text="\@ Home in"

            android:textColor="@color/solid_white"

            android:textSize="19sp"

            android:textStyle="bold" />



        <TextView

            android:id="@+id/text_view_time"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_marginBottom="5dp"

            android:paddingLeft="9dp"

            android:textColor="@color/solid_white"

            android:textSize="25sp"

            android:textStyle="normal" />

    </LinearLayout> <!-- Information layout -->

    <!--

                        ========================================================================

* Action layout - action buttons container

========================================================================

    -->



    <LinearLayout

        android:id="@+id/layout_action"

        android:layout_width="80dp"

        android:layout_height="fill_parent"

        android:layout_gravity="center"

        android:gravity="center"

        android:orientation="vertical"

        android:layout_weight=".2"

        >



        <ImageView

            android:id="@+id/image_action"

            android:layout_width="wrap_content"

            android:layout_height="wrap_contenth"

            android:src="@drawable/widget_bt_drive_disabled" />



        <TextView

            android:id="@+id/h"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:layout_marginTop="6dp"

            android:text="Refresh"

            android:textColor="@color/disabled_white"

            android:textSize="15sp"

            android:textStyle="bold" />

    </LinearLayout> <!-- Action layout -->

屏幕:

enter image description here

我删除了relativeLayout,但是Refresh Text 并没有集中在它的盒子里。

知道为什么吗?

4 个答案:

答案 0 :(得分:1)

1 - 在linearlayout中:使用gravity / layoutgravity / weight

2 - 在Relaive布局中:使用layout_centerInParent / layout_alignParent ... / layout_toRightOf-layout_toLeftOf

答案 1 :(得分:1)

你错了。试试这个

<ImageView android:id="@+id/image_refresh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/widget_bt_refresh_idle"
android:layout_centerInParent="true"  -dont use gravity, use centerInParent-
/>
<TextView android:id="@+id/refresh_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
                            NOTICE THESE TWO LINES HERE
android:layout_centerHorizontal="" -dont use margins, use centerHorizontal-
android:layout_below="@id/image_refresh" -use below imagerefresh, this should work-
                            END
android:textColor="@color/solid_white"                         
android:text="Click to refresh"                
/>

<强>基础

LinearLayout了解layout_gravity和layout_weights。 RelativeLayout不理解layout_gravity。

RelativeLayout中的

android:layout_alignLeft =“@ + id / layout_status_image”是正确的。它将“刷新”布局定位在布局 layout_status_image 的左侧。

答案 2 :(得分:0)

试试这个代码......

<RelativeLayout 
        android:id="@+id/layout_refresh"
        android:layout_width="fill_parent"
        android:layout_height="110dp"
        android:layout_marginTop="5dp"
        android:layout_centerHorizontal="true"
        >
        <!-- 
        android:clickable="true"
        android:background="@android:drawable/list_selector_background" -->

        <LinearLayout 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_centerInParent="true"
            android:gravity="fill_horizontal">

        <ImageView 
            android:id="@+id/image_refresh"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/icon"
            android:layout_gravity="center_horizontal"
       />

        <TextView 
            android:id="@+id/refresh_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="18sp"
            android:layout_marginTop="5dp"
            android:textColor="@android:color/white"                         
            android:text="Click to refresh"                
        />

        </LinearLayout>

</RelativeLayout> <!--  refresh notification view -->

在此您需要更改图像src,因为我没有您使用的图像,因此我在这里使用iclauncher图像......

现在它完美地以任何尺寸的布局为中心。

根据您的要求使用Visible和Invisible。

答案 3 :(得分:0)

代码中的布局太多。

任何地方都不需要相对布局。

请根据需要编辑imageview中的图像。如果这不能解决您的问题。请用图像和文字发布您想要做的事情。会发给你固定的代码。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/app_widget_root"
              android:layout_width="match_parent"
              android:layout_height="90dp"
              android:orientation="horizontal"
              android:clickable="true"
              android:focusable="true"
              android:background="@android:color/white"
              android:baselineAligned="false">


    <!--========================================================================
        * Action layout - action buttons container
        ======================================================================== -->
    <LinearLayout
            android:id="@+id/layout_action"
            android:layout_width="0dip"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:gravity="center_horizontal|center_vertical"
            android:layout_weight="5">

        <ImageView
                android:id="@+id/image_action"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher"/>

        <TextView
                android:id="@+id/text_view_action"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="15sp"
                android:textStyle="bold"
                android:textColor="@android:color/black"
                android:text="Drive!"
                />
    </LinearLayout>
    <!-- Action layout -->
    <!--========================================================================
        * Refresh layout - refresh layout
        ======================================================================== -->
    <LinearLayout
            android:id="@+id/layout_refresh"
            android:layout_width="0dip"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:visibility="visible"
            android:gravity="center_horizontal|center_vertical"
            android:layout_weight="5">

        <ImageView
                android:id="@+id/image_refresh"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ic_launcher"/>

        <TextView
                android:id="@+id/refresh_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="15sp"
                android:textStyle="bold"
                android:textColor="@android:color/black"
                android:text="Refresh"/>
    </LinearLayout>

</LinearLayout>