Как использовать Snackbar с AndroidX? - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь добавить Snackbar в мое приложение,

Snackbar.make(findViewById(android.R.id.content), 
            R.string.not_found, Snackbar.LENGTH_INDEFINITE).show();

, но сталкиваюсь с этим сообщением об ошибке:

10-05 16:48:24.530 28492-28492/nl.minerall.sapphire.pocket.full E/AndroidRuntime: FATAL EXCEPTION: main
    Process: nl.minerall.sapphire.pocket.full, PID: 28492
    android.view.InflateException: Binary XML file line #41: Error inflating class <unknown>
        at android.view.LayoutInflater.createView(LayoutInflater.java:633)
        at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)
        at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
        at com.google.android.material.snackbar.Snackbar.make(Snackbar.java:188)
        at com.google.android.material.snackbar.Snackbar.make(Snackbar.java:230)

Я гуглил несколько, и он говорит мне, что у меня естьдобавить com.android.support:design к моему build.gradle, но это полностью нарушает мою сборку, так как я использую AndroidX:

dependencies {
    implementation 'androidx.appcompat:appcompat:1.0.0'   
    implementation 'com.google.android.material:material:1.0.0'
    implementation 'com.google.android:flexbox:1.1.0'

    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.legacy:legacy-support-v13:1.0.0'

    implementation 'androidx.coordinatorlayout:coordinatorlayout:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
}

Обновление Я немного повозился и нашел этот файл XMLэто завышено (/extras/android/support/design/res/layout/design_layout_snackbar_include.xml):

<?xml version="1.0" encoding="utf-8"?>
<!--
  ~ Copyright (C) 2015 The Android Open Source Project
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~      http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
-->

<merge xmlns:android="http://schemas.android.com/apk/res/android">

    <TextView
            android:id="@+id/snackbar_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:paddingTop="@dimen/design_snackbar_padding_vertical"
            android:paddingBottom="@dimen/design_snackbar_padding_vertical"
            android:paddingLeft="@dimen/design_snackbar_padding_horizontal"
            android:paddingRight="@dimen/design_snackbar_padding_horizontal"
            android:textAppearance="@style/TextAppearance.Design.Snackbar.Message"
            android:maxLines="@integer/design_snackbar_text_max_lines"
            android:layout_gravity="center_vertical|left|start"
            android:ellipsize="end"
            android:textAlignment="viewStart"/>

    <Button
            android:id="@+id/snackbar_action"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/design_snackbar_extra_spacing_horizontal"
            android:layout_marginStart="@dimen/design_snackbar_extra_spacing_horizontal"
            android:layout_gravity="center_vertical|right|end"
            android:paddingTop="@dimen/design_snackbar_padding_vertical"
            android:paddingBottom="@dimen/design_snackbar_padding_vertical"
            android:paddingLeft="@dimen/design_snackbar_padding_horizontal"
            android:paddingRight="@dimen/design_snackbar_padding_horizontal"
            android:visibility="gone"
            android:textColor="?attr/colorAccent"
            style="?attr/borderlessButtonStyle"/>

</merge>

Когда просто копируете этот файл в мой проект и открываете его в Android Studio, кажется, что-то не так с ?attr/colorAccent, потому что когда я удаляю этот файлДизайнер не показывает ошибок.Но как все это исправить ...?

Ответы [ 3 ]

0 голосов
/ 10 ноября 2018

Я добавил в свой build.gradle (Модуль: приложение)

implementation 'com.android.support:design:28.0.0'

Он работает нормально, и мой gradle успешно строится.

Это мои зависимости: -

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android:flexbox:1.1.0'
implementation 'androidx.coordinatorlayout:coordinatorlayout:1.0.0'
implementation 'com.android.support:design:28.0.0'

}

0 голосов
/ 10 мая 2019

То, что вы должны использовать, это:

implementation "com.google.android.material:material:1.1.0-alpha06"

Если вы знаете, как настроить свою зависимость способом поддержки, вы можете проверить страницу разработчиков Android на Переход на AndroidX .Кроме того, проверьте самую последнюю версию, которая, вероятно, не будет 1.1.0-alpha06 к тому моменту, когда вы читаете это.

0 голосов
/ 24 октября 2018

Вам нужно импортировать

com.google.android.material.snackbar.Snackbar

вместо

android.support.design.widget.Snackbar
...