首页 > 解决方案 > 水平线问题中的简单布局TextView和ImageBottom

问题描述

我想在宽度 = wrap_content 的水平线上设置 TextView 和 ImageBottom。所以我尝试使用:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:gravity="center"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/widget_warning"
        android:textStyle="bold"
        />
    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_settings_black"
        android:id="@+id/info"
        android:onClick="onClick"
        />
</LinearLayout>

它是有效的,但如果文本很大,那么 ImageButton 是不可见的(如果交换 ImageButton 和 TextView 那么它工作得很好)。

对于此变体:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:gravity="center"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/widget_warning"
        android:textStyle="bold"
        />

    <ImageButton
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_settings_black"
        android:id="@+id/info"
        android:onClick="onClick"
        />
</LinearLayout>

TextView 和 ImageButton 被截断。如果使用 TableLayout 我会得到相同的结果。 截屏

我不想对两者都使用 weight 属性:ImageButton 必须具有 wrap_content 宽度。 我不使用支持库。GridLayout 不起作用。相对布局:如果 Button 左侧的文本,则文本使用所有宽度及以上。有任何想法吗?

标签: androidandroid-layout

解决方案


尝试使用maxEms="18"或类似下面的东西

<?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="wrap_content"
    android:gravity="center"
    android:orientation="horizontal">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:maxEms="18"
        android:text="Warning, if widget will stipped then try to set the off battery optimization"
        android:textStyle="bold" />

    <ImageButton
        android:id="@+id/info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClick"
        android:src="@drawable/ic_settings_black" />

</LinearLayout>

输出:

在此处输入图像描述

编辑:使用ConstraintLayout

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/tvTitle"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:padding="4dp"
        android:text="Warning, if widget will stipped then try to set the off battery optimization"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@id/info"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageButton
        android:id="@+id/info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClick"
        android:src="@drawable/ic_account"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/tvTitle"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

推荐阅读