Android LinearLayout中的布局权重无法正常工作

时间:2016-12-11 11:33:40

标签: android android-layout

我有ListView连续显示两个项目。显示一行的View的根目录为LinearLayout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:orientation="horizontal">

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="horizontal"
        android:paddingBottom="10dp"
        android:paddingTop="10dp">

        <LinearLayout
            android:id="@+id/layout1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@color/grey"
            android:gravity="center_vertical">

            <TextView
                android:id="@+id/textview1"
                style="@style/refinement_button"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_margin="1dp"
                android:layout_weight="1"
                android:background="@color/white"/>
        </LinearLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="horizontal"
        android:paddingBottom="10dp"
        android:paddingTop="10dp">

        <LinearLayout
            android:id="@+id/layout2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@color/grey"
            android:gravity="center_vertical">

            <TextView
                android:id="@+id/textview2"
                style="@style/refinement_button"
                android:layout_width="150dp"
                android:layout_height="wrap_content"
                android:layout_margin="1dp"
                android:layout_weight="1"
                android:background="@color/white"/>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

在Android Studio的编辑器中,我看到了

enter image description here

但在我看到的设备上

enter image description here

(在编辑器中重新创建图像,以节省时间)

我在使用Android 7.0的Nexus6和使用Android 6.0.1的Nexus 5上尝试过此操作。我认为这是Android手机或Android Studio编辑器中的错误。编辑器的目的是向您显示设备上的布局。

我不是在询问如何创建合适的布局。我的唯一观点是,我在设备上显示的内容与我在Android Studio的编辑器中看到的内容不同,我想知道怎么回事。

2 个答案:

答案 0 :(得分:0)

ListView位于片段中,这是它的布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:orientation="vertical">

<ListView
    android:id="@+id/product_list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:divider="@null"
    android:layout_marginTop="30dp"
    android:fadingEdge="none"
    android:scrollingCache="false"/>

在此处将FrameLayout更改为LinearLayout解决了我的问题。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:orientation="vertical">

我认为我的布局元素中的权重将取决于列表行布局中的包装布局,正如我在编辑器中看到的那样。但是,该布局的父级似乎在设备上很重要。

答案 1 :(得分:0)

将布局更改为,

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:padding="10dp">

        <TextView
            android:id="@+id/textview1"
            style="@style/refinement_button"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:background="@drawable/text_bg" />

        <TextView
            android:id="@+id/textview2"
            android:layout_weight="1"
            style="@style/refinement_button"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:background="@drawable/text_bg" />

</LinearLayout>

text_bg.xml文件夹中创建drawable文件。

text_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <solid android:color="@color/white"/>
    <stroke android:color="@color/grey" android:width="1dp"/>

</shape>

永远不要使用不需要的布局......

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:padding="10dp">

    <TextView
        android:id="@+id/textview1"
        style="@style/refinement_button"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="@drawable/text_bg" />

    <TextView
        android:id="@+id/textview2"
        android:layout_weight="1"
        style="@style/refinement_button"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="@drawable/text_bg" />

</LinearLayout>

Genymotion的结果#Samsung Galaxy Note 3 api 18                         #三星Galaxy s6 api 21                         #Google Nexus 7 api 23

enter image description here

我想知道一件事,你在哪个设备上测试了代码?