Как кастомизировать ActionBar?
Нужно отрисовать следующий интерфейс
Для начала пытаюсь заменить стиль ActionBar'а
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:actionBarStyle">@style/MyActionBarTheme</item>
</style>
<style name="MyActionBarTheme" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:background">@drawable/actionbar_background</item>
</style>
actionbar_background.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid
android:color="@color/background">
</solid>
<corners
android:bottomLeftRadius="40dp"
android:bottomRightRadius="40dp">
</corners>
</shape>
Однако внешний вид не меняется. Что делаю не так? Может дело в parent="@android:style/Widget.Holo.Light.ActionBar"? Наследоваться от чего то другого?
И второй вопрос по поводу карточки в стиле Material design. Думаю попробовать реализовать ее с помощью RecyclerView или есть какой то более подходящий способ?
Ответы (2 шт):
Во-первых, по поводу actionBar: можно сделать данный виджет с кастомной разметкой у которой будут все необходимые вам свойства. Стиль здесь не особо поможет как мне кажется. Вот например есть туториал как сделать тулбар с своим макетом. Ключевым здесь является установка созданного xml макета в тулбар:
this.getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
getSupportActionBar().setDisplayShowCustomEnabled(true);
getSupportActionBar().setCustomView(R.layout.custom_action_bar);
getSupportActionBar().setElevation(0);
View view = getSupportActionBar().getCustomView();
И вот еще один подобный туториал. Во-вторых по поводу карточки: это обычный cardView внутри которого можно разместить вертикальный LinearLayout с виджетами. В данном случае recyclerView будет слишком громоздким и он вообще для таких целей не используется. Только вам кроме создания самой карточки нужно будет установить ее выше чем ваш кастомный тулбар как у вас показано на картинке. Вот пример такой карточки:
<androidx.cardview.widget.CardView
android:id="@+id/card_view"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
app:cardCornerRadius="4dp">
// здесь нужно разместить ваши поля для ввода
</androidx.cardview.widget.CardView>
Сделал таким образом
<androidx.appcompat.widget.Toolbar
android:layout_width="0dp"
android:layout_height="200dp"
android:background="@drawable/actionbar_background"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<com.google.android.material.card.MaterialCardView
android:id="@+id/card_view"
android:layout_width="0dp"
android:layout_height="550dp"
android:layout_gravity="center"
android:layout_marginTop="130dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
app:cardCornerRadius="50dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="SplashTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="android:windowBackground">@drawable/logo</item>
<item name="colorPrimaryDark">@color/background</item>
</style>
<style name="MyActionBarTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
<item name="background">@drawable/actionbar_background</item>
</style>
