android - RelativeLayout 问题不适合所有屏幕尺寸

标签 android android-relativelayout

我正在用 android 开发我的第一个应用程序,但我被 xml 布局困住了。我的布局中有 4 个 TextView , TextView 下方有 2 个图像按钮。 Textview 需要一个放在另一个下面,大小不同,即第 1 个和第 2 个 textview 是 1 行,第 3 个 textview 可以达到 3-4 行,第 4 个 textview 可以达到 2 行。 2 个按钮需要放在第 4 个 TextView 下方但彼此相邻。下面是我的布局文件:-

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:weightSum="1">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:id="@+id/name"
    android:text="LocAlert"
    android:textStyle="italic"
    android:layout_gravity="center_horizontal"
    android:layout_weight="0.07"
    android:textColor="@android:color/holo_blue_dark"
    android:layout_marginTop="37dp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:id="@+id/task_name"
    android:textStyle="bold"
    android:text="name"
    android:textColor="@android:color/tab_indicator_text"
    android:layout_gravity="center_horizontal"
    android:layout_below="@+id/name"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="39dp" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textColor="@android:color/tab_indicator_text"
    android:text="location"
    android:layout_gravity="center_horizontal"
    android:id="@+id/task_location"
    android:gravity="center"
    android:layout_marginTop="42dp"
    android:layout_below="@+id/task_name"
    android:layout_centerHorizontal="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:text="distance"
    android:textColor="@android:color/tab_indicator_text"
    android:layout_gravity="center_horizontal"
    android:id="@+id/task_distance"
    android:layout_marginBottom="56dp"
    android:layout_above="@+id/imageButton"

    android:layout_centerHorizontal="true"/>

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imageButton"
    android:src="@drawable/speakblue"
    android:background="#FFFFFF"
    android:text="Speak Out"
    android:layout_marginBottom="55dp"
    android:layout_alignParentBottom="true"
    android:layout_toStartOf="@+id/task_name" />

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/imageButton2"
    android:background="#FFFFFF"
    android:src="@drawable/okblue"
    android:layout_below="@+id/task_distance"
    android:layout_alignParentEnd="true" />

我面临的问题是在第 3 个和第 4 个 TextView 以及图像按钮中。随着我的第 3 个 textview 大小根据行增加和减少,我的第 4 个 textview 和按钮也搞砸了..不适合以相同格式正确放置..当我在具有大屏幕尺寸的设备上运行我的应用程序时 TextView 之间有很多差距..我怎样才能让我的布局适合所有屏幕尺寸和适当的空间..请帮助..

已编辑

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

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:id="@+id/name"
    android:text="LocAlert"
    android:textStyle="italic"
    android:layout_gravity="center_horizontal"
    android:layout_weight="1"
    android:textColor="@android:color/holo_blue_dark"
    android:layout_marginTop="37dp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:id="@+id/task_name"
    android:textStyle="bold"
    android:text="name"
    android:textColor="@android:color/tab_indicator_text"
    android:layout_gravity="center_horizontal"
    android:layout_below="@+id/name"
    android:layout_centerHorizontal="true"
    android:layout_weight="1" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textColor="@android:color/tab_indicator_text"
    android:text="location"
    android:layout_gravity="center_horizontal"
    android:id="@+id/task_location"
    android:gravity="center"
    android:layout_weight="1"
    android:layout_below="@+id/task_name"
    android:layout_centerHorizontal="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:text="distance"
    android:textColor="@android:color/tab_indicator_text"
    android:layout_gravity="center_horizontal"
    android:id="@+id/task_distance"
    android:layout_below="@+id/task_location"

    android:layout_weight="1"
    android:layout_centerHorizontal="true"/>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/task_distance">

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageButton"
        android:src="@drawable/speakblue"
        android:background="#FFFFFF"
        android:text="Speak Out"
        android:layout_weight="1" />

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageButton2"
        android:background="#FFFFFF"
        android:src="@drawable/okblue"

        android:layout_weight="1"
        android:layout_gravity="right"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true" />

</RelativeLayout>

I ended up with this.. There's a space between the 2nd textview and 3rd textview which i don't want.. How can i solve this.. ?

enter image description here

最佳答案

您正在为前三个 TextView 使用 margintop,然后为其余元素切换到 margin bottom,因此这是相对于父顶部和底部固定元素。然后留下最中间的元素来填补中间的空白。

  1. 我会使用 layout_below 来提交 TextView 和按钮之间的位置差异,而不是将 top_margin/bottom 提交给父元素。

    http://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.html#attr_android:layout_below

  2. 我会为每个 TextView /按钮使用权重总和,总和为权重总和..

What is android:weightSum in android, and how does it work?

关于android - RelativeLayout 问题不适合所有屏幕尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30695557/

相关文章:

android - 将 12 (PM/AM)Hour AM PM 时间中的字符串转换为 24 小时时间 android

android - 相对布局中重叠的 TextView

android - 相对布局内的文本水平对齐方式

java - 单击按钮时如何设置计时器?

android - Java简单的时间戳到日期的转换

android - 在相对布局中将 TextView 与 EditText 对齐

android - ImageView 不拉伸(stretch)(Android)?

android - 顶部 LinearLayout 在底部 LinearLayout 之前占用最大空间

android - 用户是否可以在 Play 商店(反之亦然)中更新应用程序(已从不同的应用程序下载,例如 Mi Store)?

android - 在屏幕上创建应用程序图标时如何防止 toast 消息