在编程侧的ActionBar中可绘制的后退箭头的ID

时间:2018-12-05 18:52:01

标签: java xml android-studio kotlin android-resources

我正在搜索后退箭头的默认可绘制对象。在this question中展示了如何在xml中获取它。但是我正在寻找在编程方面使用(java / kotlin)。

我想在类似以下代码中使用此drawable id:

ContextCompat.getDrawable(context, homeAsUpIndicatorId);

2 个答案:

答案 0 :(得分:1)

创建可绘制对象并将可绘制对象ID传递给函数。例如,我创建了一个称为arrow_back.xml的矢量可绘制对象。

<?xml version="1.0" encoding="utf-8"?>
    <vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0"
        android:autoMirrored="true">
        <path
            android:pathData="M20,11L7.8,11l5.6,-5.6L12,4l-8,8l8,8l1.4,-1.4L7.8,13L20,13L20,11z"
            android:fillColor="#fff"/>
    </vector>
  

注意homeAsUpIndicatorId所引用的可绘制对象具有一个   私人修饰符,因此您无法直接访问它。但是,以上   代码是从向量drawable复制而来的,几乎没有修改。

我将把id传递给getDrawable()函数,

ContextCompat.getDrawable(context, R.drawable.arrow_back);

编辑: 执行以下操作以从homeAsUpIndicatorId获取可绘制对象:

    TypedArray a = getTheme().obtainStyledAttributes(R.style.AppTheme, new int[] {R.attr.homeAsUpIndicator});
    int attributeResourceId = a.getResourceId(0, 0);
    ContextCompat.getDrawable(context, attributeResourceId);
    a.recycle()

答案 1 :(得分:1)

您可以使用此代码段

val a = theme.obtainStyledAttributes(R.style.AppTheme, (R.attr.homeAsUpIndicator))
val attributeResourceId = a.getResourceId(0, 0)
val drawable = ContextCompat.getDrawable(this, attributeResourceId)