java - 从 SDK 21 迁移到 SDK 28

标签 java android android-studio android-layout

我完成了这一步骤并解决了大部分问题,但是有一个问题我无法解决。进行了搜索并试图弄清结果,尝试了一些方法但仍然没有进展。问题似乎与应用程序中的样式/主题有关。

堆栈跟踪

Process: net.myapp.app.debug, PID: 14927
java.lang.RuntimeException: Unable to start activity ComponentInfo{net.myapp.app.debug/net.myapp.app.ui.SplashSreenActivity}: android.view.InflateException: Binary XML file line #31: Binary XML file line #31: Error inflating class android.widget.TextView
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
    at android.app.ActivityThread.-wrap11(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
    at android.os.Handler.dispatchMessage(Handler.java:105)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6541)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
 Caused by: android.view.InflateException: Binary XML file line #31: Binary XML file line #31: Error inflating class android.widget.TextView
 Caused by: android.view.InflateException: Binary XML file line #31: Error inflating class android.widget.TextView
 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Constructor.newInstance0(Native Method)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
    at android.view.LayoutInflater.createView(LayoutInflater.java:647)
    at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)
    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:720)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:788)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
    at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:418)
    at android.app.Activity.setContentView(Activity.java:2654)
    at net.shopayard.app.ui.SplashSreenActivity.onCreate(SplashSreenActivity.java:42)
    at android.app.Activity.performCreate(Activity.java:6975)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
    at android.app.ActivityThread.-wrap11(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
    at android.os.Handler.dispatchMessage(Handler.java:105)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6541)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
 Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 6: TypedValue{t=0x2/d=0x101009b a=1}
    at android.content.res.TypedArray.getColorStateList(TypedArray.java:538)
    at android.widget.TextView.<init>(TextView.java:904)
    at android.widget.TextView.<init>(TextView.java:818)
    at android.widget.TextView.<init>(TextView.java:814)
    at java.lang.reflect.Constructor.newInstance0(Native Method) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:334) 
    at android.view.LayoutInflater.createView(LayoutInflater.java:647) 
    at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58) 
    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:720) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:788) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:863) 
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:866) 
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:515) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
    at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:418) 
    at android.app.Activity.setContentView(Activity.java:2654) 
    at net.myapp.app.ui.SplashSreenActivity.onCreate(SplashSreenActivity.java:42) 
    at android.app.Activity.performCreate(Activity.java:6975) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
    at android.app.ActivityThread.-wrap11(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
    at android.os.Handler.dispatchMessage(Handler.java:105) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6541) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

build.grade(应用程序)

apply plugin: 'com.android.application'

android {
    signingConfigs {
        debug {
            storeFile file('C:/Users/myapp/.android/debug.keystore')
        }
    }
    compileSdkVersion 28
    buildToolsVersion "28.0.3"
    defaultConfig {
        applicationId "net.myapp.app"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 22
        versionName '3.0.0'
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            applicationIdSuffix '.debug'
            versionNameSuffix '.debug'
        }
    }
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
    }
    repositories {
        flatDir {
            dirs 'libs'
        }
    }
    productFlavors {
    }
    useLibrary 'org.apache.http.legacy'
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:28.0.0'
    compile 'com.android.support:recyclerview-v7:28.0.0'
    compile 'com.android.support:cardview-v7:28.0.0'
    compile 'com.viewpagerindicator:library:2.4.1'
    compile 'com.android.support:support-v4:28.0.0'
    compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
    compile 'com.davemorrissey.labs:subsampling-scale-image-view:2.3.0'
    compile('org.apache.httpcomponents:httpmime:4.3.6') {
        exclude module: 'httpclient'
    }
    compile 'org.apache.httpcomponents:httpclient-android:4.3.5'
    compile(name: 'analyticslibrary', ext: 'aar')
    compile 'com.google.android.gms:play-services-analytics:16.0.4'
}

