Android:导航抽屉布局动态更改图标

时间:2014-09-17 02:56:55

标签: java android android-fragments view navigation-drawer

enter image description here

有没有办法动态更改导航抽屉的汉堡菜单图标的图像?我的用例是我的导航菜单中的每个片段我根据正在查看的内容为操作栏着色,所以有时我需要白色图标或黑色图标。

似乎没有办法吗?是否可以使用我可以使用的工作,例如不断重新加载我用来切换导航抽屉等的ActionBarDrawerToggle

我想我可以尝试使用反射并在运行中更改drawable,但我需要深入了解导航源以确保我所做的更改不会破坏任何内容。

2 个答案:

答案 0 :(得分:4)

您可以通过设置监听器重新加载它:

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                newDrawable, R.string.app_name,
                newDrawable) {

    public void onDrawerClosed(View drawerView) {
    };

    public void onDrawerOpened(View drawerView) {
    };

};

mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerToggle.syncState();

答案 1 :(得分:0)

使用动态填充来缩进汉堡包菜单图标。

  1. 设置DrawerListener

    density = getResources().getDisplayMetrics().density;
    maxIconIndent = (int) (density * 8.0f);
    
    mDrawerIcon = (TextView) findViewById(R.id.ic_drawer);
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer);
    drawerLayout.setDrawerListener(this);
    
  2. 覆盖onDrawerSlide方法

    @Override
    public void onDrawerSlide(View view, float v) {
        int indent = (int) (v * maxIconIndent);
        mDrawerIcon.setPadding(-indent, 0, (int) (density * 8.0f), 0);
    }
    
    @Override
    public void onDrawerOpened(View view) {
    }
    
    @Override
    public void onDrawerClosed(View view) {
    }
    
    @Override
    public void onDrawerStateChanged(int i) {
    }
    
  3. mDrawerIcon是您的汉堡包菜单视图。