Поддержка скинов Android: skin-support
Skin-support — это простая в использовании структура скинов для Android. В лучшем случае для интеграции структуры требуется всего одна строка кода.
SkinCompatManager.withoutActivity(this).loadSkin();
Теперь у вас есть мощная функция настройки внешнего вида. Всё, что вам нужно сделать, это создать скин.
По умолчанию | В приложении | Плагин |
---|---|---|
![]() |
![]() |
![]() |
Gradle Dependency доступна через jCenter,
Для получения последней версии обратитесь к журналу изменений.
Добавьте зависимости для AndroidX:
implementation 'skin.support:skin-support:4.0.5' // skin-support
implementation 'skin.support:skin-support-appcompat:4.0.5' // skin-support basic widget
implementation 'skin.support:skin-support-design:4.0.5' // skin-support-design material design support [selectable]
implementation 'skin.support:skin-support-cardview:4.0.5' // skin-support-cardview CardView support [selectable]
implementation 'skin.support:skin-support-constraint-layout:4.0.5' // skin-support-constraint-layout ConstraintLayout support [selectable]
Добавьте зависимости для библиотек поддержки:
implementation 'skin.support:skin-support:3.1.4' // skin-support basic widget
implementation 'skin.support:skin-support-design:3.1.4' // skin-support-design material design support [selectable]
implementation 'skin.support:skin-support-cardview:3.1.4' // skin-support-cardview CardView support [selectable]
implementation 'skin.support:skin-support-constraint-layout:3.1.4' // skin-support-constraint-layout ConstraintLayout support [selectable]
Только одна строка кода для интеграции фреймворка.
@Override
public void onCreate() {
super.onCreate();
SkinCompatManager.withoutActivity(this) // Basic Widget support
.addInflater(new SkinMaterialViewInflater()) // material design support [selectable]
.addInflater(new SkinConstraintViewInflater()) // ConstraintLayout support [selectable]
.addInflater(new SkinCardViewInflater()) // CardView v7 support [selectable]
.setSkinStatusBarColorEnable(false) // Disable statusBarColor skin support,default true [selectable]
.setSkinWindowBackgroundEnable(false) // Disable windowBackground skin support,default true [selectable]
.loadSkin();
}
Если ваша Activity наследуется от AppCompatActivity, вам необходимо переопределить метод getDelegate().
@NonNull
@Override
public AppCompatDelegate getDelegate() {
return SkinAppCompatDelegateImpl.get(this, this);
}
// Загрузить указанный скин
SkinCompatManager.getInstance().loadSkin("new.skin"[, SkinLoaderListener], int strategy);
// восстановить тему по умолчанию
SkinCompatManager.getInstance().restoreDefaultTheme();
Реализуйте... SkinCompatSupportable интерфейс
Примените ресурс скина в методе applySkin.
Разрешите идентификатор ресурса скина в конструкторе.
Пользовательский вид может наследоваться напрямую от существующего виджета, такого как SkinCompatView, SkinCompatLinearLayout и т. д.
Например: CustomTextView.
Если вы не хотите наследовать от существующего виджета.
Например: CustomTextView2.
Если вам нужно настроить пользовательские атрибуты.
// такие как атрибут R.attr.popupBackground AutoCompleteTextView
Например: SkinCompatAutoCompleteTextView
Если вам необходимо использовать стороннюю библиотеку.
// необходимо использовать виджет https://github.com/hdodenhof/CircleImageView
Например: SkinCompatCircleImageView
Встроенный скин, если имя скина — «night», добавьте ресурс, который нужно оформить с суффиксом night или префиксом night.
Если исходный ресурс — R.color.windowBackgroundColor, то можно добавить ресурс R.color.windowBackgroundColor_night.
Загрузите встроенный скин:
SkinCompatManager.getInstance().loadSkin("night", SkinCompatManager.SKIN_LOADER_STRATEGY_BUILD_IN); // загрузка по суффиксу
SkinCompatManager.getInstance().loadSkin("night", SkinCompatManager.SKIN_LOADER_STRATEГИЯ_PREFIX_BUILD_IN); // загрузка по префиксу
Если оригинальный фон окна
colors.xml
<color name="background">#ffffff</color>
для ночного режима вы можете добавить это в проект skin-night
colors.xml
<color name="background">#000000</color>
Вы можете переименовать night.apk в night.skin самостоятельно.
Вы можете поместить пакет скинов в каталог assets/skins.
SkinCompatManager.getInstance().loadSkin("night.skin", SkinCompatManager.SKIN_LOADER_STRATEGY_ASSETS);
Или вы можете настроить стратегию загрузки:
Например:
Наследовать от SkinSDCardLoader, переопределить методы getSkinPath и getType.
public class CustomSDCardLoader extends SkinSDCardLoader {
public static final int SKIN_LOADER_STRATEGY_SDCARD = Integer.MAX_VALUE;
@Override
protected String getSkinPath(Context context, String skinName) {
return new File(SkinFileUtils.getSkinDir(context), skinName).getAbsolutePath();
}
@Override
public int getType() {
return SKIN_LOADER_STRATEGY_SDCARD;
}
}
Зарегистрируйте эту стратегию в Application's onCreate
SkinCompatManager.withoutActivity(this).addStrategy(new CustomSDCardLoader());
Используйте эту стратегию для загрузки скина:
SkinCompatManager.getInstance().loadSkin("night.skin", null, CustomSDCardLoader.SKIN_LOADER_STRATEGY_SDCARD);
Если вы хотите перечислить здесь свой apk. Добро пожаловать в коммит pull request или свяжитесь с автором. ## Об авторе
Пэнфэн Ван (王鹏锋)
email: ximsfei@gmail.com
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )