Activity 与 AppCompatActivity:差异 UI

Activity vs AppCompatActivity: Difference in UI

我正在开发 Android 应用程序。在某些情况下,我使用 Activity,而在其他情况下,我使用 AppCompatActivity。虽然我注意到一件事:

让我们以这个 class 为例:

public class LoginActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            setTheme( android.R.style.Theme_Material_Dialog_NoActionBar_MinWidth);
        }
    }
}

在这种情况下,输出是所需的:

当我将扩展 class 从 Activity 更改为 AppCompatActivity 时,输出更改为:

为什么会这样?

AppCompatActivity - 为早期设备提供 Material 颜色主题、小部件着色和应用栏支持。使用此 class 需要您使用 Theme.AppCompat 主题以实现一致的视觉呈现。

有关详细信息,请查看此 url:https://developer.android.com/topic/libraries/support-library/features#v7-appcompat

简单地说:AppCompact activity 使用 Theme 来改变它的原因

Activity 不会有操作栏,而 AppCompactActivity 默认会有操作栏。

经过长时间的研究,我认为这是一个错误,或者 Android 主题决定为深色主题也将对话框保持为白色。问题是属性 colorBackground 似乎不在 background_material_dark 上,它指向 @color/material_grey_850.

这是我的解决方案:
添加以下颜色:

<color name="background_material_dark_public">@color/material_grey_850</color>

并设置它。就我而言:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

    activity.setTheme(android.R.style.Theme_Material_Dialog_NoActionBar_MinWidth);
    int color = ResourcesCompat.getColor(activity.getResources(), R.color.background_material_dark_public, null); //without theme
    activity.findViewById(android.R.id.content).setBackgroundColor(color);
}