样式.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="windowActionBar">false</item>
        <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
        <item name="colorPrimary">@color/primary_color</item>
        <item name="colorPrimaryDark">@color/primary_color_dark</item>
        <item name="colorAccent">@color/accent</item>
        <item name="actionBarSize">@dimen/abc_action_bar_default_height_material</item>
        <item name="colorSwitchThumbNormal">@color/switch_thumb_normal</item>
    </style>
    <style name="ToolbarThemeOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
        <item name="android:subtitleTextStyle">@style/SubTitleTextStyle</item>
        <item name="subtitleTextStyle">@style/SubTitleTextStyle</item>
    </style>
    <style name="SubTitleTextStyle">
        <item name="android:textStyle">italic</item>
        <item name="android:textSize">12sp</item>
        <item name="android:textColor">@color/text_white</item>
    </style>
    <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
        <item name="spinBars">true</item>
        <item name="color">@android:color/white</item>
    </style>
    <style name="SpinnerButton">
        <item name="android:minHeight">40dp</item>
        <item name="android:layout_marginLeft">@dimen/content_margin_normal</item>
        <item name="android:layout_marginRight">@dimen/content_margin_normal</item>
        <item name="android:background">@drawable/spinner_button_selector</item>
        <item name="android:textColor">@color/text_black</item>
        <item name="android:textSize">@dimen/text_size_medium</item>
        <item name="android:textStyle">italic</item>
    </style>
    <style name="EditTextRectangleStyle">
        <item name="android:layout_marginLeft">@dimen/content_margin_normal</item>
        <item name="android:layout_marginRight">@dimen/content_margin_normal</item>
        <item name="android:background">@drawable/black_rectangle</item>
        <item name="android:textColor">@color/text_black</item>
        <item name="android:textSize">@dimen/text_size_medium</item>
        <item name="android:textColorHint">@color/text_gray</item>
        <item name="android:textStyle">italic</item>
    </style>
    <style name="EditTextStyle">
        <item name="android:minHeight">40dp</item>
        <item name="android:layout_marginLeft">@dimen/content_margin_normal</item>
        <item name="android:layout_marginRight">@dimen/content_margin_normal</item>
        <item name="android:background">@drawable/edittext_bg</item>
        <item name="android:textColor">@color/text_black</item>
        <item name="android:textSize">@dimen/text_size_medium</item>
        <item name="android:textColorHint">@color/text_gray</item>
        <item name="android:textStyle">italic</item>
    </style>
    <style name="EditTextNoMarginsStyle">
        <item name="android:minHeight">40dp</item>
        <item name="android:background">@drawable/edittext_bg</item>
        <item name="android:textColor">@color/text_black</item>
        <item name="android:textSize">@dimen/text_size_medium</item>
        <item name="android:textColorHint">@color/text_gray</item>
        <item name="android:textStyle">italic</item>
    </style>
    <style name="FormLabelClickable" parent="FormLabelStyle">
        <item name="android:clickable">true</item>
        <item name="android:textColor">@color/clickable_black_text</item>
    </style>
    <style name="FormLabelStyle">
        <item name="android:minHeight">40dp</item>
        <item name="android:layout_marginLeft">@dimen/content_margin_normal</item>
        <item name="android:layout_marginRight">@dimen/content_margin_normal</item>
        <item name="android:gravity">center_vertical</item>
        <item name="android:textColor">@color/text_black</item>
        <item name="android:textSize">@dimen/text_size_medium</item>
        <item name="android:textStyle">italic</item>
    </style>
    <style name="StandardSwitch" parent="FormLabelStyle" >
        <item name="android:padding">1dp</item>
        <item name="android:textColor">@color/switch_text_dark_gray</item>
    </style>
    <style name="SwitchLabelStyle">
        <item name="android:paddingRight">@dimen/content_margin_normal</item>
        <item name="android:textColor">@color/text_gray</item>
        <item name="android:textSize">@dimen/text_size_small</item>
    </style>
    <style name="CustomTabPageIndicator">
        <item name="android:background">@color/primary_color</item>
        <item name="android:textSize">12sp</item>
        <item name="pstsTextAllCaps">true</item>
        <item name="android:maxLines">1</item>
        <item name="android:textColor">#FFAAAAAA</item>
        <item name="pstsIndicatorColor">#FFFFFF</item>
        <item name="pstsDividerColor">@android:color/transparent</item>
        <item name="pstsShouldExpand">true</item>
        <item name="pstsIndicatorHeight">4dp</item>
        <item name="pstsTabPaddingLeftRight">1dp</item>
        <item name="pstsUnderlineColor">#FFFFFF</item>
        <item name="pstsUnderlineHeight">0dp</item>
    </style>
    <style name="ButtonBar">
        <item name="android:paddingLeft">2dp</item>
        <item name="android:paddingTop">5dp</item>
        <item name="android:paddingRight">2dp</item>
        <item name="android:paddingBottom">0dp</item>
        <item name="android:background">@android:drawable/bottom_bar</item>
    </style>
    <style name="dialog_popup_slideout">
        <item name="android:windowExitAnimation">@anim/slide_out_dialog</item>
    </style>
    <style name="dialog_slidein_slideout">
        <item name="android:windowEnterAnimation">@anim/slide_in_dialog</item>
    </style>
    <style name="dialog_slidein_left_slideout">
        <item name="android:windowEnterAnimation">@anim/slide_in_left</item>
        <item name="android:windowExitAnimation">@anim/slide_out_dialog</item>
    </style>
    <style name="ButtonBarButton" />
    <style name="FullscreenTheme" parent="android:Theme.NoTitleBar">
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowBackground">@null</item>
        <item name="metaButtonBarStyle">@style/ButtonBar</item>
        <item name="metaButtonBarButtonStyle">@style/ButtonBarButton</item>
    </style>
    <style name="FullscreenTheme.NoActionBar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowBackground">@null</item>
        <item name="metaButtonBarStyle">@style/ButtonBar</item>
        <item name="metaButtonBarButtonStyle">@style/ButtonBarButton</item>
        <item name="android:windowActionBar">false</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">false</item>
    </style>
    <style name="NumberPickerDialog" parent="DialogCenteredTitle">
        <item name="android:layout_width">280dp</item>
    </style>
    <style name="DialogCenteredTitle" parent="Base.Theme.AppCompat.Light.Dialog">
        <item name="android:windowTitleStyle">@style/CenteredTitle</item>
        <item name="colorAccent">@color/accent</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:colorBackgroundCacheHint">@null</item>
    </style>
    <style name="CenteredTitle" parent="Base.TextAppearance.AppCompat.Title">
        <item name="android:gravity">center</item>
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_gravity">center</item>
        <item name="android:layout_marginBottom">8dp</item>
    </style>
    <style name="RedRectangularButton" parent="BlueRectangularButton">
        <item name="android:background">@drawable/red_rectangle_button_bg_selector</item>
    </style>
    <style name="BlueRectangularButton">
        <item name="android:minHeight">40dp</item>
        <item name="android:paddingLeft">@dimen/rectangular_button_horizontal_margin</item>
        <item name="android:paddingRight">@dimen/rectangular_button_horizontal_margin</item>
        <item name="android:textColor">@color/button_text_white</item>
        <item name="android:background">@drawable/blue_rectangle_button_bg_selector</item>
        <item name="android:textAllCaps">true</item>
    </style>
    <style name="ImageViewAttachment">
        <item name="android:width">0dp</item>
        <item name="android:minHeight">@dimen/select_image_min_height</item>
        <item name="android:scaleType">fitCenter</item>
        <item name="android:background">@drawable/dashed_rectangle_selector</item>
        <item name="android:layout_weight">0.25</item>
        <item name="android:src">@drawable/symbol_camera</item>
        <item name="android:adjustViewBounds">true</item>
    </style>
