我正在尝试启动一个带有关闭图标的
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
上的关闭按钮没有采用所需的最小宽度,那么请回答。这将是一个很大的帮助!
提前致谢。
您需要硬编码
TextView
的水平重量以允许关闭按钮显示:
<TextView
android:id="@+id/snackbar_text"
style="?attr/snackbarTextViewStyle"
android:layout_width="0dp"
android:layout_weight="1"
..../>