【问题标题】:Set gravity in LinearLayout - android在 LinearLayout 中设置重力 - android
【发布时间】:2020-11-23 02:19:06
【问题描述】:

我尝试将RelativeLayout 和LinearLayout 组合使用,其中充满了TextViews 和底部的按钮。我在 MainActivity 中编写了一个序列,将方向从水平更改为垂直,反之亦然。所以基本上我不得不在列中转行。

这里是xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="10dp"
android:paddingRight="10dp" >

<LinearLayout
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="0dp"
    android:paddingTop="40dp"
    android:paddingRight="16dp"
    android:orientation="horizontal"
    android:gravity="top"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textv1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="left"
        android:text="@string/text1"

        />

    <TextView
        android:id="@+id/textv2"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:text="@string/text2"/>

    <TextView
        android:id="@+id/textv3"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:text="@string/text3"/>

    <TextView
        android:id="@+id/textv4"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:text="@string/text4"/>

</LinearLayout>

<LinearLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout2"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:gravity="center"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textv5"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center"
        android:text="@string/text5"/>

    <TextView
        android:id="@+id/textv6"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:text="@string/text6"/>

    <TextView
        android:id="@+id/textv7"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:text="@string/text7"/>

    <TextView
        android:id="@+id/textv8"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:text="@string/text8"/>


</LinearLayout>

<LinearLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout3"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:gravity="bottom"
    android:foregroundGravity="right"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textv9"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="bottom"
        android:text="@string/text9"/>

    <TextView
        android:id="@+id/textv10"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:text="@string/text10" />

    <TextView
        android:id="@+id/textv11"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:text="@string/text11"/>

    <TextView
        android:id="@+id/textv12"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:text="@string/text12"/>


</LinearLayout>

<Button
    android:id="@+id/button2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Button"
    android:layout_alignParentBottom="true"/>

</RelativeLayout>

应该是这样的:

但它会变成这样:

只有中心线保持在正确的位置,其他的堆叠在一起。

【问题讨论】:

  • 使用 TableLayout 可能会有更好的运气:developer.android.com/reference/android/widget/TableLayout
  • 我只需要使用:线性和相对。
  • @Soni,Android 提供了使用手机配置选择应用程序资源的选项。这意味着您可以在不同的layout 目录中创建两个具有相同名称的布局文件,一个用于纵向,一个用于横向。 Read more here 关于处理配置更改。我向你保证——这将是最简单的方法。 SO答案与示例解决方案相关:stackoverflow.com/a/4858052/7210237
  • @JeneaVranceanu,我知道,但我不必使用屏幕的方向,只需在 Relative 中更改 LinearLayout 的方向

标签: java android android-studio android-layout


【解决方案1】:

这看起来怎么样? Linear Margin

代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:layout_marginTop="40dp">


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


    <LinearLayout
        android:id="@+id/LinearLayout1"
        android:layout_width="match_parent"
        android:layout_height="147dp"
        android:gravity="top"
        android:orientation="horizontal"
        android:paddingLeft="0dp"
        android:paddingTop="40dp"
        android:paddingRight="16dp"
        tools:context=".MainActivity">

        <TextView
            android:id="@+id/textv1"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_gravity="left"
            android:text="@string/text1"

            />

        <TextView
            android:id="@+id/textv2"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:text="@string/text2"


            />

        <TextView
            android:id="@+id/textv3"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:text="@string/text3"

            />

        <TextView
            android:id="@+id/textv4"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:text="@string/text4"

            />


    </LinearLayout>

    <LinearLayout
        android:id="@+id/LinearLayout2"
        android:layout_width="393dp"
        android:layout_height="141dp"
        android:gravity="center"
        android:orientation="horizontal"

        tools:context=".MainActivity">

        <TextView
            android:id="@+id/textv5"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_gravity="center"
            android:text="@string/text5"

            />

        <TextView
            android:id="@+id/textv6"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:text="@string/text6"


            />

        <TextView
            android:id="@+id/textv7"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:text="@string/text7"

            />

        <TextView
            android:id="@+id/textv8"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:text="@string/text8"

            />


    </LinearLayout>

    <LinearLayout
        android:id="@+id/LinearLayout3"
        android:layout_width="397dp"
        android:layout_height="104dp"
        android:foregroundGravity="right"
        android:gravity="bottom"
        android:orientation="horizontal"
        tools:context=".MainActivity">

        <TextView
            android:id="@+id/textv9"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_gravity="bottom"
            android:text="@string/text9"

            />

        <TextView
            android:id="@+id/textv10"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:text="@string/text10"


            />

        <TextView
            android:id="@+id/textv11"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:text="@string/text11"

            />

        <TextView
            android:id="@+id/textv12"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:text="@string/text12"

            />


    </LinearLayout>
