Android xml复杂的布局

时间:2016-08-23 07:14:44

标签: android xml android-layout

我无法弄清楚Android xml大纲: 三个线性布局相互叠加,其中 1 2 具有相同的高度,无论内容如何,​​ 3 是换行内容
enter image description here

3 会有一个高度的换行内容,然后我希望 1 2 具有占据所有空间的相等高度 3 以上,无论其内容如何。我遇到的问题是 1 2 不会平均分配空间。 3 也需要与底部对齐。

我尝试过的事情:

  1. 所有内容都处于相对布局中,然后将 1 2 置于线性布局中,每个线程布局的权重均为1. - 这不是因为每个 1 2 3 每个都包含一行3个按钮,它们各自有权重,所以我收到错误“不要嵌套权重“。

  2. 在相对布局中,只需将 3 对齐到底部,然后 1 2 为“以上”和“在“其他人”之下。 - 这不能均匀地分隔 1 2

  3. 还有其他想法吗?任何建议都非常感谢。谢谢! :d

    (我在这方面挣扎得足够长,以至于我创建了我的第一个stackoverflow帐户!)

    编辑1:澄清 1 2 是每个3个按钮的线性布局,水平定向,weight_sum = 3,每个按钮的权重= 1(因此问题嵌套权重)。

3 个答案:

答案 0 :(得分:0)

你应该使用LinearLayout而不是Relative使用权重,我想这就是你想要的,你可以在其中添加小部件,或者可以用任何使用相同必需属性的小部件替换它们(权重,高度)宽度)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="match_parent"
        android:background="#00efff"
        android:layout_weight="2"
        android:layout_height="0dp"></LinearLayout>
    <LinearLayout
        android:layout_marginTop="6dp"
        android:background="#19bdda"
        android:layout_weight="2"
        android:layout_width="match_parent"
        android:layout_height="0dp"></LinearLayout>
    <LinearLayout
        android:layout_marginTop="6dp"
        android:background="#65edda"
        android:layout_weight="1"
        android:layout_gravity="bottom"
        android:layout_width="match_parent"
        android:layout_height="0dp"></LinearLayout>

</LinearLayout>

答案 1 :(得分:0)

权重应仅与线性布局一起使用,并避免嵌套权重。使用权重渲染视图需要更多时间。 也不要嵌套布局,使用Android的最佳实践。将线性布局嵌套在相对布局中,而不是仅使用权重线性布局。

 <?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="vertical"
   android:weightSum="2">

  <Button
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:text="1"
    android:textSize="30sp" />

<Button
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:text="2"
    android:textSize="30sp" />

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="3"
    android:textSize="30sp" />
</LinearLayout>

答案 2 :(得分:0)

使用LinearLayout作为父布局。在其中添加3 LinearLayouts并按如下方式应用layout_weight

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

    <LinearLayout
        android:id="@+id/ll1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@android:color/holo_red_light"
        android:orientation="horizontal"></LinearLayout>


    <LinearLayout
        android:id="@+id/ll2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@android:color/holo_blue_bright"
        android:orientation="horizontal"></LinearLayout>

    <LinearLayout
        android:id="@+id/ll3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:background="@android:color/holo_green_light"
        android:orientation="horizontal">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dp"
            android:text="hello"/>
    </LinearLayout>

</LinearLayout>

您可以通过在第3 TextView内添加Widget或任何layout进行测试,它会增长weight 0layout_weight 0必须在layout给出空格时给予layout_weight 1,父母不会忽略layoutstdf Out: A B C 0 NaN 0.195070 -1.781563 1 -0.729045 0.196557 0.354758 2 0.616887 0.008628 NaN 3 NaN NaN 0.037006 4 0.767902 NaN NaN 5 -0.805627 NaN NaN 6 1.133080 NaN -0.659892 7 -1.139802 0.784958 -0.554310 8 -0.470638 -0.216950 NaN 9 -0.392389 -3.046143 0.543312 idx = tdf['A'] > 0 myslice = tdf.loc[idx] 以上其他2 myslice.loc[:,'B'].fillna(myslice['B'].mean(), inplace = True) C:\Anaconda3\envs\p3\lib\site-packages\pandas\core\generic.py:3191: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self._update_inplace(new_data) myslice Out: A B C 2 0.616887 0.008628 NaN 4 0.767902 0.008628 NaN 6 1.133080 0.008628 -0.659892 tdf Out: A B C 0 NaN 0.195070 -1.781563 1 -0.729045 0.196557 0.354758 2 0.616887 0.008628 NaN 3 NaN NaN 0.037006 4 0.767902 NaN NaN 5 -0.805627 NaN NaN 6 1.133080 NaN -0.659892 7 -1.139802 0.784958 -0.554310 8 -0.470638 -0.216950 NaN 9 -0.392389 -3.046143 0.543312 将给予他们平等高度。