Android 导航图标 - 个人资料图片而不是汉堡包图标

Posted

技术标签:

【中文标题】Android 导航图标 - 个人资料图片而不是汉堡包图标【英文标题】:Android Navigation Icon - Profile picture instead of hamburger icon 【发布时间】:2018-01-08 18:46:42 【问题描述】:

我正在尝试找到如何将打开导航抽屉的汉堡图标更改为可以用毕加索或类似的东西加载的自定义图像。就像上图一样,Twitter 设法将我的个人资料图片替换为他们之前的汉堡包图标。

我在这里找不到类似的东西,也不知道该怎么做。

如果有人能得到样品或有关如何操作的指导,我将不胜感激。

编辑

我的一些 Activity 代码:

ActivityMapsBinding binding;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    binding = DataBindingUtil.setContentView(this, R.layout.activity_maps);

    ...

    setSupportActionBar(binding.mapsContent.toolbar);
    getSupportActionBar().setTitle("");

    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, binding.drawerLayout, binding.mapsContent.toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    binding.drawerLayout.addDrawerListener(toggle);

    toggle.syncState();

    binding.navView.setNavigationItemSelectedListener(this);



@Override
public void onBackPressed() 
    if (binding.drawerLayout.isDrawerOpen(GravityCompat.START)) 
        binding.drawerLayout.closeDrawer(GravityCompat.START);
     else if (doubleBackToExitPressedOnce) 
        super.onBackPressed();
        return;
    

    this.doubleBackToExitPressedOnce = true;
    Toast.makeText(this, R.string.message_press_twice, Toast.LENGTH_SHORT).show();

    new Handler().postDelayed(() -> doubleBackToExitPressedOnce = false, 2000);


@Override
public boolean onCreateOptionsMenu(Menu menu) 
    getMenuInflater().inflate(R.menu.main, menu);
    return true;


@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) 
    switch (item.getItemId())
        case R.id.nav_profile:
            break;
        case R.id.nav_settings:
            break;
    

    binding.drawerLayout.closeDrawer(GravityCompat.START);
    return true;

编辑 2 - 找到答案

在此线程中获得 Bruno Pinto 的帮助和一些研究后,我终于成功了。 您需要创建一个 Target 并将 ImageView 的标签设置为此 Target,并且当您使用 Picasso 加载时,您会引用您创建的这个 ImageView。在 Target 的构造函数中,您将视图替换为加载的位图。

我是这样做的:

private void changeImageDrawable()
    ImageView profileImage = (ImageView) binding.navView.getHeaderView(0).findViewById(R.id.iv_profile_image);

    final Target target = new Target() 
        @Override
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) 
            profileImage.setImageBitmap(bitmap);

            Drawable drawable = new BitmapDrawable(getResources(), bitmap);
            binding.mapsContent.toolbar.setNavigationIcon(drawable);
        

        @Override
        public void onBitmapFailed(Drawable errorDrawable) 

        

        @Override
        public void onPrepareLoad(Drawable placeHolderDrawable) 

        
    ;

    profileImage.setTag(target);

    Picasso.with(this)
            .load("YOUR_IMAGE_URL_HERE")
            .placeholder(R.drawable.placeholder_profile)
            .error(R.drawable.placeholder_profile)
            .into(target);

如果出现错误,您也应该更改视图可绘制对象或位图。

【问题讨论】:

我知道一种可能的方法,但我需要查看您的代码,在这里发布您的活动代码。 您可以创建一个布局并将其用作ActionBar。所以你可以添加任何你想要的东西。 @BrunoFerreira 我用一些代码编辑了我的问题 【参考方案1】:

您可以使用 Toolbar 中的 .setNavigationIcon() 方法。

类似这样的:

((Toolbar) getSupportActionBar()).setNavigationIcon(YOUR_ICON);

【讨论】:

YOUR_ICON 我可以放一些自定义图片加载毕加索? 是的。可以是可绘制对象的 id,也可以是可绘制对象本身。 谢谢!我编辑了我的问题。连同 Target 和您的回答,我让它发挥了作用。 如何将它用于 kotlin? 这里的问题,***.com/questions/66489707/…

以上是关于Android 导航图标 - 个人资料图片而不是汉堡包图标的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms Android 保留汉堡包/菜单图标而不是后退按钮

在 Facebook 时间线上分享照片而不是个人资料图片:Android

Android - 将 ActionBar 后退按钮切换为导航按钮

将图标添加到 SlidingTabLayout 而不是文本

png中的图标用于底部导航栏android

Android导航组件“向上按钮”打开抽屉导航