有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

enter image description here

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

似乎没有办法,是吗?是否可能有一种变通方法可以使用,例如不断重新加载用于切换导航抽屉的ActionBarDrawerToggle

我想我可以尝试使用反射并在飞行中更改可绘制的,但我需要挖掘导航源以确保我正在更改的内容不会破坏任何东西


共 (2) 个答案

  1. # 1 楼答案

    您可以通过设置侦听器再次重新加载它:

    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();
    
  2. # 2 楼答案

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

    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. 拉韦尔斯利德法

      @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) {
      }
      

    mDrawerIcon是你的汉堡菜单视图