【问题标题】:android.view.View$OnUnhandledKeyEventListenerandroid.view.View$OnUnhandledKeyEventListener
【发布时间】:2019-01-28 04:32:02
【问题描述】:

我是 Android Studio 的新手,我不明白为什么我的工具栏没有像 https://developer.android.com/training/appbar/setting-up 所描述的那样显示 我知道在 stackoverflow 上已经有一些其他问题,例如我的问题,但它们不适用于我的项目。因此,我将非常感谢您解决此问题。截图:

java.lang.ClassNotFoundException: android.view.View$OnUnhandledKeyEventListener
at org.jetbrains.android.uipreview.ModuleClassLoader.load(ModuleClassLoader.java:180)
at com.android.tools.idea.rendering.RenderClassLoader.findClass(RenderClassLoader.java:61)
at org.jetbrains.android.uipreview.ModuleClassLoader.findClass(ModuleClassLoader.java:118)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.jetbrains.android.uipreview.ModuleClassLoader.loadClass(ModuleClassLoader.java:213)
at android.support.v7.widget.ViewUtils.isLayoutRtl(ViewUtils.java:58)
at android.support.v7.widget.Toolbar.onMeasure_Original(Toolbar.java:1578)
at android.support.v7.widget.Toolbar.onMeasure(Toolbar.java)
at android.view.View.measure_Original(View.java:22071)
at android.view.View_Delegate.measure(View_Delegate.java:80)
at android.view.View.measure(View.java:22035)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6602)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.view.View.measure_Original(View.java:22071)
at android.view.View_Delegate.measure(View_Delegate.java:80)
at android.view.View.measure(View.java:22035)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
at android.view.View.measure_Original(View.java:22071)
at android.view.View_Delegate.measure(View_Delegate.java:80)
at android.view.View.measure(View.java:22035)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.measureView(RenderSessionImpl.java:590)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:343)
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:384)
at com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:193)
at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:544)
at com.android.tools.idea.rendering.RenderTask.lambda$inflate$3(RenderTask.java:678)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

工具栏.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimaryDark">

</android.support.v7.widget.Toolbar>

build.gradle(应用级别)

apply plugin: 'com.android.application'
android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.david.gamebase"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    implementation 'com.google.firebase:firebase-auth:11.6.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

apply plugin: 'com.google.gms.google-services'

style.xml:

   <resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Base.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>
    </style>

</resources>

## toolbar.xml ##

    <?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimaryDark">

</android.support.v7.widget.Toolbar>

【问题讨论】:

标签: android android-toolbar keyevent unhandled


【解决方案1】:

如果使用 Android X 和 androidx.core:core 和/或 androidx.appcompat:appcompat,请将 androidx.core:core 更新为 1.4.0-alpha01 和/或 androidx.appcompat:appcompat 更新为 1.3.0-alpha01

【讨论】:

  • 这对我有用。就我而言,我使用的是 MaterialToolbar,这似乎是导致问题的原因。我只使用 androidx.appcompat:appcompat,并且如前所述,我从 1.1.0 更新到 1.3.0-alpha01。同步项目后问题已解决。
  • 更新到 'com.google.android.material:material:1.4.0' 对我有用。我使用的是 1.3.0 版本,该版本导致了错误。在本次材料更新中,他们将 android.core 从 1.2.0 更新到了 1.5.0。
【解决方案2】:

在您的 build.gradle(应用级别) 中进行更改以降级到版本 27,如下所示。然后同步并构建项目。希望它能解决问题..

compileSdkVersion 27

targetSdkVersion 27

implementation 'com.android.support:appcompat-v7:27.1.1'

【讨论】:

  • 这是当时最好的解决方案,但现在有一个更好的解决方案:升级到 Android Studio 3.2。
  • @TatiOverflow 如果不是解决方案,你必须告诉正确的解决方案
  • @mhsmith Android Studio 3.4.1 仍然发生在我身上
  • @Akaisteph7 很抱歉听到这个消息,但很遗憾我没有其他想法。
  • 降级不再是解决方案。我正在使用 Android Studio 3.6.3,但仍然遇到此问题。
