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

时间:2017-08-01 18:55:04

标签: android toolbar drawerlayout android-navigation-drawer hamburger-menu

Twitter's Toolbar

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

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

如果有人有关于如何做的样本或指导,我会非常感激。

修改

我的一些活动代码:

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。在Tar​​get的构造函数中,您可以使用加载的Bitmap替换视图。

我是这样做的:

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);
}

如果出现错误,您可能应该更改视图drawable或bitmap。

1 个答案:

答案 0 :(得分:1)

您可以使用工具栏中的 .setNavigationIcon()方法。

这样的事情:

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