</resources>

Activity .xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/splash_background"
    tools:context="net.myapp.app.ui.SplashSreenActivity">
    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/image_menu"
        android:layout_alignParentBottom="true"
        android:adjustViewBounds="true"
        android:scaleType="fitEnd"/>
    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:visibility="gone"/>
    <LinearLayout
        android:id="@+id/layoutError"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:gravity="center_horizontal"
        android:paddingBottom="100dp"
        android:orientation="vertical"
        android:visibility="gone">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="16dp"
            android:textColor="@color/text_black"
            android:gravity="center_horizontal"
            android:textSize="16sp"
            android:text="@string/error_maintenance"/>
        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/content_margin_normal">
            <Button
                android:id="@+id/buttonRetry"
                android:layout_width="60dp"
                android:layout_height="60dp"
                android:textColor="@color/text_white"
                android:textSize="12sp"
                android:text="@string/retry"
                android:background="@drawable/circle_button_blue_selector"/>
            <ProgressBar
                android:id="@+id/progressBarRetry"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                style="?android:attr/progressBarStyleSmall"
                android:layout_centerInParent="true"
                android:visibility="invisible"/>
        </RelativeLayout>
    </LinearLayout>
</RelativeLayout>

字符串.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">myapp</string>
    <string name="ic_action_search">Search</string>
    <string name="ic_action_profile">Profile</string>
    <string name="ic_action_refresh">Refresh</string>
    <string name="action_call">Call</string>
    <string name="action_email">Email</string>
    <string name="action_share">Share</string>
    <string name="action_location">Location</string>
    <string name="action_report">Report</string>
    <string name="navigation_drawer_open">Open navigation drawer</string>
    <string name="navigation_drawer_close">Close navigation drawer</string>
    <string name="action_settings">Settings</string>
    <string name="hello_blank_fragment">Hello blank fragment</string>
    <string name="register_below">Register below to receive deals and promotions from local businesses.</string>
    <string name="gender">Gender</string>
    <string name="birth_year">Year of birth</string>
    <string name="island">Island</string>
    <string name="button_done">Done</string>
    <string name="button_ok">OK</string>
    <string name="loading">Loading...</string>
    <string name="title_activity_profile">Profile</string>
    <string name="title_activity_deals_details">DealsDetailsActivity</string>
    <string name="title_activity_fullscreen_image">FullscreenImageActivity</string>
    <string name="title_activity_classified_details">ClassifiedDetailsActivity</string>
    <string name="title_activity_splash_sreen">SplashSreenActivity</string>

    <!-- Splash screen -->
    <string name="retry">Retry</string>
    <string name="retry_failed">Retry failed</string>
    <string name="error_maintenance">The servers are currently undergoing maintenance, please try again in a few minutes.</string>
