Можно ли программно создать представление материала (например, кнопку) и использовать определенный стиль, чтобы он выгляJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Можно ли программно создать представление материала (например, кнопку) и использовать определенный стиль, чтобы он выгля

Сообщение Anonymous »


Мы получаем разные XML-строки от некоторых JNI-вызовов, которые представляют определенные макеты, которые мы в настоящее время анализируем самостоятельно, а затем программно создаем связанные объекты представления и устанавливаем все конкретные конфигурации.

Button bt = новая кнопка(activityMain); bt.setTag(тег); bt.setLayoutParams(параметры); bt.setTextColor(цвет); Сейчас перед нами стоит задача: мы хотим использовать стили, которые мы определили на стороне Java. Поэтому мы извлекаем значение атрибута style из заданной XML-строки, ищем идентификатор связанного ресурса, а затем используем его в качестве 4-го аргумента в конструкторе.

int styleID = ActivityMain.getResources().getIdentifier( имя стиля, "стиль", ActivityMain.getPackageName() ); Кнопка bt = новая кнопка (activityMain, null, 0, styleID); Проблема здесь в том, что, к сожалению, не все представления (которые мы сейчас реализовали в нашем собственном парсере) поддерживают конструктор с 4 аргументами, например MaterialButton или AppCompatTextView и многие другие.

Поэтому я попытался использовать конструктор с тремя аргументами для MaterialButton. Если я правильно понял, третий аргумент определяет некоторый элемент/атрибут из выбранной мной темы, который ссылается на некоторый стиль.

Поэтому я добавил для целей тестирования один пользовательский атрибут и настроил его следующим образом:

// attrs.xml // themes.xml ... @style/myButtonStyle //styles.xml @color/my_primary100 @color/white100 // myFile.java MaterialButton bt = новый MaterialButton(activityMain, null, R.attr.myButtonStyle); Но я оказался в ситуации, когда не все настройки стиля были приняты, и кнопка выглядела иначе, чем когда я создавал ее путем надувания некоторого предопределенного макета, который использует точно такой же стиль.

// myLayout.xml При поиске других способов сделать это я обнаружил проблему в этой теме на github: создание кнопки со стилем программным способом не устанавливает все атрибуты

Разница, которую я здесь вижу, заключается в том, что стиль в примере решения имеет родительский элемент:

@color/... @drawable/.... @color/.... Это причина того, что на моей стороне это работает некорректно? Действительно ли стиль, на который есть ссылка в моей теме, должен определять стиль материала в качестве родительского, чтобы принять все настройки?

Нет ли другого решения моей «задачи»? Потому что стиль, на который я ссылаюсь, может использоваться и другими представлениями, а не только материальными. Поэтому я не всегда могу добавить туда родителя.

Я также открыт для других идей :-)
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»