【问题标题】:AppCompat v7 and DatePicker render issueAppCompat v7 和 DatePicker 渲染问题
【发布时间】:2026-01-16 09:10:01
【问题描述】:

最近我在 The Big Nerd Ranch Guide (2nd edition) 中阅读了关于对话的一章,并且我已经按照书本完成了所有工作。但是有一些问题,书中没有提到。 Intellij Idea 的预览区域无法与 AppCompat 主题一起正常工作。

这是我当前的主题:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
     <!-- Customize your theme here. -->
</style>

这就是我在预览区的内容:

在互联网上,我读到使用 Base.Theme.AppCompat.Light.DarkActionBar 可能会有所帮助。它会删除消息,但 ActionBar 也会消失。

哦,DatePicker 不能同时与任何 Material Design 一起使用:

这只是一个渲染问题,因为这两个主题都可以在设备上正常运行。 有人可以尝试使用 AppCompat 主题在 IDEA 和 Android Studio 中预览 DatePicker 吗? 这可能只是 IDEA 的问题。

附言 dialog_date.xml

<?xml version="1.0" encoding="utf-8"?>
<DatePicker xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/dialog_date_date_picker"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:calendarViewShown="false"
/>

AndroidManifest.xml

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
                android:name=".CrimeListActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".CrimePagerActivity"
            android:label="@string/app_name" >
        </activity>
    </application>

</manifest>

整个项目: https://onedrive.live.com/redir?resid=4653F2D263EA4131!21585&authkey=!AESze90_ZZ0p9WY&ithint=folder%2cproperties

【问题讨论】:

    标签: android android-studio intellij-idea datepicker android-appcompat


    【解决方案1】:

    切换主题

    如果您查看 Theme.AppCompat.Light.DarkActionBar 的声明,它在 AppCompat 的 values/themes.xml 文件中直接别名为 Base.Theme.AppCompat.Light.DarkActionBar

    <!-- Platform-independent theme providing an action bar in a dark-themed activity. -->
    <style name="Theme.AppCompat.Light.DarkActionBar" parent="Base.Theme.AppCompat.Light.DarkActionBar" />
    

    source

    这在任何其他设备配置中都没有别名(例如 values-v23/themes.xml、values-v18/themes.xml 等)。查看 AppCompat here 的资源。这意味着对于每个设备,Theme.AppCompat.Light.DarkActionBar始终且仅别名为 Base.Theme.AppCompat.Light.DarkActionBar

    Base 主题的文档更清楚地说明了这一点:

    “Base.Theme”系列中的主题因当前的 平台版本以在每个设备上提供正确的基础。你 可能不想直接在您的应用中使用它们。

    “Theme.AppCompat”系列中的主题旨在扩展或 应用直接使用。

    source

    因此,您从 Theme.AppCompat.Light.DarkActionBar 切换到 Base.Theme.Light.DarkActionBar 将永远不会影响事物在实际设备上的显示方式,并且实际上并没有改变。 Android Studio 行为不同的事实是 Android Studio 的一个问题(我无法在 AS 2.0 预览版 9 上使用您的代码重现该问题)。

    Android Studio 的问题

    我会说“设计”选项卡总是有点不稳定。它越来越好,但并不总是很好,尤其是支持库的东西。改变你的应用程序的主题(即使我上面说的不是真的)只是为了让设计选项卡看起来很漂亮可能是个坏主意。想想你的用户。如果您真的想知道您的屏幕是什么样子,请将其部署到真实设备或模拟器上。

    对话框

    我也无法在 AS 1.4(稳定版)或 AS 2.0 预览版 9(金丝雀、ATM)中重现您的对话框问题。但是由于您的整个布局文件是DatePicker,我认为您不会获得太多好处。当您考虑到您的DatePicker 将显示在对话框中(“设计”选项卡无法模拟)时,这甚至更没有好处。我并不是说听起来很苛刻,但您可能只需要硬着头皮使用模拟器或物理设备。

    【讨论】:

      【解决方案2】:

      让你的 style.xml 看起来像这样,工具栏就会出现:

      <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
           <!-- Customize your theme here. -->
      </style>
      <style name="AppTheme.NoActionBar">
              <item name="windowActionBar">false</item>
              <item name="windowNoTitle">true</item>
      </style>
      

      您的 DatePicker 需要像这样:

      <DatePicker
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:datePickerMode="spinner"
          android:id="@+id/datePicker" />
      

      如果您在 xml 中需要 CalendarView,请添加以下 DatePicker

      <CalendarView
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:id="@+id/calendarView1" />
      

      【讨论】:

      • 好的,谢谢!我已经尝试过了,它解决了 Theme.AppCompat.Light.DarkActionBar,但是 DatePicker 仍然不可见。
      • 我添加了一个 P.S.部分
      • 添加 android:datePickerMode="spinner" 将解决您的问题。
      • 是的,但我不想要微调器。我希望日历视图可用于 Android 5.0
      【解决方案3】:

      糟糕的 Android Studio 1.5.0 应该更新到 1.5.1。这么简单

      【讨论】: