Кнопка не показывает дизайн материала - PullRequest
2 голосов
/ 03 апреля 2019

Я обнаружил, что причина в том, что я использую библиотеку Android-Iconics - я удалил инъекцию контекста, и теперь все в порядке.

Я использую комбинацию XML Layouts и Anko DSL для создания своего приложения, и я заметил, что дизайн кнопки отличается в зависимости от того, как она генерируется.

В случае, если это сгенерированная Anko кнопка, текст написан заглавными буквами (что, я думаю, должно быть в материале) и имеет волновой эффект. Если кнопка создана с помощью XML, текст в нижнем регистре и без эффекта.

Screenshot

Верхняя кнопка - это кнопка XML, поэтому здесь вы можете увидеть разницу.

Я пытался установить пользовательский стиль для кнопки, но, похоже, он не работает - я даже не могу заставить textAllCaps = true работать.

В настоящее время я использую androidx и расширяю AppCompat & Theme.AppCompat.Light.NoActionBar , и я попытался расширить Widget.AppCompat.Button , чтобы установить собственный стиль для смотреть без везения.

Это происходит на всех уровнях API (24, 26 и 28). В предварительном просмотре XML это показывает хорошо.

Текущий XML -

<Button
            android:text="@string/compartir"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/debunkShareButton"
            android:textAllCaps="true"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            app:layout_constraintTop_toBottomOf="@+id/debunkTitle"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            style="@style/Full_Yellow_Button"/>

А Full_Yellow_Button равно

    <style name="Full_Yellow_Button"  parent="Widget.AppCompat.Button">
    <item name="android:background">@drawable/yellow_gradient</item>
</style>

Есть идеи? Спасибо!

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Если вы используете новые компоненты дизайна материала, убедитесь, что тема вашего приложения выходит за пределы основной темы Theme.MaterialComponents или другой соответствующей темы.

<style name="Theme.MyApp" parent="Theme.MaterialComponents.Light">
    <!-- ... -->
</style>

Кроме того, вместо использования общего класса Button для определения кнопки, вам нужно использовать com.google.android.material.button.MaterialButton в ваших xml и java обоих.

<com.google.android.material.button.MaterialButton
    android:id="@+id/material_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/button_label_enabled"/>
1 голос
/ 03 апреля 2019

Ваша тема должна быть расширена с Theme.MaterialComponents.xxxxx

как этот блок XML

<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">

Вы можете создать свой класс TextView для установки в верхний регистр

class UppercaseTextView : TextView, ViewTreeObserver.OnPreDrawListener {

    constructor(context: Context) : super(context) {}

    constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {}

    constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle) {}

    override fun setText(text: CharSequence, type: BufferType) {
        super.setText(text.toString().toUpperCase(), type)
    }
}
...