如何使用Android的应用程序兼容性主题化的应用范围? [英] How to use Android's AppCompat theming application-wide?

查看:284
本文介绍了如何使用Android的应用程序兼容性主题化的应用范围?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

IDE :Android的工作室1.1.0

ENV :在USB连接采用Android API V10手机调试



我试图使用应用程序兼容性支持Android API V8和起来。编译正常,但当该活动吸引崩溃,他说:

  lang.IllegalStateException:您需要使用Theme.AppCompat主题(或后代)与本次活动。

......然而,在AndroidManifest.xml中我有:

 <应用
        机器人:objects.PikCMSNAME =
        机器人:allowBackup =真
        机器人:图标=@绘制/ ic_launcher
        机器人:标签=@字符串/ APP_NAME
        机器人:主题=@风格/ ThemeOverlay.AppCompat
        >

感谢您和放大器;请原谅我的无奈。我一直在阅读有关,但无益信息不少。 } 8,(


其他信息


  • 我不想强迫一个特定的主题。

  • 我想避免使用不同的文件不同的API的版本。不过,我不介意将相邻的不同版本的同一属性的。

  • 我在styles.xml为V11引入项目的错误的(如buttonBarStyle&放大器;showDividers)的。阅读有关的问题后,我原以为会应用程序兼容性填补空白为pre11 API,但(在我的配置)事实并非如此。这些目前都注释掉了 - 直到我发现如何与应用程序兼容性使用。同样,我曾与布局文件的问题 - 这些问题的性质进行了删除

  • 活动类:Login.java 扩展:ActionBarActivity :.我还进口的 android.support.v7.app.ActionBarActivity 的,但我不知道如果我需要这一切,因为我不使用隐式操作栏(但我可能在未来的)。



code文件

的build.gradle(模块:应用程序)

 应用插件:'com.android.application安卓{
    compileSdkVersion 21
    buildToolsVersion '21 .1.2    defaultConfig {
        的applicationIDcom.kjackson324.pikcms
        10的minSdkVersion
        targetSdkVersion 21
        版本code 1
        的versionName1.0
    }
}依赖{
    编译com.android.support:support-v4:21.0.3
    编译com.android.support:appcompat-v7:21.0.3
    编译文件树(包括:['的* .jar'],DIR:库)
}




的Andr​​oidManifest.xml

 <?XML版本=1.0编码=UTF-8&GT?;
<清单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    包=com.kjackson324.pikcms>    <应用
        机器人:objects.PikCMSNAME =
        机器人:allowBackup =真
        机器人:图标=@绘制/ ic_launcher
        机器人:标签=@字符串/ APP_NAME
        机器人:主题=@风格/ ThemeOverlay.AppCompat
        >
        <使用许可权的android:NAME =android.permission.BLUETOOTH/>        <采用-SDK安卓的minSdkVersion =8机器人:targetSdkVersion =16/>        <活动
            机器人:登录NAME =
            机器人:configChanges =keyboardHidden |方向
            机器人:标签=@字符串/ title_activity_login
            机器人:screenOrientation =肖像>
            &所述;意图滤光器>
                <作用机器人:名字=com.kjackson324.pikcms.Login/>
                <类机器人:名字=android.intent.category.LAUNCHER/>
            &所述; /意图滤光器>
        < /活性GT;
        <活动
            机器人:名字=导航
            机器人:configChanges =keyboardHidden |方向
            机器人:标签=@字符串/ title_activity_navigation
            机器人:screenOrientation =肖像>
            &所述;意图滤光器>
                <作用机器人:名字=com.kjackson324.pikcms.Navigation/>
                <类机器人:名字=android.intent.category.DEFAULT/>
            &所述; /意图滤光器>
        < /活性GT;
        <活动
            机器人:PickHistoryNAME =
            机器人:configChanges =keyboardHidden |方向
            机器人:标签=@字符串/ title_activity_pik_log
            机器人:screenOrientation =肖像>
            &所述;意图滤光器>
                <作用机器人:名字=com.kjackson324.pikcms.PickHistory/>
                <类机器人:名字=android.intent.category.DEFAULT/>
            &所述; /意图滤光器>
        < /活性GT;        <! -             ...喇嘛,喇嘛,喇嘛...            (多的相同,不使用新属性)
         - >        <活动
            机器人:ConfigLocFieldsNAME =
            机器人:标签=@字符串/ title_activity_config_loc_fields
            机器人:configChanges =keyboardHidden |方向
            机器人:screenOrientation =肖像>
            &所述;元数据
                机器人:名字=android.support.PARENT_ACTIVITY
                机器人:值=com.kjackson324.pikcms.Navigation/>
            &所述;意图滤光器>
                <作用机器人:名字=com.kjackson324.pikcms.ConfigLocFields/>
                <类机器人:名字=android.intent.category.DEFAULT/>
            &所述; /意图滤光器>
        < /活性GT;
    < /用途>< /清单>




