Могу ли я настроить глобальные пользовательские стили приложения для виджетов android-support-design?
Я хотел бы определить пользовательские стили для некоторых виджетов из Android Support Design (например, AppBarLayout, TextInputLayout, FAB...) и установить эти стили по умолчанию для моего проекта, как я могу сделать с EditText и другими системными виджетами. Например:
<style name="Theme.MyApp" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="android:editTextStyle">@style/Theme.MyApp.EditText</item>
</style>
<style name="Theme.MyApp.EditText" parent="Widget.AppCompat.EditText">
<item name="android:textColor">@color/my_awsome_edittext_color</item>
<item name="android:layout_height">wrap_content</item>
</style>
Моя текущая проблема настроена на повышение AppBarLayout elevation="0dp" для конкретной деятельности, которая имеет свою собственную тему. Изучив исходный код AppBarLayout для службы поддержки Android, я обнаружил, что у него есть тема с именем Widget.Design.AppBarLayout
, так я и сделал:
<style name="Theme.MyApp.AppBarLayout" parent="Widget.Design.AppBarLayout">
<item name="elevation">0dp</item>
</style>
Но я не нашел атрибута, чтобы установить его в моем Theme.MyApp
, лайк android:editTextStyle
, И это верно для TextInputLayout, FAB и так далее. Эти виджеты настраивают свои темы, получая непосредственно из ресурса:
TypedArray a = context.obtainStyledAttributes(attrs,
R.styleable.AppBarLayout, R.style.Widget_Design_AppBarLayout);
Итак, неужели нет способа определить стили в этой форме? Если нет, то есть ли техническая причина не предоставлять эту функцию?
0 ответов
С помощью темы компонентов материала вы можете определить в своей теме приложения стиль, используемый виджетами.
Вы можете использовать что-то вроде:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
<!-- Widget styles -->
<item name="appBarLayoutStyle">@style/Widget.MaterialComponents.AppBarLayout.Primary</item>
<item name="badgeStyle">@style/Widget.MaterialComponents.Badge</item>
<item name="bottomAppBarStyle">@style/Widget.MaterialComponents.BottomAppBar</item>
<item name="bottomNavigationStyle">@style/Widget.MaterialComponents.BottomNavigationView</item>
<item name="chipStyle">@style/Widget.MaterialComponents.Chip.Action</item>
<item name="chipGroupStyle">@style/Widget.MaterialComponents.ChipGroup</item>
<item name="chipStandaloneStyle">@style/Widget.MaterialComponents.Chip.Entry</item>
<item name="extendedFloatingActionButtonStyle">@style/Widget.MaterialComponents.ExtendedFloatingActionButton.Icon</item>
<item name="floatingActionButtonStyle">@style/Widget.MaterialComponents.FloatingActionButton</item>
<item name="materialButtonStyle">@style/Widget.MaterialComponents.Button</item>
<item name="materialButtonOutlinedStyle">@style/Widget.MaterialComponents.Button.OutlinedButton</item>
<item name="materialButtonToggleGroupStyle">@style/Widget.MaterialComponents.MaterialButtonToggleGroup</item>
<item name="materialCardViewStyle">@style/Widget.MaterialComponents.CardView</item>
<item name="navigationViewStyle">@style/Widget.MaterialComponents.NavigationView</item>
<item name="sliderStyle">@style/Widget.MaterialComponents.Slider</item>
<item name="snackbarStyle">@style/Widget.MaterialComponents.Snackbar</item>
<item name="snackbarButtonStyle">@style/Widget.MaterialComponents.Button.TextButton.Snackbar</item>
<item name="snackbarTextViewStyle">@style/Widget.MaterialComponents.Snackbar.TextView</item>
<item name="tabStyle">@style/Widget.MaterialComponents.TabLayout</item>
<item name="textInputStyle">@style/Widget.MaterialComponents.TextInputLayout.FilledBox</item>
<item name="toolbarStyle">@style/Widget.MaterialComponents.Toolbar</item>
</style>