【问题标题】:unable to change navigation drawer toggle Icon无法更改导航抽屉切换图标
【发布时间】:2020-01-23 06:23:24
【问题描述】:

我正在尝试更改用于打开和关闭导航抽屉的切换按钮的抽屉图标。但是我所有的努力都失败了,我没有成功。请帮我解决这个问题。

val d = BitmapDrawable(this.getResources(), path) as Drawable

            toggle!!.setHomeAsUpIndicator(d)

            if (path != null && path != "") {
                Picasso.with(this)?.load(path.toString())?.placeholder(resources?.getDrawable(R.drawable.ic_add_a_photo_black_24dp))?.error(
                    resources.getDrawable(
                        android.R.drawable.ic_input_add
                    )
                )!!.into(userPhotoImv)
            }

【问题讨论】:

  • mToolbar.setNavigationIcon(R.drawable.navIcon);用这个。这是为 java 你需要为 kotlin 更改它
  • 我正在使用来自服务器的图像路径更改它,但它是空白的
  • @mdgouse 请检查更新的答案可能对您有所帮助。
  • 如果我的回答对你有帮助,请把我的回答标记为正确,否则我会删除这个答案兄弟:google.com/…:

标签: android android-layout android-fragments kotlin navigation-drawer


【解决方案1】:

在 java 中发布我的答案可能会有所帮助。

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(false);
toggle.setDrawerIndicatorEnabled(false);
toggle.setHomeAsUpIndicator(R.drawable.ic_custom_drawer_icon);

为切换设置 Liteners。

toggle.setToolbarNavigationClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            if (drawer.isDrawerOpen(GravityCompat.START)) {
                drawer.closeDrawer(GravityCompat.START);
            } else {
                drawer.openDrawer(GravityCompat.START);
            }
        }
    });

【讨论】:

  • 但是我想把这个drawable转换成位图
  • 我有来自服务器的路径
  • @mdgouse 我已经添加了答案,请检查一下。它的工作 java 代码,但是当它复制到你的 kotlin 中时,它会建议转换为 kotlin
【解决方案2】:

试试这个方法

首先从 url 创建位图图像

try {
    URL url = new URL("http://....");
    Bitmap image = BitmapFactory.decodeStream(url.openConnection().getInputStream());
} catch(IOException e) {
    System.out.println(e);
}

现在像这样初始化导航抽屉

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

    navView.setNavigationItemSelectedListener(this);
    //change navigation icon
    toggle.setDrawerIndicatorEnabled(false);

    Drawable drawable = new BitmapDrawable(getResources(), bitmap);

    toggle.setHomeAsUpIndicator(drawable);

注意:这是 java 工作代码,你需要在 kotlin 中进行更改(我认为你可以在你的类中复制它时直接将其转换为 kotlin)

希望这项工作:)

【讨论】:

  • toggle.sethomeupindicator 不拍摄位图类型的图像
  • @mdgouse 检查我已经编辑了我的答案,将位图图像转换为可绘制然后设置图标
  • 如果以上答案对您有帮助,请尝试将此代码用于上述异常:stackoverflow.com/a/46035352/3974530
  • 试试 runOnUiThread(new Runnable() { @Override public void run() { //你的代码在这里 } });
【解决方案3】:

通常你可以设置如下代码sn-p:

        Toolbar chatbox_toolbar = findViewById(R.id.toolbar);
        chatbox_toolbar.setTitleTextColor(getResources().getColor(R.color.white));
        setSupportActionBar(chatbox_toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setHomeAsUpIndicator(R.mipmap.ic_back_arrow_gray);

如果你想从 URL 添加一个动态图像,请稍等,我会在此更新

使用 Glide 库:

        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayUseLogoEnabled(true);

        Glide.with(this).asDrawable().load(YourImageUrl).into(new CustomTarget<Drawable>() {
        @Override
        public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
            getSupportActionBar().setLogo(resource);
        }
       @Override
       public void onLoadCleared(@Nullable Drawable placeholder) {
      }
});

使用 Piccasso 库:

final ActionBar MyActionBar = getSupportActionBar();
Picasso.with(this)
       .load(YourImageUrl)
       .into(new Target()
       {
           @Override
           public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from)
           {
               Drawable drawble = new BitmapDrawable(getResources(), bitmap);
               MyActionBar .setIcon(drawble);
               MyActionBar .setDisplayShowHomeEnabled(true);
               MyActionBar .setDisplayHomeAsUpEnabled(true);
           }

           @Override
           public void onBitmapFailed(Drawable errorDrawable)
           {
           }

           @Override
           public void onPrepareLoad(Drawable placeHolderDrawable)
           {
           }
       });   

如果没有得到您的结果,则隐藏您的操作栏主页按钮并在自定义标题工具栏中获取一个 Imageview,然后使用 Glide 或 piccaso 从您的图像 URL 设置图像。如果您需要帮助,请让我进一步了解,首先尝试上面的代码 sn-ps。

试试这个对你有帮助

【讨论】:

  • kotlin 中的目标问题...无法解析目标
  • 请帮我画毕加索
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-02
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多