LinearLayout

时间:2015-10-27 20:52:43

标签: java android android-linearlayout

我只想将“CenterButton”(根LinearLayout的中心)居中,但Androids只是不合作..

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:layout_gravity="center_horizontal"
    android:layout_weight="0.00"
    android:padding="5dp"
    android:background="#zegerg"
    android:id="@+id/LinearLayout1">

    <ImageView
        android:id="@+id/ImageView1"
        android:layout_height="match_parent"
        android:layout_width="151dp"
        android:src="@mipmap/image_1"
        android:contentDescription="@string/abcdef"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        android:id="@+id/CenterButton"
        android:layout_gravity="center_horizontal|center_vertical|center"/>

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="20dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Text !"
            android:id="@+id/TextView"
            android:paddingBottom="30dp"
            android:textColor="#37a52c" />

        <ProgressBar
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/ProgressBar"
            android:paddingBottom="30dp"
            android:progressTint="#37a52c" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/text_text"
            android:id="@+id/Button2"
            android:layout_gravity="center_horizontal" />
    </LinearLayout>
</LinearLayout>

尝试将它放在XML的末尾但不起作用,因为其他元素将它推到一边..不确定发生了什么。

4 个答案:

答案 0 :(得分:1)

您可以将weight用于子项目。将 layout_width 设置为 0dp ,并将 layout_weight 设置为 1

答案 1 :(得分:1)

如果你想让所有三个第一级孩子都在同等大小的列中,那么你需要向他们所有人添加以下属性:

android:layout_width="0dp"
android:layout_weight="1" 

(不要忘记尺寸&#34; dp&#34;到宽度参数,否则IDE会抱怨)。

...
    <ImageView
        android:id="@+id/ImageView1"
        android:layout_height="match_parent"
        android:layout_width="0dp"
        android:layout_weight="1" 
        android:src="@mipmap/image_1"
        android:contentDescription="@string/abcdef"/>

    <Button
        android:layout_width="0dp"
        android:layout_weight="1" 
        android:layout_height="wrap_content"
        android:text="Button"
        android:id="@+id/CenterButton"
        android:layout_gravity="center_horizontal|center_vertical|center"/>

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_weight="1" 
        android:layout_height="match_parent"
        android:padding="20dp">
....

<强>编辑: 如果您希望CenterButton与所有其他视图重叠,那么您需要做的是:

  1. 以高度等于200dp的相对布局包装所有内容,作为其第一个孩子
  2. 从当前位置移除按钮 CenterButton 并将其添加到所有内容的底部,仍在相对布局内,但在线性布局下方
  3. 将这些属性添加到按钮,使其成为父级的中心
  4. 机器人:layout_centerInParent =&#34;真&#34;

    所以最后你会得到类似的东西(我已经改变了一些资源):

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="200dp">
    
    
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:layout_gravity="center_horizontal"
            android:layout_weight="0.00"
            android:padding="5dp"
            android:background="@android:color/holo_orange_dark"
            android:id="@+id/LinearLayout1">
    
            <ImageView
                android:id="@+id/ImageView1"
                android:layout_height="match_parent"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:src="@drawable/plus"
                android:contentDescription="abcdef"/>
    
    
            <LinearLayout
                android:orientation="vertical"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:padding="20dp">
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Text !"
                    android:id="@+id/TextView"
                    android:paddingBottom="30dp"
                    android:textColor="#37a52c" />
    
                <ProgressBar
                    style="?android:attr/progressBarStyleHorizontal"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/ProgressBar"
                    android:paddingBottom="30dp"
                    android:progressTint="#37a52c" />
    
                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="text"
                    android:id="@+id/Button2"
                    android:layout_gravity="center_horizontal" />
            </LinearLayout>
        </LinearLayout>
    
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="Button"
            android:id="@+id/CenterButton"
            android:layout_gravity="center_horizontal|center_vertical|center"/>
    
    </RelativeLayout>
    

答案 2 :(得分:0)

让最顶层线性布局中的三个孩子的重力为1,宽度为0。

答案 3 :(得分:0)

目前尚不清楚你的问题到底是什么。但是,这里有一些一般性的说明:

  • 要将视图或布局置于 RelativeView 中心,请使用 layout_centerInParent =&#34; true&#34;
  • 要在其他布局之上制作布局,请使用 FrameLayout
  • xml文件中视图/布局的顺序非常重要。你写的最后一个将在顶部(在我们的例子中:FrameLayout或只是CenterButton应该写在xml文件中的其他视图和布局之后)
  • 要在其视图中分配 LinearLayout 中的可用空间,请使用 android:layout_weight =&#34; 1&#34; (根据需要更改值)< / LI>

你可以用这个例子搁浅:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="200dp">

    <LinearLayout
        android:id="@+id/LinearLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:background="#fff"
        android:orientation="horizontal"
        android:padding="5dp">

        <ImageView
            android:id="@+id/ImageView1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="3"
            android:src="@mipmap/ic_launcher" />

        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="3"
            android:orientation="vertical">

            <TextView
                android:id="@+id/TextView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingBottom="30dp"
                android:text="Text !"
                android:textColor="#37a52c" />

            <ProgressBar
                android:id="@+id/ProgressBar"
                style="?android:attr/progressBarStyleHorizontal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingBottom="30dp"
                android:progressTint="#37a52c" />

            <Button
                android:id="@+id/Button2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="text_text" />
        </LinearLayout>

    </LinearLayout>

    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true">

        <Button
            android:id="@+id/CenterButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|center_vertical|center"
            android:text="Button" />

    </FrameLayout>

</RelativeLayout>