styles.xml

 <?XML版本=1.0编码=UTF-8&GT?;
<资源>    <样式名称=simple_center父=>
        !< - 项目名称=机器人:layout_gravity>中心< /项目 - >
        !< - 项目名称=安卓重力>中心< /项目 - >
        <项目名称=机器人:dialogLayout>的android:layout_gravity< /项目>
    < /风格>    <样式名称=lblLoggedIn父=@安卓风格/ TextAppearance.Small>
        <项目名称=机器人:layout_width>&WRAP_CONTENT LT; /项目>
        <项目名称=机器人:layout_height>&WRAP_CONTENT LT; /项目>
        <项目名称=机器人:文字> @字符串/ sys_logged_in< /项目>
        <项目名称=机器人:layout_gravity>顶|右LT; /项目>
        <项目名称=安卓重力>顶| center_vertical< /项目>
        <项目名称=机器人:文字颜色> @android:彩色/白色< /项目>
        <项目名称=机器人:paddingLeft>&4DP LT; /项目>
        <项目名称=机器人:paddingRight>&4DP LT; /项目>
    < /风格>    <样式名称=tvLoggedIn父=@安卓风格/ TextAppearance.Small>
        <项目名称=机器人:layout_width> 0dp< /项目>
        <项目名称=机器人:layout_height> match_parent< /项目>
        <项目名称=机器人:inputType下>没有< /项目>
        <项目名称=安卓重力>顶部和LT; /项目>
        <项目名称=机器人:layout_gravity>顶|左< /项目>
        <项目名称=机器人:背景> @android:彩色/透明< /项目>
        <项目名称=机器人:文字颜色> @android:彩色/白色< /项目>
        <项目名称=机器人:layout_weight> 2'; /项目>
    < /风格>    <样式名称=layout_master>
        <项目名称=机器人:方向>垂直< /项目>
        <项目名称=机器人:layout_width>&FILL_PARENT LT; /项目>
        <项目名称=机器人:layout_height>&FILL_PARENT LT; /项目>
        <! - 项目名称=showDividers>结束< /项目 - >
        <项目名称=机器人:layout_alignParentTop>真< /项目>
        <项目名称=机器人:layout_centerHorizo​​ntal>真< /项目>
    < /风格>    <样式名称=layout_loggedin>
        !< - 项目名称=buttonBarStyle>机器人:ATTR / buttonBarStyle< /项目 - >?
        <项目名称=机器人:layout_width>&FILL_PARENT LT; /项目>
        <项目名称=机器人:layout_height>&WRAP_CONTENT LT; /项目>
        <项目名称=机器人:方向>水平< /项目>
        <项目名称=?的android:背景>机器人:ATTR / dividerVertical< /项目>
        <项目名称=安卓重力>底部|中心< /项目>
    < /风格>    <样式名称=layout_bodyscroll>
        <项目名称=机器人:layout_width>&FILL_PARENT LT; /项目>
        <项目名称=机器人:fillViewport>真< /项目>
        <项目名称=机器人:layout_height> 0dp< /项目>
        <项目名称=机器人:layout_weight> 1 LT; /项目>
        <项目名称=机器人:layout_marginTop> @扪/ activity_bodyscroll_margin< /项目>
        <项目名称=机器人:layout_marginBottom> @扪/ activity_bodyscroll_margin< /项目>
        <项目名称=机器人:layout_marginLeft> @扪/ activity_bodyscroll_margin< /项目>
        <项目名称=机器人:layout_marginRight> @扪/ activity_bodyscroll_margin< /项目>
    < /风格>    <样式名称=layout_bodylinear>
        <项目名称=机器人:方向>垂直< /项目>
        <项目名称=机器人:layout_width>&FILL_PARENT LT; /项目>
        <项目名称=机器人:layout_height>&WRAP_CONTENT LT; /项目>
    < /风格>    <样式名称=layout_btnbar_frame>
        <项目名称=机器人:layout_width>&FILL_PARENT LT; /项目>
        <项目名称=机器人:layout_height>&FILL_PARENT LT; /项目>
        <项目名称=机器人:layout_weight> 1 LT; /项目>
    < /风格>    <样式名称=layout_btnbar_linear父=>
        !< - 项目名称=buttonBarStyle>机器人:ATTR / buttonBarStyle< /项目 - >?
        <项目名称=机器人:layout_width>&FILL_PARENT LT; /项目>
        <项目名称=机器人:layout_height>&WRAP_CONTENT LT; /项目>
        <项目名称=机器人:方向>水平< /项目>
        <项目名称=?的android:背景>机器人:ATTR / dividerVertical< /项目>
        <项目名称=安卓重力>底部|中心< /项目>
        <项目名称=机器人:layout_gravity>底部< /项目>
    < /风格>    <样式名称=layout_btnbar_btn父=>
        !< - 项目名称=buttonBarStyle>机器人:ATTR / buttonBarStyle< /项目 - >?
        <项目名称=机器人:layout_width>&WRAP_CONTENT LT; /项目>
        <项目名称=机器人:layout_height>&WRAP_CONTENT LT; /项目>
        <项目名称=机器人:layout_weight> 1 LT; /项目>
        <项目名称=机器人:背景> @android:彩色/透明< /项目>
        <项目名称=机器人:文字颜色> @android:彩色/ primary_text_dark< /项目>
        <项目名称=机器人:paddingTop> @扪/ activity_vertical_margin< /项目>
        <项目名称=机器人:paddingBottom会> @扪/ activity_vertical_margin< /项目>
    < /风格>    <样式名称=menu_btn父=layout_btnbar_btn>
        <项目名称=机器人:textAppearance> @android:风格/ TextAppearance.Large< /项目>
        <项目名称=机器人:文字样式>大胆< /项目>
        <项目名称=机器人:layout_width>&FILL_PARENT LT; /项目>
        <项目名称=机器人:layout_height>&FILL_PARENT LT; /项目>
    < /风格>    <样式名称=隐藏>
        <项目名称=机器人:layout_width> 0dp< /项目>
        <项目名称=机器人:layout_height> 0dp< /项目>
        <项目名称=机器人:可编辑>假LT; /项目>
        <项目名称=机器人:自动图文集>假LT; /项目>
        <项目名称=机器人:可视性>不可见LT; /项目>
        <项目名称=机器人:inputType下>没有< /项目>
    < /风格>    <样式名称=field_edittext>
        <项目名称=机器人:layout_width>&FILL_PARENT LT; /项目>
        <项目名称=机器人:layout_height>&WRAP_CONTENT LT; /项目>
        <项目名称=机器人:layout_marginBottom>&7DP LT; /项目>
        <项目名称=机器人:layout_marginTop> 3DP< /项目>
        <项目名称=机器人:layout_marginLeft> 2DP< /项目>
        <项目名称=机器人:layout_marginRight> 2DP< /项目>
        <项目名称=机器人:layout_column> 1 LT; /项目>
        <项目名称=机器人:layout_weight> 2'; /项目>
        <项目名称=机器人:文字颜色> @android:彩色/ primary_text_dark< /项目>
        <项目名称=机器人:自动图文集>真< /项目>
        <项目名称=安卓重力>底部< /项目>
    < /风格>    <样式名称=tvFieldLabel>
        <项目名称=机器人:layout_height>&WRAP_CONTENT LT; /项目>
        <项目名称=机器人:layout_width>&WRAP_CONTENT LT; /项目>
        <项目名称=?机器人:textAppearance>机器人:ATTR / textAppearanceMedium< /项目>
        <项目名称=机器人:layout_gravity>顶部和LT; /项目>
        <项目名称=安卓重力>顶部和LT; /项目>
    < /风格>    <样式名称=field_edittext_note父=field_edittext>
        <项目名称=机器人:layout_height> 125dp< /项目>
        <项目名称=安卓重力>顶部和LT; /项目>
    < /风格>    <样式名称=tvTableField>
        <项目名称=机器人:layout_width>&WRAP_CONTENT LT; /项目>
        <项目名称=机器人:layout_height> match_parent< /项目>
        <项目名称=机器人:layout_gravity>底部|右LT; /项目>
        <项目名称=机器人:layout_weight> 0℃; /项目>
        <项目名称=机器人:layout_column> 0℃; /项目>
        <项目名称=机器人:textAppearance> @android:风格/ TextAppearance.Medium< /项目>
        <项目名称=机器人:文字颜色> @android:彩色/ secondary_text_dark< /项目>
        <项目名称=安卓重力> center_vertical< /项目>
        <项目名称=机器人:inputType下>没有< /项目>
    < /风格>    <样式名称=spinTails>
        <项目名称=机器人:layout_width>&FILL_PARENT LT; /项目>
        <项目名称=机器人:layout_height>&FILL_PARENT LT; /项目>
        !< - 项目名称=机器人:背景>的android:ATTR / dividerVertical< /项目 - >
        <项目名称=机器人:填充>&8DP LT; /项目>
    < /风格>
    <样式名称=tvFieldColPrimary父=tvTableField>
        <项目名称=机器人:文字颜色> @android:彩色/ primary_text_dark< /项目>
        <项目名称=机器人:paddingRight>&8DP LT; /项目>
    < /风格>    <样式名称=tvFieldColSecondary父=tvFieldColPrimary>
        <项目名称=机器人:文字颜色> @android:彩色/ secondary_text_dark< /项目>
    < /风格>< /资源>




