如何在布局中保持元素之间的比例(独立于屏幕尺寸)?

时间:2017-07-02 19:32:37

标签: android android-layout

我做了聊天活动。但我有一个问题。在layout的底部有一些空白空间,我不知道为什么以及如何,因为在预览(与我的手机相同的屏幕)上,理想情况下使用空白空间。当我在手机上播放这个活动时,空白的空间"神奇地"出现。我认为这是因为元素的大小被硬编码到xml中,并且它对于屏幕更改不灵活。我想使用权重来保持元素之间的比例。我想将 android:weightSum 设置为 dp 中的屏幕高度(因为我在dp中编码了元素大小)并更改每个 android:weight 元素到他们的实际高度。但是我不知道如何在dp中获得屏幕高度(我的屏幕上有information像素)这种方法是否解决了空白空间问题并实现屏幕灵活性?

有活动布局文件:

<?xml version="1.0" encoding="utf-8"?>
<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:id="@+id/activity_welcome"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="xxx.xx.xxxxxxx.WelcomeActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="58dp"
        android:background="#545454">

        <android.support.v7.widget.AppCompatImageButton
            android:layout_width="55dp"
            android:layout_height="wrap_content"
            app:srcCompat="@drawable/icarrowbackblack24dp"
            android:layout_alignParentStart="true"
            android:id="@+id/imageButton"
            android:layout_alignParentTop="true"
            android:background="@drawable/image_button"
            android:layout_alignParentBottom="true" />

        <TextView
            android:text="xxxxxx xxxxxxxxx"
            android:layout_width="140dp"
            android:layout_height="23dp"
            android:layout_marginStart="18dp"
            android:id="@+id/textView19"
            android:textSize="17dp"
            android:textColor="#ffffff"
            android:layout_alignParentTop="true"
            android:layout_marginTop="9dp"
            android:layout_toEndOf="@+id/imageButton" />

        <TextView
            android:text="xxxxxxx(x) xxxxx"
            android:layout_width="120dp"
            android:layout_height="wrap_content"
            android:textColor="#ffffff"
            android:id="@+id/textView21"
            android:layout_below="@+id/textView19"
            android:textSize="12dp"
            android:layout_alignStart="@+id/textView19"
            android:layout_alignParentBottom="true" />
    </RelativeLayout>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="459dp">
    <RelativeLayout
        android:layout_width="match_parent"
        android:id="@+id/relative_layout"
        android:layout_height="459dp"
        android:background="#d3d3d3">

        <ListView
            android:layout_width="match_parent"
            android:layout_height="459dp"
            android:id="@+id/messegesListView"
            android:divider="@null"
            android:dividerHeight="3dp"
            android:paddingBottom="6dp"
            android:listSelector="@drawable/listview_background"
            android:layout_alignParentTop="true"
            android:layout_alignParentStart="true">
        </ListView>
    </RelativeLayout>
    </ScrollView>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="43dp"
        android:background="#ffffff">
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="43dp"
        android:background="#ffffff">
        <EditText
            android:layout_width="325dp"
            android:layout_height="43dp"
            android:layout_alignParentBottom="true"
            android:hint="xxxxxx xxxxxxxxx..."
            android:background="@android:color/transparent"
            android:layout_alignParentStart="true"
            android:id="@+id/editText" />

        <Button
            android:text=">"
            android:layout_width="43dp"
            android:layout_height="43dp"
            android:id="@+id/button10"
            android:scaleType="fitCenter"
            android:background="@drawable/button"
            android:textColor="@color/button_text_color"
            android:layout_alignParentBottom="true"
            android:layout_alignParentEnd="true" />

        <Button
            android:text=""
            android:layout_width="43dp"
            android:layout_height="43dp"
            android:layout_alignParentBottom="true"
            android:id="@+id/button11"
            android:background="@drawable/button"
            android:textColor="@color/button_text_color"
            android:layout_toStartOf="@+id/button10" />
    </RelativeLayout>

</LinearLayout>

1 个答案:

答案 0 :(得分:0)

我觉得有几件事对你来说很重要:

  • 请勿在{{1​​}}内添加ListViewScrollView可以处理它自己的滚动事件。
  • 将视图的高度设置为硬编码值(在本例中为ListView)可能会在某些设备上显示不佳。这就是459dp的概念派上用场的地方。

这就是我实现你的布局的方式。

  • 我已移除layout_weights
  • 我已将ScrollView的{​​{1}}设置为1,并将其layout_weight更改为ListView。这可确保列表视图占用布局中任何未占用的空间。

    layout_height