BottomNavigationView自定义项目图像

时间:2017-10-22 06:37:00

标签: android android-layout bottomnavigationview

我想在用户登录时将自定义图像设置为BottomNavigationView中的“个人资料”项目。我有用户的图片网址。

这是建议的设计

enter image description here

5 个答案:

答案 0 :(得分:1)

您可以这样做:

BottomNavigationView navigation;

然后在你的onCreate:

    navigation = findViewById(R.id.navigation);
    Menu a = navigation.getMenu();
    MenuItem b = a.findItem(R.id.profile_menu);
    if(userloggedIn){
        b.setIcon(R.drawable.icons_logged_in);
    }
    else{
        b.setIcon(R.drawable.icon_logged_out);
    }

如果您想从URL加载,可以使用Glide或Picasso。

答案 1 :(得分:1)

目前,尚无合适的解决方案,但是您可以执行以下操作。为我工作。

  ..........
   <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">


    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottom_menu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        app:elevation="0dp"
        app:itemBackground="@color/bottomMenuColor"
        app:itemHorizontalTranslationEnabled="false"
        app:itemTextAppearanceActive="@style/BottomNavigationView"
        app:itemTextAppearanceInactive="@style/BottomNavigationView"
        app:labelVisibilityMode="unlabeled"
        app:menu="@menu/main_menu" />

    <ImageView
        android:id="@+id/imgView"
        android:layout_width="@dimen/scale_30dp"
        android:layout_height="@dimen/scale_30dp"
        android:layout_alignParentEnd="true"
        android:layout_centerVertical="true"
        android:layout_marginEnd="@dimen/scale_40dp"
        android:src="@drawable/temp_person" />
</RelativeLayout>
 .......

答案 2 :(得分:0)

我使用此代码使其工作。 (科特琳)

导航是BottomNavigationView

val menu = navigation.menu
val menuItem = menu.findItem(R.id.my_account)
Glide.with(this)
        .asBitmap()
        .load("https://my_account_image_url")
        .apply(RequestOptions
                .circleCropTransform()
                .placeholder(R.drawable.ic_avatar))
        .into(object : SimpleTarget<Bitmap>() {
            override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
                menuItem?.icon = BitmapDrawable(resources, resource)
            }
        })

答案 3 :(得分:0)

您可以使用Glide在底部导航视图中设置个人资料图像。在设置配置文件图像之前,需要将图像加载为位图。然后,将位图转换为Drawable类型以设置项目图标。

这是完成的方式。

首先在应用程序级别build.gradle

调用
implementation 'com.github.bumptech.glide:glide:4.9.0'

然后单击立即同步

然后,在BottomNavigationView所在的活动中,您可以执行类似的操作。

Glide.with(getApplicationContext()).asBitmap().load(*yourImageUrl*)
.into(new CustomTarget<Bitmap>() {

  @Override
  public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
    Drawable profileImage = new BitmapDrawable(getResources(), resource);
    bottomNavigationView.getMenu().getItem(*yourItemIndex*).setIcon(profileImage);
  }

  @Override
  public void onLoadCleared(@Nullable Drawable placeholder) {

  }
}

参考文献:

  1. How does one use glide to download an image into a bitmap?
  2. How to convert a Bitmap to Drawable in android?

答案 4 :(得分:0)

在AppCompat 1.1.0中,您还需要为此删除色调。

val menu = navigation.menu
val menuItem = menu.findItem(R.id.profile_menu_item)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        menuItem?.iconTintList = null
        menuItem?.iconTintMode = null
}

Glide.with(this)
        .asBitmap()
        .load("url")
        .apply(RequestOptions
                .circleCropTransform()
                .placeholder(R.drawable.placeholder))
        .into(object : CustomTarget<Bitmap>(24.toPixel(), 24.toPixel()) {
            override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
                menuItem?.icon = BitmapDrawable(resources, resource)
            }

            override fun onLoadCleared(placeholder: Drawable?) {}
        })