./布局/ activity_login.xml的(我的第一个活动)

 < RelativeLayout的
    的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    工具:上下文=com.kjackson324.pikcms.Login
    机器人:ID =@ + ID / layLogin>    <的LinearLayout
        机器人:方向=垂直
        机器人:layout_width =FILL_PARENT
        机器人:layout_height =FILL_PARENT
        机器人:layout_alignParentTop =真
        机器人:layout_centerHorizo​​ntal =真正的>        <的TextView
            机器人:layout_width =0dp
            机器人:layout_height =0dp
            机器人:ID =@ + ID / TVID
            机器人:知名度=隐形/>        <滚动型
            机器人:layout_width =FILL_PARENT
            机器人:layout_height =0dp
            机器人:ID =@ + ID / scrollView4
            机器人:layout_weight =1>            <的LinearLayout
                机器人:方向=垂直
                机器人:layout_width =FILL_PARENT
                机器人:layout_height =WRAP_CONTENT
                机器人:ID =@ + ID / linearLayout13
                机器人:paddingLeft =@扪/ activity_horizo​​ntal_margin
                机器人:paddingRight =@扪/ activity_horizo​​ntal_margin
                机器人:paddingTop =@扪/ activity_vertical_margin
                机器人:paddingBottom会=@扪/ activity_vertical_margin>                <的TextView
                    机器人:layout_width =WRAP_CONTENT
                    机器人:layout_height =WRAP_CONTENT
                    机器人:textAppearance =机器人:ATTR / textAppearanceLarge
                    机器人:文字=@字符串/ entry_employee
                    机器人:ID =@ + ID / tvName
                    />                <微调
                    机器人:ID =@ + ID / spinEmployees
                    机器人:layout_width =match_parent
                    机器人:layout_height =0dp
                    机器人:layout_weight =1
                    机器人:layout_gravity =CENTER_HORIZONTAL
                    机器人:可点击=真
                    机器人:paddingTop =@扪/ activity_vertical_margin
                    机器人:paddingBottom会=@扪/ activity_vertical_margin
                    机器人:paddingLeft =@扪/ activity_horizo​​ntal_margin
                    机器人:layout_marginLeft =@扪/ activity_horizo​​ntal_margin
                    />                <的TextView
                    机器人:layout_width =WRAP_CONTENT
                    机器人:layout_height =WRAP_CONTENT
                    机器人:textAppearance =机器人:ATTR / textAppearanceLarge
                    机器人:文字=@字符串/ lbl_password
                    机器人:ID =@ + ID / tvPassword
                    机器人:layout_marginTop =@扪/ activity_vertical_margin/>                <的EditText
                    机器人:ID =@ + ID / txtPassword
                    机器人:layout_width =FILL_PARENT
                    机器人:layout_height =WRAP_CONTENT
                    安卓的inputType =textPassword
                    机器人:layout_marginLeft =@扪/ activity_horizo​​ntal_margin
                    机器人:EMS =10
                    机器人:文字=管理员/>            < / LinearLayout中>
        < /滚动型>        <的FrameLayout
            机器人:layout_width =FILL_PARENT
            机器人:layout_height =WRAP_CONTENT>            <的LinearLayout
                机器人:ID =@ + ID / linearLayout14
                机器人:layout_width =FILL_PARENT
                机器人:layout_height =WRAP_CONTENT
                机器人:方向=横向
                机器人:重力=底部|中心
                机器人:weightSum =2
                机器人:layout_gravity =底>                <按钮
                    机器人:layout_width =WRAP_CONTENT
                    机器人:layout_height =WRAP_CONTENT
                    机器人:文字=@字符串/ btn_begin
                    机器人:ID =@ + ID / btnLogin
                    机器人:背景=@机器人:彩色/透明
                    机器人:layout_weight =1
                    机器人:文字颜色=@机器人:彩色/ primary_text_dark
                    机器人:paddingTop =@扪/ activity_vertical_margin
                    机器人:paddingBottom会=@扪/ activity_vertical_margin
                    安卓的onClick =的onClick/>                <按钮
                    机器人:layout_width =WRAP_CONTENT
                    机器人:layout_height =WRAP_CONTENT
                    机器人:文字=@字符串/ btn_clear
                    机器人:ID =@ + ID / button7
                    机器人:背景=@机器人:彩色/透明
                    机器人:layout_weight =1
                    机器人:文字颜色=@机器人:彩色/ primary_text_dark
                    机器人:paddingTop =@扪/ activity_vertical_margin
                    机器人:paddingBottom会=@扪/ activity_vertical_margin/>
            < / LinearLayout中>
        < /&的FrameLayout GT;    < / LinearLayout中>< / RelativeLayout的>




