Идентификатор стрелки назад, отображаемой в ActionBar на стороне программирования - PullRequest
0 голосов
/ 05 декабря 2018

Я ищу по умолчанию для рисования стрелка назад.В этот вопрос показал, как получить его в XML.Но я ищу для использования в области программирования (Java / Kotlin).

Я хочу использовать этот идентификатор в коде, например:

ContextCompat.getDrawable(context, homeAsUpIndicatorId);

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Вы можете использовать этот фрагмент

val a = theme.obtainStyledAttributes(R.style.AppTheme, (R.attr.homeAsUpIndicator))
val attributeResourceId = a.getResourceId(0, 0)
val drawable = ContextCompat.getDrawable(this, attributeResourceId)
0 голосов
/ 06 декабря 2018

Создайте drawable и передайте идентификатор drawable в функцию.Например, я создаю векторную карту с именем 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, имеется закрытый модификатор, поэтому вы не можете получить к нему доступ напрямую.Однако приведенный выше код был скопирован из вектора, который можно нарисовать с небольшими изменениями.

Я передам идентификатор функции getDrawable() следующим образом.

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

РЕДАКТИРОВАТЬ: Выполните следующие действия, чтобы получить Drawable от 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()
...