【解决方案3】:

正如documentation 所述,首先,您的Activity 应该从AppCompatActivity() 扩展。

其次,在您的项目styles 中设置了Base.Theme.AppCompat.Light.DarkActionBar,这意味着它确实有一个DarkActionBar,但您的layout 中已经有一个Toolbar。所以,简单地说,改变:

Base.Theme.AppCompat.Light.DarkActionBar

到:

Theme.AppCompat.Light.NoActionBar

然后,(在 java-kotlin 端),设置 Toolbar:

// Note that the Toolbar defined in the layout has the id "my_toolbar"
    setSupportActionBar(findViewById(R.id.my_toolbar))

Toolbar一个id。

<android.support.v7.widget.Toolbar
   android:id="@+id/my_toolbar"
   android:layout_width="match_parent"
   android:layout_height="?attr/actionBarSize"
   android:background="?attr/colorPrimary"
   android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
   app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

那你应该可以走了。

【讨论】:

  • 关于将 DarkActionBar 更改为 NoActionBar 的注释让 UI 预览器为我工作,针对 API 28 并使用 androidx 包。据我所知,没有工具栏在播放(由 AS 3.0.1 生成的全新项目),但例外是 OP 提到的相当奇怪的“java.lang.ClassNotFoundException:android.view.View$OnUnhandledKeyEventListener”跨度>
  • 更改Theme.AppCompat.Light.DarkActionBar 删除了我的activity_main 的错误,但破坏了我的settings_activity
【解决方案4】:

https://github.com/DonaldDu/FixUnhandledEvent

android.view.View$OnUnhandledKeyEventListener 在 api28 中添加。

如果运行时设备低于 28,则找不到类,但运行时不会出现致命错误。

我们可以在调试模式下注入类以忽略错误消息。

implementation 'com.android.support:appcompat-v7:28.0.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
//inject class when api<28 && debug==true
debugImplementation 'com.github.DonaldDu:FixUnhandledEvent:1.0'

【讨论】:

  • 在回答一个如此受欢迎的问题时,我们非常欢迎您提供一点解释。
【解决方案5】:

这不是一个错误,而是一个警告,可以通过在我的 build.gradle (应用程序级别)中添加以下代码来忽略它,该文件适用于我的情况。然后同步并构建项目。希望它能解决问题。

configurations.all {
  resolutionStrategy.eachDependency { DependencyResolveDetails details ->
    def requested = details.requested
    if (requested.group == "com.android.support") {
        if (!requested.name.startsWith("multidex")) {
            details.useVersion "26.+"
        }
    }
  }
}

Reference to the gist

【讨论】:

    【解决方案6】:

    降级到 sdk 27​​ 作为另一篇帖子中的建议之一,给我带来了一系列新问题。 见:Android - resource linking failed / failed linking references

    向我的 build.gradle(应用程序级别)添加一个条目为我解决了这个问题。

    dependencies {
        ...
    
        implementation 'androidx.core:core:1.5.0-alpha05'
        ...
    }
    

    这就是我尝试这个想法的地方: https://github.com/android/sunflower/issues/295#issuecomment-649630057

    【讨论】:

    【解决方案7】:

    库 ~-v7:28.0.0 有问题。有两种解决方案,您可以下载 compile 和 targetSdkVersion 到 27 或将 Android Studio 升级到最新版本(3.2.x 更高版本)。

    【讨论】:

    • 不。我有 Android Studio 3.2.1,但仍然看到此错误。
    【解决方案8】:

    将 multidex 支持库添加到您的依赖项中

    com.android.support:multidex:1.0.3
    

    【讨论】:

      【解决方案9】:

      你可以轻松修复它,

      implementation 'com.android.support:appcompat-v7:28.0.0-alpha1'
      

      并在 values 下打开 style.xml 并更改为

      style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-30
        • 2019-01-17
        • 2019-11-18
        • 1970-01-01
        • 1970-01-01
        • 2015-10-12
        相关资源
        最近更新 更多