设备| logcat的

  11月3日至3日:14:37.386 1891年至1891年/ com.kjackson324.pikcms D / AndroidRuntime:关闭VM
十一月3日至3日:14:37.386 1891年至1891年/ com.kjackson324.pikcms W / dalvikvm:主题ID = 1:未捕获的异常线程退出(组= 0x40018560)
十一月3日至3日:14:37.413 1891年至1891年/ com.kjackson324.pikcms E / AndroidRuntime:致命异常:主要
    了java.lang.RuntimeException:无法启动活动ComponentInfo {com.kjackson324.pikcms / com.kjackson324.pikcms.Login}:java.lang.IllegalStateException:您需要使用Theme.AppCompat主题(或后代)与本次活动。
            在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1696)
            在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1716)
            在android.app.ActivityThread.access $ 1500(ActivityThread.java:124)
            在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:968)
            在android.os.Handler.dispatchMessage(Handler.java:99)
            在android.os.Looper.loop(Looper.java:130)
            在android.app.ActivityThread.main(ActivityThread.java:3806)
            在java.lang.reflect.Method.invokeNative(本机方法)
            在java.lang.reflect.Method.invoke(Method.java:507)
            在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
            在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
            在dalvik.system.NativeStart.main(本机方法)
     java.lang.IllegalStateException:引起你需要使用一个Theme.AppCompat主题(或后代)与本次活动。
            在android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:151)
            在android.support.v7.app.ActionBarActivityDelegateBase.onCreate(ActionBarActivityDelegateBase.java:138)
            在android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:123)
            在com.kjackson324.pikcms.Login.onCreate(Login.java:38)
            在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
            在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1660)
            在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1716)
            在android.app.ActivityThread.access $ 1500(ActivityThread.java:124)
            在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:968)
            在android.os.Handler.dispatchMessage(Handler.java:99)
            在android.os.Looper.loop(Looper.java:130)
            在android.app.ActivityThread.main(ActivityThread.java:3806)
            在java.lang.reflect.Method.invokeNative(本机方法)
            在java.lang.reflect.Method.invoke(Method.java:507)
            在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
            在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
            在dalvik.system.NativeStart.main(本机方法)


