我正在尝试找到如何将打开导航抽屉的汉堡包图标更改为可以加载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。在Target的构造函数中,您可以使用加载的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。
答案 0 :(得分:1)
您可以使用工具栏中的 .setNavigationIcon()方法。
这样的事情:
((Toolbar) getSupportActionBar()).setNavigationIcon(YOUR_ICON);