</resources>

颜色.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="primary_color_clicked">#0071a8</color>
    <color name="primary_color">#004A77</color>
    <color name="primary_color_dark">#004368</color>
    <color name="switch_thumb_normal">#004A77</color>
    <color name="switch_text_dark_gray">#464646</color>
    <color name="accent">#80A4BB</color>
    <color name="orange">#EA5C04</color>
    <color name="dark_red">#A00809</color>
    <color name="red_divider">#A91F20</color>
    <color name="line_light_gray">#D9D9D9</color>
    <color name="text_blue">#004A77</color>
    <color name="text_white">#FFFFFF</color>
    <color name="text_gray">#969696</color>
    <color name="text_content_dark">#333</color>
    <color name="text_dark_red">#980000</color>
    <color name="tab_text_inactive">#98b6c8</color>
    <color name="text_orange">#E74700</color>
    <color name="text_black">#111111</color>
    <color name="text_black_focused">#888888</color>
    <color name="button_blue">#004A77</color>
    <color name="button_blue_focused">#0075BA</color>
    <color name="menu_list_divider">#9DD0F5</color>
    <color name="menu_selected_item_background">#D6EDFF</color>
    <color name="black_overlay">#66000000</color>
    <color name="search_background">#A7D9FE</color>
    <color name="splash_background">#A6D8FD</color>
    <color name="darken_filter_color">#22000000</color>
    <color name="classified_id_background">#DDDDDD</color>
    <color name="red_button">#A00809</color>
    <color name="red_button_focused">#f40809</color>
</resources>

这个问题似乎与 FullscreenTheme 或 FullscreenTheme.NoActionBar 有关,因为我一直在测试不同的方法,并且在更改这些方法时得到了不同的堆栈跟踪。然而,上面的代码在 SDK 21 中运行良好。我觉得训练有素的眼睛会立即发现问题,但遗憾的是我不是日常程序员。

最佳答案

它清楚地表明找不到@string/error_maintenance。 尝试clean project 并查看它是否具有名为 error_maintenance 的 String 资源。

此外,之前,在我的项目中,我能够创建一个带有“error.maintenance”之类的点的字符串资源,并使用 @string/error_maintenance 调用它。 从 api 28 开始,我不得不删除 strings.xml 中的每个点

关于java - 从 SDK 21 迁移到 SDK 28,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53240046/

相关文章:

android - 这些 Android logcat 警告是什么意思?

android - Prograurd 重复的 zip 条目

java - 更改局部变量 android onClickListener

java - Apache Artemis 代理不向 SwiftMQ AMQP 客户端发送消息

android - 如何使用 UnityPlayer.UnitySendMessage 调用方法并返回其值

android - Android Kotlin协程:使用Global范围是否是反模式?

java - 导入 Xerces 库时无法构建应用程序(退出值 1)

java - Android 使用 opencv 对静态图像进行人脸检测?

java - 计算机视觉 - 使用 OpenCV 过滤凸包和凸面缺陷

android - 在 build.gradle 中设置 URL?