解决方案

您需要更换主题在你的清单中的应用标签:

 <应用机器人:主题=@风格/ Theme.AppCompat>

ThemeOverlay应该只与新actionBarTheme属性或与工具栏的动作条一起使用。这里更多的信息: https://chris.banes.me/2014/ 11/12 /主题VS风格/

IDE: Android Studio 1.1.0

ENV: Debugging on usb-connected phone using Android API v10.


I'm trying to use AppCompat to support Android API v8 and up. Compiles fine but crashes when the activity is drawn, saying:

lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

...however, in AndroidManifest.xml I have:

    <application
        android:name=".objects.PikCMS"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/ThemeOverlay.AppCompat"
        >

Thank you & please forgive my frustration. I've been reading A LOT of related but unhelpful info. }8,(


Other Info

  • I do not want to force a specific theme.
  • I would like to avoid using different files for different API versions. However, I don't mind adding different versions of same property next to each other.
  • I had errors in styles.xml for items introduced in v11 (like "buttonBarStyle" & "showDividers"). After reading about the issue, I had thought AppCompat would "fill in the blanks" for pre11 APIs but (in my configuration) it isn't. These are currently all commented out -- until I find out how to use them with AppCompat. Similarly, I had problems with the layout files -- these problematic properties were deleted.
  • Activity class: Login.java extends :ActionBarActivity:. I'm also importing "android.support.v7.app.ActionBarActivity" but I'm not sure if I need all of it as I do not implicitly use the action bar (but I might in the future).



