Как получить атрибуты с пространством имен «андроид» в пользовательском TextView

В пользовательском TextView я пытаюсь получить значение text атрибута (например).

 TypedArray values = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.TextView); String text = values.getString(com.android.internal.R.styleable.TextView_text); 

Но я получаю сообщение об ошибке:

Пакета com.android.internal.R не существует

Итак, как получить атрибуты «по умолчанию» TextView?

Класс internal.R не отображается, поэтому вы можете читать их только через их методы доступа и только после того, как был вызван супер конструктор.

См. Источник TextView, чтобы узнать, как он работает внутри.

Если вы хотите иметь доступ к этим атрибутам «android», вы можете «переопределить» их: в объявлении декларируемого стиля, например.

 <attr name="android:padding"/> 

Тогда вы можете легко получить его таким образом:

 int padding = a.getInt(R.styleable.CustomView_android_padding, -1); 

Только для записи anwser вдохновлен исходным кодом макета TwoWayView, реализованным Lucas Rocha. Я думаю, что это хороший пример для анализа того, как реализовать пользовательские представления

Для доступа к ресурсу com.android.internal.R вы можете использовать

 Resources.getSystem().getIdentifier(name, defType, defPackage) 

Ссылка может быть полезна: