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

但是这段代码什么也没显示

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

但是,如果我尝试使用“常规”可绘制对象,它将起作用。

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


提前致谢

最佳答案

编辑: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徽标


创建名称为action_bar.xml的自定义布局
将此代码放入其中




<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"/>



将以下代码添加到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);

更改后,它应类似于:




希望对你有帮助

08-05 08:27