Code Files

build.gradle (Module: app)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion '21.1.2'

    defaultConfig {
        applicationId "com.kjackson324.pikcms"
        minSdkVersion 10
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
}

dependencies {
    compile 'com.android.support:support-v4:21.0.3'
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile fileTree(include: ['*.jar'], dir: 'libs')
}




AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.kjackson324.pikcms" >

    <application
        android:name=".objects.PikCMS"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/ThemeOverlay.AppCompat"
        >
        <uses-permission android:name="android.permission.BLUETOOTH" />

        <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" />

        <activity
            android:name=".Login"
            android:configChanges="keyboardHidden|orientation"
            android:label="@string/title_activity_login"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="com.kjackson324.pikcms.Login" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Navigation"
            android:configChanges="keyboardHidden|orientation"
            android:label="@string/title_activity_navigation"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="com.kjackson324.pikcms.Navigation" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".PickHistory"
            android:configChanges="keyboardHidden|orientation"
            android:label="@string/title_activity_pik_log"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="com.kjackson324.pikcms.PickHistory" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

        <!--

            ...bla, bla, bla...

            (much more of the same, no new attributes used)
        -->

        <activity
            android:name=".ConfigLocFields"
            android:label="@string/title_activity_config_loc_fields"
            android:configChanges="keyboardHidden|orientation"
            android:screenOrientation="portrait" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.kjackson324.pikcms.Navigation" />
            <intent-filter>
                <action android:name="com.kjackson324.pikcms.ConfigLocFields" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>

</manifest>




styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="simple_center" parent="">
        <!--item name="android:layout_gravity">center</item-->
        <!--item name="android:gravity">center</item-->
        <item name="android:dialogLayout">?android:layout_gravity</item>
    </style>

    <style name="lblLoggedIn" parent="@android:style/TextAppearance.Small">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:text">@string/sys_logged_in</item>
        <item name="android:layout_gravity">top|right</item>
        <item name="android:gravity">top|center_vertical</item>
        <item name="android:textColor">@android:color/white</item>
        <item name="android:paddingLeft">4dp</item>
        <item name="android:paddingRight">4dp</item>
    </style>

    <style name="tvLoggedIn" parent="@android:style/TextAppearance.Small">
        <item name="android:layout_width">0dp</item>
        <item name="android:layout_height">match_parent</item>
        <item name="android:inputType">none</item>
        <item name="android:gravity">top</item>
        <item name="android:layout_gravity">top|left</item>
        <item name="android:background">@android:color/transparent</item>
        <item name="android:textColor">@android:color/white</item>
        <item name="android:layout_weight">2</item>
    </style>

    <style name="layout_master">
        <item name="android:orientation">vertical</item>
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">fill_parent</item>
        <!--item name="showDividers">end</item-->
        <item name="android:layout_alignParentTop">true</item>
        <item name="android:layout_centerHorizontal">true</item>
    </style>

    <style name="layout_loggedin">
        <!--item name="buttonBarStyle">?android:attr/buttonBarStyle</item-->
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:orientation">horizontal</item>
        <item name="android:background">?android:attr/dividerVertical</item>
        <item name="android:gravity">bottom|center</item>
    </style>

    <style name="layout_bodyscroll">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:fillViewport">true</item>
        <item name="android:layout_height">0dp</item>
        <item name="android:layout_weight">1</item>
        <item name="android:layout_marginTop">@dimen/activity_bodyscroll_margin</item>
        <item name="android:layout_marginBottom">@dimen/activity_bodyscroll_margin</item>
        <item name="android:layout_marginLeft">@dimen/activity_bodyscroll_margin</item>
        <item name="android:layout_marginRight">@dimen/activity_bodyscroll_margin</item>
    </style>

    <style name="layout_bodylinear">
        <item name="android:orientation">vertical</item>
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">wrap_content</item>
    </style>

    <style name="layout_btnbar_frame">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">fill_parent</item>
        <item name="android:layout_weight">1</item>
    </style>

    <style name="layout_btnbar_linear" parent="">
        <!--item name="buttonBarStyle">?android:attr/buttonBarStyle</item-->
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:orientation">horizontal</item>
        <item name="android:background">?android:attr/dividerVertical</item>
        <item name="android:gravity">bottom|center</item>
        <item name="android:layout_gravity">bottom</item>
    </style>

    <style name="layout_btnbar_btn" parent="">
        <!--item name="buttonBarStyle">?android:attr/buttonBarStyle</item-->
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_weight">1</item>
        <item name="android:background">@android:color/transparent</item>
        <item name="android:textColor">@android:color/primary_text_dark</item>
        <item name="android:paddingTop">@dimen/activity_vertical_margin</item>
        <item name="android:paddingBottom">@dimen/activity_vertical_margin</item>
    </style>

    <style   name="menu_btn"    parent="layout_btnbar_btn">
        <item name="android:textAppearance">@android:style/TextAppearance.Large</item>
        <item name="android:textStyle">bold</item>
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">fill_parent</item>
    </style>

    <style name="hidden">
        <item name="android:layout_width">0dp</item>
        <item name="android:layout_height">0dp</item>
        <item name="android:editable">false</item>
        <item name="android:autoText">false</item>
        <item name="android:visibility">invisible</item>
        <item name="android:inputType">none</item>
    </style>

    <style name="field_edittext">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_marginBottom">7dp</item>
        <item name="android:layout_marginTop">3dp</item>
        <item name="android:layout_marginLeft">2dp</item>
        <item name="android:layout_marginRight">2dp</item>
        <item name="android:layout_column">1</item>
        <item name="android:layout_weight">2</item>
        <item name="android:textColor">@android:color/primary_text_dark</item>
        <item name="android:autoText">true</item>
        <item name="android:gravity">bottom</item>
    </style>

    <style name="tvFieldLabel">
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_width">wrap_content</item>
        <item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
        <item name="android:layout_gravity">top</item>
        <item name="android:gravity">top</item>
    </style>

    <style name="field_edittext_note" parent="field_edittext">
        <item name="android:layout_height">125dp</item>
        <item name="android:gravity">top</item>
    </style>

    <style name="tvTableField">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">match_parent</item>
        <item name="android:layout_gravity">bottom|right</item>
        <item name="android:layout_weight">0</item>
        <item name="android:layout_column">0</item>
        <item name="android:textAppearance">@android:style/TextAppearance.Medium</item>
        <item name="android:textColor">@android:color/secondary_text_dark</item>
        <item name="android:gravity">center_vertical</item>
        <item name="android:inputType">none</item>
    </style>

    <style name="spinTails">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">fill_parent</item>
        <!--item name="android:background">?android:attr/dividerVertical</item-->
        <item name="android:padding">8dp</item>
    </style>


    <style name="tvFieldColPrimary" parent="tvTableField">
        <item name="android:textColor">@android:color/primary_text_dark</item>
        <item name="android:paddingRight">8dp</item>
    </style>

    <style name="tvFieldColSecondary" parent="tvFieldColPrimary">
        <item name="android:textColor">@android:color/secondary_text_dark</item>
    </style>

