Android材料主题alpha颜色问题

4
我创建了一个版本为5.0的应用程序,下面是我编写的主题。
 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimaryDark">@color/actionbar_color</item>
    <item name="colorPrimary">@color/actionbar_color</item>
    <item name="colorAccent">@color/actionbar_yellow_color</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:textColorPrimary">@color/edit_text_color</item>
    <item name="android:windowBackground">@drawable/ic_app_background</item>
</style>

当我设置actionbar_color="#4DFFFFFF"时,我的应用程序崩溃了。如果我使用任何非 alpha 颜色,它就可以正常工作,我的意思是如果我为 actionbar_color 设置颜色代码为 "#FFFFFF",它就可以正常工作。
错误是:任务描述的主要颜色应该是不透明的。 我已经检查了这个解决方案Android 5.0:如何更改概述屏幕任务标题背景颜色,但对于 alpha 颜色仍然出现相同的错误。 我已经按照不透明度颜色的方法进行了操作颜色中的十六进制透明度
崩溃日志:
03-20 05:59:41.323: E/AndroidRuntime(2133): 致命异常: 主要颜色应该是不透明的
03-20 05:59:41.323: E/AndroidRuntime(2133): 进程: com.mytaxback, PID: 2133
03-20 05:59:41.323: E/AndroidRuntime(2133): java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.mytaxback/com.mytaxback.LoginActivity}: java.lang.RuntimeException: 主要颜色应该是不透明的
03-20 05:59:41.323: E/AndroidRuntime(2133):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
03-20 05:59:41.323: E/AndroidRuntime(2133):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
03-20 05:59:41.323: E/AndroidRuntime(2133):     at android.app.ActivityThread.access$800(ActivityThread.java:144)
03-20 05:59:41.323: E/AndroidRuntime(2133):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
03-20 05:59:41.323: E/AndroidRuntime(2133):     at android.os.Handler.dispatchMessage(Handler.java:102)
03-20 05:59:41.323: E/AndroidRuntime(2133):     at android.os.Looper.loop(Looper.java:135)
03-20 05:59:41.323: E/AndroidRuntime(2133):     at android.app.ActivityThread.main(ActivityThread.java:5221)
03-20 05:59:41.323: E/AndroidRuntime(2133):     at java.lang.reflect.Method.invoke(Native Method)
03-20 05:59:41.323: E/AndroidRuntime(2133):     at java.lang.reflect.Method.invoke(Method.java:372)
03-20 05:59:41.323: E/AndroidRuntime(2133):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
03-20 05:59:41.323: E/AndroidRuntime(2133):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
03-20 05:59:41.323: E/AndroidRuntime(2133): Caused by: java.lang.RuntimeException: 主要颜色应该是不透明的
03-20 05:59:41.323: E/AndroidRuntime(2133):     at android.app.ActivityManager$TaskDescription.(ActivityManager.java:536)
03-20 05:59:41.323: E/AndroidRuntime(2133):     at android.app.Activity.onApplyThemeResource(Activity.java:3677)
03-20 05:59:41.323: E/AndroidRuntime(2133):     at android.view.ContextThemeWrapper.initializeTheme(ContextThemeWrapper.java:140)
03-20 05:59:41.323: E/AndroidRuntime(2133):     at android.view.ContextThemeWrapper.setTheme(ContextThemeWrapper.java:85)
03-20 05:59:41.323: E/AndroidRuntime(2133):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2244)
03-20 05:59:41.323: E/AndroidRuntime(2133):     ... 10 more

我在使用5.0操作系统模拟器时遇到了这个问题。在ICS和KITKAT上运行良好。 请给我一些建议。 谢谢。


你在哪里设置了 #4DFFFFFF?你使用了 Theme.AppCompat.Light.NoActionBar 主题。那么你如何设置 ActionBar 的颜色? - SweetWisher ツ
@Mishi 我已经将这个颜色代码放在values/color.xml文件中,对于ActionBar,我使用了Toolbar,并且我的Activity扩展了ActionBarActivity。 - Bhavin Chauhan
@Harry 你检查过alpha颜色了吗?主题是父主题吗?我的意思是parent="Theme.AppCompat.Light.NoActionBar"? - Bhavin Chauhan
@Harry 奇怪的问题 :( 对我不起作用,你是使用 Android Studio 还是 Eclipse? - Bhavin Chauhan
1
哦!我在5.0上也遇到了错误。需要检查其他东西。 - Harin
显示剩余7条评论
3个回答

1
我已经为操作栏/工具栏和状态栏指定了背景颜色,如下所示。这里的actionbar_color是透明颜色。
        mToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
        setSupportActionBar(mToolbar);
        TextView mTitle = (TextView) mToolbar.findViewById(R.id.toolbar_title);
        mTitle.setText(getString(R.string.login_title));
        mTitle.setTypeface(Oswald_Medium);
        mToolbar.setNavigationIcon(R.drawable.ic_back_arrow);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
        mToolbar.setBackgroundColor(getResources().getColor(R.color.actionbar_color));
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
            Window window = getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(getResources().getColor(R.color.actionbar_color));
        }

我注意到当我使用Eclipse IDE编写此主题时,会导致错误,而在Android Studio中相同的Alpha颜色运行良好。如果您找到任何更好的解决方案,请在此处发表评论。我已经为Eclipse编写了上述代码,AndroidStudio不需要此代码。

1

你不能在主要颜色中使用阿尔法值。

你可以查看android.app.ActivityManager#TaskDescription的源代码。

/**
    * Creates the TaskDescription to the specified values.
    *
    * @param label A label and description of the current state of this task.
    * @param icon An icon that represents the current state of this task.
    * @param colorPrimary A color to override the theme's primary color. This color must be opaque.
    */
    public TaskDescription(String label, Bitmap icon, int colorPrimary) {
      if ((colorPrimary != 0) && (Color.alpha(colorPrimary) != 255)) {
        throw new RuntimeException("A TaskDescription's primary color should be opaque");
      }

      mLabel = label;
      mIcon = icon;
      mColorPrimary = colorPrimary;
    }

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接