【问题标题】:Wrong gravity applied to LinearLayout items错误的重力应用于 LinearLayout 项目
【发布时间】:2018-03-11 18:33:32
【问题描述】:

将 Gravity 属性应用于我的 XML 项目后,它们似乎没有放置在正确的位置。如何解决这些问题,以便满足以下条件?:

  1. “上移”按钮需要位于屏幕顶部
  2. “下移”按钮需要位于屏幕底部
  3. GridView 需要位于屏幕的垂直中心

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/btn_moveup"
        android:text="move up"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_gravity="top"
        />

    <GridView
        android:id="@+id/abslistview_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:numColumns="auto_fit"
        />

    <Button
        android:id="@+id/btn_movedown"
        android:text="move down"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_gravity="bottom"
        />
</LinearLayout>

更新(akshay_shahane 的建议)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:layout_gravity="center_vertical"
    android:orientation="vertical"
    android:weightSum="100"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/btn_moveup"
        android:text="move up"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_weight="5"
        android:onClick="moveup_click"
        />

    <GridView
        android:id="@+id/abslistview_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="90"
        android:layout_gravity="center_vertical"
        android:numColumns="auto_fit"
        />

    <Button
        android:id="@+id/btn_movedown"
        android:text="move down"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_weight="5"
        android:onClick="movedown_click"
        />
</LinearLayout>

【问题讨论】:

  • 为什么不使用权重?向上移动 0.1,网格 0.8 和向下移动 0.1
  • @akshay_shahane 我做到了,但 GridView 的重要性不断提高!它不会到达垂直中心!
  • 尝试将根布局重力设置为 centerVertical?

标签: android xml android-layout android-gridview android-gravity


【解决方案1】:

试试这个

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:weightSum="1"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/btn_moveup"
        android:text="move up"
        android:layout_weight="0.1"
        android:layout_height="0dp"
        android:layout_width="match_parent"
        android:layout_gravity="top"
        />

    <GridView
        android:id="@+id/abslistview_main"
        android:layout_width="match_parent"
        android:layout_weight="0.8"
        android:layout_height="0dp"
        android:layout_gravity="center_vertical"
        android:numColumns="auto_fit"
        />

    <Button
        android:id="@+id/btn_movedown"
        android:text="move down"
        android:layout_weight="0.1"
        android:layout_height="0dp"
        android:layout_width="match_parent"
        android:layout_gravity="bottom"
        />
</LinearLayout>

【讨论】:

    【解决方案2】:

    像这样将GridLayout 的权重设置为1,将layout_height 的权重设置为0dp

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity">
        <Button
            android:id="@+id/btn_moveup"
            android:text="move up"
            android:layout_height="wrap_content"
            android:layout_width="match_parent" />
    
        <GridView
            android:id="@+id/abslistview_main"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:numColumns="auto_fit"
            android:layout_weight="1"
            />
    
        <Button
            android:id="@+id/btn_movedown"
            android:text="move down"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            />
    </LinearLayout>
    

    或者像这样将网格布局包装在另一个容器中。

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity">
        <Button
            android:id="@+id/btn_moveup"
            android:text="move up"
            android:layout_height="wrap_content"
            android:layout_width="match_parent" />
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1">
    
            <GridView
                android:id="@+id/abslistview_main"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:numColumns="auto_fit" />
    
        </LinearLayout>
    
        <Button
            android:id="@+id/btn_movedown"
            android:text="move down"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            />
    </LinearLayout>
    

    第二个选项会更好,因为它允许使用android:layout_gravity="center"GridLayout 居中。

    【讨论】:

      【解决方案3】:

      只需要将gridview权重设置为1

      <?xml version="1.0" encoding="utf-8"?>
      
      <LinearLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      android:layout_height="match_parent"
      android:layout_width="match_parent"
      android:orientation="vertical"
      tools:context=".MainActivity">
      <Button
          android:id="@+id/btn_moveup"
          android:text="move up"
          android:layout_height="wrap_content"
          android:layout_width="match_parent"
          android:layout_gravity="top"
          />
      
      <GridView
          android:id="@+id/abslistview_main"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:gravity="center_vertical"
          android:layout_weight="1"
          android:layout_gravity="center_vertical"
          android:numColumns="auto_fit"
          />
      <Button
          android:id="@+id/btn_movedown"
          android:text="move down"
          android:layout_height="wrap_content"
          android:layout_width="match_parent"
          android:layout_gravity="bottom"
          />
      </LinearLayout>
      

      【讨论】:

        猜你喜欢
        • 2017-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-05
        • 2017-03-26
        • 1970-01-01
        • 2011-08-14
        • 2015-11-22
        相关资源
        最近更新 更多