</resources>




./layout/activity_login.xml (my first activity)

<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"
    tools:context="com.kjackson324.pikcms.Login"
    android:id="@+id/layLogin" >

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true">

        <TextView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:id="@+id/tvId"
            android:visibility="invisible"/>

        <ScrollView
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:id="@+id/scrollView4"
            android:layout_weight="1">

            <LinearLayout
                android:orientation="vertical"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:id="@+id/linearLayout13"
                android:paddingLeft="@dimen/activity_horizontal_margin"
                android:paddingRight="@dimen/activity_horizontal_margin"
                android:paddingTop="@dimen/activity_vertical_margin"
                android:paddingBottom="@dimen/activity_vertical_margin">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:text="@string/entry_employee"
                    android:id="@+id/tvName"
                    />

                <Spinner
                    android:id="@+id/spinEmployees"
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                    android:layout_gravity="center_horizontal"
                    android:clickable="true"
                    android:paddingTop="@dimen/activity_vertical_margin"
                    android:paddingBottom="@dimen/activity_vertical_margin"
                    android:paddingLeft="@dimen/activity_horizontal_margin"
                    android:layout_marginLeft="@dimen/activity_horizontal_margin"
                    />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:text="@string/lbl_password"
                    android:id="@+id/tvPassword"
                    android:layout_marginTop="@dimen/activity_vertical_margin"/>

                <EditText
                    android:id="@+id/txtPassword"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:inputType="textPassword"
                    android:layout_marginLeft="@dimen/activity_horizontal_margin"
                    android:ems="10"
                    android:text="admin"/>

            </LinearLayout>
        </ScrollView>

        <FrameLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">

            <LinearLayout
                android:id="@+id/linearLayout14"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:gravity="bottom|center"
                android:weightSum="2"
                android:layout_gravity="bottom">

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/btn_begin"
                    android:id="@+id/btnLogin"
                    android:background="@android:color/transparent"
                    android:layout_weight="1"
                    android:textColor="@android:color/primary_text_dark"
                    android:paddingTop="@dimen/activity_vertical_margin"
                    android:paddingBottom="@dimen/activity_vertical_margin"
                    android:onClick="onClick"/>

                <Button
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/btn_clear"
                    android:id="@+id/button7"
                    android:background="@android:color/transparent"
                    android:layout_weight="1"
                    android:textColor="@android:color/primary_text_dark"
                    android:paddingTop="@dimen/activity_vertical_margin"
                    android:paddingBottom="@dimen/activity_vertical_margin"/>
            </LinearLayout>
        </FrameLayout>

    </LinearLayout>

</RelativeLayout>




Devices | logcat

03-03 11:14:37.386    1891-1891/com.kjackson324.pikcms D/AndroidRuntime﹕ Shutting down VM
03-03 11:14:37.386    1891-1891/com.kjackson324.pikcms W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x40018560)
03-03 11:14:37.413    1891-1891/com.kjackson324.pikcms E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kjackson324.pikcms/com.kjackson324.pikcms.Login}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1696)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1716)
            at android.app.ActivityThread.access$1500(ActivityThread.java:124)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:968)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:130)
            at android.app.ActivityThread.main(ActivityThread.java:3806)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:507)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
            at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:151)
            at android.support.v7.app.ActionBarActivityDelegateBase.onCreate(ActionBarActivityDelegateBase.java:138)
            at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:123)
            at com.kjackson324.pikcms.Login.onCreate(Login.java:38)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1660)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1716)
            at android.app.ActivityThread.access$1500(ActivityThread.java:124)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:968)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:130)
            at android.app.ActivityThread.main(ActivityThread.java:3806)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:507)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
            at dalvik.system.NativeStart.main(Native Method)

解决方案

You need to replace your theme in the application tag of your manifest:

<application android:theme="@style/Theme.AppCompat">

ThemeOverlay should only be used with an actionBar with the new actionBarTheme attribute or with a toolbar. More informations here: https://chris.banes.me/2014/11/12/theme-vs-style/

这篇关于如何使用Android的应用程序兼容性主题化的应用范围?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