TextDrawable - getSupportActionBar.setLogo(Drawable drawable)不起作用

时间:2016-01-07 08:50:22

标签: android android-layout android-actionbar toolbar android-toolbar

我想在我的工具栏中添加一个徽标,其中包含来自https://github.com/amulyakhare/TextDrawable的自定义绘图。

但此代码不显示任何内容

TextDrawable drawable = TextDrawable.builder() .buildRound("A", Color.RED); getSupportActionBar().setLogo(drawable);

但是,如果我尝试使用“普通”绘图,它就可以了。

getSupportActionBar().setLogo(R.drawable.ic_launcher);

提前致谢

1 个答案:

答案 0 :(得分:1)

编辑: Mike M.评论中添加的解决方案效果很好,但看起来很糟糕:

以下是此解决方案的代码:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
TextDrawable drawable = TextDrawable.builder().beginConfig().width(40).height(40).endConfig()
        .buildRound("A", Color.RED);
toolbar.setLogo(drawable);
  

注意:在此解决方案中,您需要设置width()徽标的height()TextDrawable,因为它具有默认值-1。没有它,你将看不到你的TextDrawable图标。

     

这是因为Toolbar类使用logo参数动态创建wrap_content

     

TextDrawable需要ImageView的宽度和高度,所以请不要使用wrap_content值,否则会获得默认-1值,您将看不到你的形象。

     

而不是设置硬编码值,如下面的示例所示,match_parent或使用layout_weight来设置您想要的TextDrawable的大小。

这是我的解决方案 - 使用自定义工具栏

创建TextDrawable徽标
  1. 创建名为action_bar.xml
  2. 的自定义布局
  3. 加入此代码

    <ImageView
        android:id="@+id/image_view"
        android:layout_width="32dp"
        android:layout_height="32dp"
        tools:src="@mipmap/ic_launcher"/>
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="10dp"
        android:text="@string/app_name"
        android:textColor="#ffffff"
        android:textSize="24sp"
        android:textAlignment="gravity"
        android:gravity="center_vertical"/>
    

  4. onCreate类中添加此MainActivity方法代码:

    //SET A DRAWABLE TO IMAGEVIEW
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
    getSupportActionBar().setCustomView(R.layout.actionbar_main);
    
    TextDrawable drawable = TextDrawable.builder()
            .buildRound("A", getResources().getColor(R.color.colorAccent));
    ImageView imageView = (ImageView) findViewById(R.id.image_view);
    imageView.setImageDrawable(drawable);
    
  5. 更改后应如下所示:

  6. 希望有所帮助