NoSuchMethodError при использовании setNavigationBarDividerColor()?

Я пытался создать разделитель между панелью навигации и содержимым моего приложения, когда они одного цвета, так, как это делает Google с последними обновлениями Material Design 2.0 для своих приложений, таких как Google Contacts и Google Home. Я пытался сделать это так:

getWindow().setNavigationBarDividerColor(Color.GRAY);

Тем не менее, я получаю NoSuchMethodError при попытке

Я пытаюсь найти способ исправить тот или иной способ размещения разделителя над панелью навигации.

Вот этот стек:

10-16 20:33:47.257 30336-30336/? E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.diamonddevelopment.scholarly, PID: 30336
        java.lang.NoSuchMethodError: No virtual method setNavigationBarDividerColor(I)V in class Landroid/view/Window; or its super classes (declaration of 'android.view.Window' appears in /system/framework/framework.jar!classes2.dex)
            at com.diamonddevelopment.scholarly.base.BaseActivity.styleNavBar(BaseActivity.java:101)
            at com.diamonddevelopment.scholarly.base.BaseActivity.setToolbars(BaseActivity.java:78)
            at com.diamonddevelopment.scholarly.fragments.TimetableFragment.onCreateView(TimetableFragment.java:79)
            at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2439)
            at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
            at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
            at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
            at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:802)
            at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
            at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
            at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
            at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
            at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3273)
            at androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3229)
            at androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:201)
            at androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:620)
            at androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:178)
            at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1413)
            at android.app.Activity.performStart(Activity.java:7061)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2874)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2989)
            at android.app.ActivityThread.-wrap11(Unknown Source:0)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1688)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:164)
            at android.app.ActivityThread.main(ActivityThread.java:6753)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:482)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

1 ответ

Решение

setNavigationBarDividerColor()

  • Показывает тонкую линию указанного цвета между панелью навигации и содержимым приложения.

setNavigationBarDividerColor() метод был добавлен на уровне API 28, поэтому он будет работать только на уровне API 28 и выше

Вы не можете использовать setNavigationBarDividerColor() метод ниже уровня API 28

Когда вы используете setNavigationBarDividerColor() Вы увидите предупреждение ниже скриншот

ОБРАЗЕЦ КОДА

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
     getWindow().setNavigationBarDividerColor(Color.GRAY)
  };
Другие вопросы по тегам