将快餐栏中的 ImageView 宽度与 Android 中的自定义视图匹配父项不起作用
Posted
技术标签:
【中文标题】将快餐栏中的 ImageView 宽度与 Android 中的自定义视图匹配父项不起作用【英文标题】:Match parent for width of ImageView in snackbar with custom view in Android is not working 【发布时间】:2016-10-28 01:28:06 【问题描述】:我正在开发一个 android 应用程序。在我的应用程序中,我使用带有自定义视图的小吃吧。我的自定义视图只有子视图。那是一个图像视图。显示带有小吃店的自定义视图是可以的。但问题在于快餐栏中 ImageView 的大小。我想将其设置为与父匹配。但是宽度和snackbar的宽度不匹配。
这是我为小吃店定制的视图布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_
android:layout_>
<ImageView
android:scaleType="centerCrop"
android:id="@+id/snackbar_ad_image"
android:layout_
android:layout_ />
</LinearLayout>
这就是我在活动中显示小吃店的方式
private void showSnackbarAd(View view,Ad ad)
final Snackbar snackbar = Snackbar.make(view,"",Snackbar.LENGTH_LONG);
Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout)snackbar.getView();
TextView textView = (TextView) layout.findViewById(android.support.design.R.id.snackbar_text);
textView.setVisibility(View.INVISIBLE);
View snackView = getLayoutInflater().inflate(R.layout.snack_bar_ad,null);
ImageView imageView = (ImageView)snackView.findViewById(R.id.snackbar_ad_image);
Picasso.with(getBaseContext()).load(ad.getImageUrl()).into(imageView);
layout.addView(snackView, 0);
snackbar.show();
我想要的是我想要 ImageView 相同宽度宽度的小吃店。但是我的代码不起作用。
这就是我得到的。
如何使 ImageView 与 Snackbar 具有相同的宽度并适合小吃吧?
【问题讨论】:
您似乎想拉伸图像吧?当你这样做时,有些图像可能看起来很丑。 是的。我想伸展。没关系。合适的图片将从后端上传。因为它是为了广告。请问怎么弄啊? 不确定它是否有效,但尝试将 scaleType 设置为 fitXY 并设置固定高度,因为无论如何,snackbar 的高度应始终为 48 或 80dp。您可以在此处阅读有关 scaleTypes 的更多信息:developer.android.com/reference/android/widget/… 将android:scaleType="fitXY"
添加到xml中的ImageView
我设置了 firXY。但只要给我同样的结果。
【参考方案1】:
你可以试试这个库。这是 android 默认快餐栏的包装器。 https://github.com/ChathuraHettiarachchi/CSnackBar
Snackbar.with(this,null)
.type(Type.SUCCESS)
.message("Profile updated successfully!")
.duration(Duration.SHORT)
.show();
或者您甚至可以使用自己的视图,
View view = getLayoutInflater().inflate(R.layout.custom_view, null);
Snackbar.with(this,null)
.type(Type.UPDATE)
.contentView(view, 76)
.duration(Duration.SHORT)
.show();
【讨论】:
【参考方案2】:每当使用自定义视图时,请始终避免使用 LinearLayout 作为根元素。它把事情搞砸了,太频繁了。
对于您的问题,尝试将xml中的LinearLayout替换为RelativeLayout。
【讨论】:
【参考方案3】:您必须在 xml 中指定宽度。所以图像将适合该宽度。 match_parent 属性不会设置宽度,因为没有指定特定的大小。
使用也可以试试下面的代码,
Picasso.with(image.getContext()).load(ad.getImageUrl()).into(new Target()
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from)
image.setImageBitmap(bitmap);
@Override
public void onBitmapFailed(Drawable errorDrawable)
@Override
public void onPrepareLoad(Drawable placeHolderDrawable)
);
【讨论】:
ImageView 在我使用这个时完全从小吃店消失了。【参考方案4】:试试下面的代码,
private void showSnackbarAd(View view,Ad ad)
final Snackbar snackbar = Snackbar.make(view,"",Snackbar.LENGTH_LONG);
Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout)snackbar.getView();
layout.setPadding(0, 0, 0, 0);//set padding to 0
TextView textView = (TextView) layout.findViewById(android.support.design.R.id.snackbar_text);
textView.setVisibility(View.INVISIBLE);
View snackView = getLayoutInflater().inflate(R.layout.snack_bar_ad, layout);// use the parent ViewGroup instead of null
ImageView imageView = (ImageView)snackView.findViewById(R.id.snackbar_ad_image);
Picasso.with(getBaseContext()).load(ad.getImageUrl()).into(imageView);
//layout.addView(snackView, 0);
snackbar.show();
【讨论】:
这段代码给了我 java.lang.***Error 异常。 我刚试过,它在我的设备上完美运行,你能发布堆栈跟踪吗 我可以看看你的xml布局吗? 哦,是的。这是工作。我忘了评论这一行 //layout.addView(snackView, 0)。非常感谢您的支持。以上是关于将快餐栏中的 ImageView 宽度与 Android 中的自定义视图匹配父项不起作用的主要内容,如果未能解决你的问题,请参考以下文章
在启用触摸模式的情况下显示小吃店时,无法将注意力集中在小吃店中的操作按钮上