1

我正在开发一个 Android 应用程序。在我的应用程序中,我使用带有自定义视图的小吃吧。我的自定义视图只有子视图。那是一个图像视图。显示带有小吃店的自定义视图是可以的。但问题在于快餐栏中 ImageView 的大小。我想将其设置为与父匹配。但宽度与小吃店的宽度不匹配。

这是我的小吃店自定义视图布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:scaleType="centerCrop"
        android:id="@+id/snackbar_ad_image"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</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 具有相同的宽度并适合小吃店?

4

4 回答 4

6

试试下面的代码,

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();
}
于 2016-06-25T16:47:13.153 回答
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();
于 2017-02-02T11:38:31.363 回答
0

您必须在 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) {

                    }
                });
于 2016-06-25T16:36:52.843 回答
-1

每当使用自定义视图时,请始终避免使用 LinearLayout 作为根元素。它把事情搞砸了。

对于您的问题,请尝试将 xml 中的 LinearLayout 替换为 RelativeLayout。

于 2016-07-19T14:23:21.590 回答