</LinearLayout>

<Button
    android:id="@+id/button2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Button"
    android:layout_alignParentBottom="true"/>

【讨论】:

  • 不完全是,当我按下按钮时不会变成垂直线只是一团糟。
【解决方案2】:

如果您是要均匀排列的文本视图,我建议您在每个 LinearLayout 中使用 layout_weight,并相对于彼此排列包含文本视图的 LinearLayout。 但我真的建议改变你的方法。 您将 textviews 的宽度和高度设置为 100dp,但 Android 有许多屏幕尺寸,因此它们并不总是完全适合许多设备,并且在低端设备的多个布局中使用这些许多视图会影响性能。 我的建议是使用带有包含 TextView 的 CardView 的 RecyclerView,然后使用带有 recyclerview 的 GridLayout。您可以通过 onClick for button 中的 recyclerview 相应地更改 TextView 的布局。

【讨论】:

    【解决方案3】:

    LinearLayout 中的android:layout_height="match_parent" 更改为android:layout_height="wrap_content"

    <LinearLayout
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/LinearLayout3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="bottom"
            android:foregroundGravity="right"
            tools:context=".MainActivity">...
    

    【讨论】:

    • 这样做只是移动第三个布局,一点都不好。
    • 你必须改变所有LinearLayout
    【解决方案4】:

    我设法通过在主文件中添加几行来解决问题。这是添加的行:

                if(myll3.getOrientation() == LinearLayout.HORIZONTAL)
                    myll3.setGravity(Gravity.BOTTOM | Gravity.CENTER);
    
                else if(myll3.getOrientation() == LinearLayout.VERTICAL)
                    myll3.setGravity(Gravity.RIGHT | Gravity.CENTER);
    

    我也对 xml 文件进行了一些更改。这是最终的 XML 代码:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingLeft="0dp"
    android:paddingRight="0dp" >
    
    
    
    <LinearLayout
        android:id="@+id/LinearLayout1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="0dp"
        android:paddingTop="100dp"
        android:paddingRight="16dp"
        android:orientation="horizontal"
        android:gravity="top"
        tools:context=".MainActivity">
    
        <TextView
            android:id="@+id/textv1"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:text="@string/text1"
    
            />
    
        <TextView
            android:id="@+id/textv2"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:text="@string/text2"
    
    
            />
    
        <TextView
            android:id="@+id/textv3"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:text="@string/text3"
    
            />
    
        <TextView
            android:id="@+id/textv4"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:text="@string/text4"
    
            />
    
    
    
    </LinearLayout>
    <LinearLayout
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/LinearLayout2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:paddingRight="10dp"
        android:gravity="center"
    
        tools:context=".MainActivity">
    
        <TextView
            android:id="@+id/textv5"
            android:layout_width="100dp"
            android:layout_height="100dp"
    
            android:text="@string/text5"
    
            />
    
        <TextView
            android:id="@+id/textv6"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:text="@string/text6"
    
    
            />
    
        <TextView
            android:id="@+id/textv7"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:text="@string/text7"
    
            />
    
        <TextView
            android:id="@+id/textv8"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:text="@string/text8"
    
            />
    
    
    </LinearLayout>
    
    <LinearLayout
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/LinearLayout3"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:paddingBottom="100dp"
        android:paddingTop="100dp"
        android:gravity="bottom"
    
        tools:context=".MainActivity">
    
        <TextView
            android:id="@+id/textv9"
            android:layout_width="100dp"
            android:layout_height="100dp"
    
            android:text="@string/text9"
    
            />
    
        <TextView
            android:id="@+id/textv10"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:text="@string/text10"
    
    
            />
    
        <TextView
            android:id="@+id/textv11"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:text="@string/text11"
    
            />
    
        <TextView
            android:id="@+id/textv12"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:text="@string/text12"
    
            />
    
    
    </LinearLayout>
    
    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button"
        android:layout_alignParentBottom="true"/>
    
    </RelativeLayout>
    

    感谢您的支持和回答。

    这是最终视图:-

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 2013-04-02
      • 2015-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多