当前位置: 首页 > 知识库问答 >
问题:

将Android API从27降级到21后出错(KOTLIN)

邢博学
2023-03-14
package com.ddm.xposed.digi_com

import android.os.Bundle
import android.support.design.widget.Snackbar
import android.support.design.widget.NavigationView
import android.support.v4.view.GravityCompat
import android.support.v7.app.ActionBarDrawerToggle
import android.support.v7.app.AppCompatActivity
import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.widget.Toast
import com.felhr.usbserial.UsbSerialDevice
import com.felhr.usbserial.UsbSerialInterface
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.app_bar_main.*

class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {

    var unlock : Int = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setSupportActionBar(toolbar)


        val toggle = ActionBarDrawerToggle(
                this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
        drawer_layout.setDrawerListener(toggle)
        toggle.syncState()

        nav_view.setItemIconTintList(null);

        nav_view.setNavigationItemSelectedListener(this)

        displayScreen(-1)


    }

    override fun onBackPressed() {
        if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
            drawer_layout.closeDrawer(GravityCompat.START)
        } else {
            super.onBackPressed()
        }
    }

    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        // Inflate the menu; this adds items to the action bar if it is present.
        menuInflater.inflate(R.menu.main, menu)
        return true
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        when (item.itemId) {
            R.id.action_settings -> return true
            else -> return super.onOptionsItemSelected(item)
        }
    }

    fun displayScreen(id: Int){

        val fragment = when(id){
            R.id.nav_connect -> {
                ConnectFragment()
            }

            else -> {
                ConnectFragment()
            }

        }

        supportFragmentManager.beginTransaction().replace(R.id.relativeLayout,fragment).commit()
    }

    override fun onNavigationItemSelected(item: MenuItem): Boolean {
        // Handle navigation view item clicks here.

        displayScreen(item.itemId)

        drawer_layout.closeDrawer(GravityCompat.START)
        return true
    }


}

则这是调试时的错误

                  at android.content.res.Resources.getValue(Resources.java:1233)
                  at android.content.res.Resources.getDrawable(Resources.java:756)
                  at android.content.Context.getDrawable(Context.java:402)
                  at android.support.v4.content.ContextCompatApi21.getDrawable(ContextCompatApi21.java:26)
                  at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:319)
                  at android.support.v7.internal.widget.TintManager.getDrawable(TintManager.java:145)
                  at android.support.v7.internal.view.menu.MenuItemImpl.getIcon(MenuItemImpl.java:422)
                  at android.support.design.internal.NavigationMenuPresenter$NavigationMenuAdapter.prepareMenuItems(NavigationMenuPresenter.java:393)
                  at android.support.design.internal.NavigationMenuPresenter$NavigationMenuAdapter.<init>(NavigationMenuPresenter.java:255)
                  at android.support.design.internal.NavigationMenuPresenter.getMenuView(NavigationMenuPresenter.java:97)
                  at android.support.design.widget.NavigationView.<init>(NavigationView.java:149)
                  at android.support.design.widget.NavigationView.<init>(NavigationView.java:88)
                  at java.lang.reflect.Constructor.newInstance(Native Method) 
                  at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
                  at android.view.LayoutInflater.createView(LayoutInflater.java:607) 
                  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) 
                  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 android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
                  at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249) 
                  at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106) 
                  at com.ddm.xposed.digi_com.MainActivity.onCreate(MainActivity.kt:32) 
                  at android.app.Activity.performCreate(Activity.java:5937) 
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
                  at android.app.ActivityThread.access$800(ActivityThread.java:144) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                  at android.os.Looper.loop(Looper.java:135) 
                  at android.app.ActivityThread.main(ActivityThread.java:5221)

共有1个答案

卞博简
2023-03-14

基于我对此的回答

您之所以遇到这个问题,是因为您只有drawable-v26中的资源,而您试图在V21中引用它们。将它们移动到drawable文件夹或drawable-v21(如果在较低版本中不需要这些资源)

当您请求为其提供替代资源时,Android会根据当前设备配置选择要在运行时使用的替代资源。

系统通过以下逻辑来决定使用哪些资源:Android如何找到最匹配的资源的流程图如下

优先级基于此处定义的表

它实际上是通过淘汰来选择。它将首先消除drawable-v24及更高版本,并尝试在drawable-v23及更低版本中找到可提取的内容。由于它在drawable-v23及其下方找不到提款,因此会引发异常

 类似资料:
  • 失败:构建失败,但有例外。 > 其中:脚本C:\flatter\packages\flatter\u tools\gradle\flatter。格雷德尔线:1070 错误:任务:app:compileFlutterBuildDebug的执行失败。 处理“命令”C:\flatter\bin\flatter。bat“”以非零退出值1结束 > 获取更多帮助https://help.gradle.org

  • 有没有办法在xampp中将php 5.5降级到5.3?我在谷歌上搜索过,但每个人都告诉我卸载xampp并安装一个旧版本。我可以在不重新安装xampp的情况下将php 5.5降级到5.3吗?

  • 在我的环境中,我需要将mongodb从3.2升级到3.6。对于该进程,我首先按照建议从3.2迁移到3.4。在成功迁移到3.4后,我开始迁移到3.6我无法启动Mongod。当检查日志文件时,我发现错误如下:重要:升级问题:数据文件需要完全升级到3.4版本,然后才尝试升级到3.6;有关更多细节,请参见http://dochub.mongodb.org/core/3.6-upgrade-fcv。 我的妈

  • 我正在Mac OS X上运行。我最近将node和npm更新到了最新版本,按照以下已接受的回答步骤将node.js升级到Mac OS上的最新版本。node:和npm:现在当我运行我的Gulp文件时,我得到了这个错误: 有人知道这是什么问题吗?

  • 问题内容: 我在构建需要Maven 2.2.1进行构建的项目时遇到了麻烦。我如何降级Maven版本? 编辑:更多信息 我正在尝试从命令行构建项目。我正在本地构建。我当前安装了3.0.4版本。 问题答案: 您可以安装多个版本的Maven。您没有提供很多其他必要的信息-例如,您是在构建环境中还是在本地计算机上表示您的意思。 如果您假设您使用的是本地计算机,那是从eclipse(或另一个IDE)中还是从