Android 中的 snackbar 上的 ImageView 没有采用 ṁinimum 宽度

问题描述 投票:0回答:1

我正在尝试启动一个带有关闭图标的

snackbar
,以在最后关闭它。这是我的自定义
snackbar
构建,对默认
snackbar
进行了一些更改。当设备上有足够的空间来显示文本和图标时,它在横向模式下工作正常。

但是在纵向模式下,通过布局检查器我可以看到屏幕上有视图。但它并没有采用它应该采用的最小宽度。虽然在

XML
文件中,我已经定义了它应该占用的最小高度和宽度。

这可能是什么原因,我该如何解决?

我的布局是

LinearLayout

我的布局 xml 文件是:-

<?xml version="1.0" encoding="utf-8"?>
<view
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    class="com.example.testtransitentviews.CustomSnackbarContentLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="48dp">

    <ImageView
        android:id="@+id/snackbar_image"
        android:src="@drawable/pw_diamond"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical|start"
        android:minHeight="24dp"
        android:minWidth="24dp"
        app:tint="@color/white" />

    <TextView
        android:id="@+id/snackbar_text"
        style="?attr/snackbarTextViewStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:ellipsize="end"
        android:maxLines="1"
        android:textColor="@color/color_snackbar_text" />

    <ImageView
        android:id="@+id/snackbar_action_image"
        android:src="@drawable/ic_close"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minHeight="24dp"
        android:minWidth="24dp"
        android:contentDescription="Close"
        android:layout_gravity="center_vertical|end"/>
</view>

这是我的班级

CustomSnackbarContentLayout
正在延伸
LinearLayout

public class CustomSnackbarContentLayout extends LinearLayout implements ContentViewCallback {
    private ImageView iconImageView;
    private TextView messageView;
    private ImageView closeActionView;


    public CustomSnackbarContentLayout(@NonNull Context context) {
        this(context, null);
    }

    public CustomSnackbarContentLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        iconImageView = findViewById(R.id.snackbar_image);
        messageView = findViewById(R.id.snackbar_text);
        closeActionView = findViewById(R.id.snackbar_action_image);
    }

    public ImageView getIconImageView() {
        return iconImageView;
    }

    public TextView getMessageView() {
        return messageView;
    }

    public ImageView getCloseActionView() {
        return closeActionView;
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }


    @Override
    public void animateContentIn(int delay, int duration) {
        messageView.setAlpha(0f);
        messageView.animate().alpha(1f).setDuration(duration).setStartDelay(delay).start();

        if (closeActionView.getVisibility() == VISIBLE) {
            closeActionView.setAlpha(0f);
            closeActionView.animate().alpha(1f).setDuration(duration).setStartDelay(delay).start();
        }
    }

    @Override
    public void animateContentOut(int delay, int duration) {
        messageView.setAlpha(1f);
        messageView.animate().alpha(0f).setDuration(duration).setStartDelay(delay).start();

        if (closeActionView.getVisibility() == VISIBLE) {
            closeActionView.setAlpha(1f);
            closeActionView.animate().alpha(0f).setDuration(duration).setStartDelay(delay).start();
        }
    }
}

这是我的

XML
文件,用于我正在使用的可绘制“关闭”按钮。

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24.0"
    android:viewportHeight="24.0"><path
    android:pathData="M19,6.4L17.6,5L12,10.6L6.4,5L5,6.4l5.6,5.6L5,17.6L6.4,19l5.6,-5.6l5.6,5.6l1.4,-1.4L13.4,12L19,6.4z"
    android:fillColor="#FFFFFF"/>
</vector>

同样,即使我将包装内容作为我的

ImageView
的属性,它也应该至少需要 24dp 的高度和宽度。

如果你能弄清楚为什么我在

snackbar
上的关闭按钮没有采用所需的最小宽度,那么请回答。这将是一个很大的帮助!

提前致谢。

android android-layout imageview android-custom-view snackbar
1个回答
1
投票

您需要硬编码

TextView
的水平重量以允许关闭按钮显示:

<TextView
    android:id="@+id/snackbar_text"
    style="?attr/snackbarTextViewStyle"
    android:layout_width="0dp"
    android:layout_weight="1"
    ..../>
© www.soinside.com 2019 - 2024. All rights reserved.