代码之家  ›  专栏  ›  技术社区  ›  Emaborsa

活动与AppCompatiActivity:UI中的差异

  •  1
  • Emaborsa  · 技术社区  · 6 年前

    我正在开发一个Android应用程序。在某些情况下,我使用了一个活动,而在其他情况下,则使用了一个appcompatactivity。尽管我注意到一件事:

    以此类为例:

    公共类逻辑活动扩展活动{ @重写 创建时受保护的void(bundle savedinstanceState){ super.oncreate(保存的状态); if(android.os.build.version.sdk ou int>=build.version ou codes.lollipop){ settheme(android.r.style.theme_material_dialog_noactionbar_minwidth); } } } < /代码>

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

    当我将扩展类从 activity更改为 appcompatactivity时,输出更改为:

    为什么会这样?

    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);
            }
        }
    }
    

    在这种情况下,输出是所需的:
    enter image description here

    当我把扩展类从 Activity AppCompatActivity 输出更改为:
    enter image description here

    为什么会这样?

    2 回复  |  直到 6 年前
        1
  •  0
  •   praveen2034    6 年前

    AppCompatactivity-为早期设备提供材料颜色主题、小部件着色和应用程序栏支持。使用此类需要使用Theme.AppCompat主题以实现一致的视觉演示。

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

    简单:AppCompact活动使用的主题

    活动不具有操作栏,默认情况下,AppCompactActivity将具有操作栏。

        2
  •  0
  •   Emaborsa    6 年前

    经过长时间的研究,我认为这是或是一个bug或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);
    }