更改应用程序以使用 AppCompat 后视图消失

Views gone after changing app to use AppCompat

以前,我的应用程序根本不使用 AppCompat,但现在我需要它,因为有几个库需要它。问题是,在我开始使用 AppCompat 之后,一些 ViewsImageViewSeekBar)没有显示:

改变的是我现在使用 v7 支持库中的 AppCompatActivity(而不是 Activity)和 Theme.AppCompat.Light.DarkActionBar(而不是 android:Theme.Holo.Light.DarkActionBar)。

布局层次结构如下:

我知道这很复杂,但这是我能够实现我想要的目标的唯一方法。 (使用 foreground FrameLayout,这样我可以在打开特定弹出对话框时使应用程序的其余部分变暗。网格是通过使用多个 LinearLayouts 实现的。要获得垂直 SeekBars,我需要使用里面有SeekBar的FrameLayout,然后旋转一下,红色和蓝色"tiles"其实是FButtons)

我该如何解决这个问题?由于嵌套视图太多,我看不到 ImageButtons 和 SeekBar 的原因是什么?

我可以重现这个问题,这太奇怪了。 但是我设法通过将 android:elevation="2dp" 添加到 ImageView 的 RelativeLayout 中来显示 ImageViewsSeekBar。我知道这不是解决方案,此外此属性适用于 Android API >= 21.

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:elevation="2dp">
        // ImageViews and SeekBar here
        ...
</RelativeLayout>


另一种解决方法,但在 API 21 之前和之上有效。 在模拟器上测试 API 18.

将此放入您的 value/styles.xml:

<style name="my_style">
    // let this empty
</style>

将此放入您的 value-v21/styles.xml:

<style name="my_style">
    <item name="android:elevation">5dp</item> // above 2dp apparently...
</style>

然后将 style="@style/my_style" 添加到 每个 RelativeLayout 我在第一个答案中谈到。

<RelativeLayout
    style="@style/my_style"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
        // ImageViews and SeekBar here
        ...
</RelativeLayout>

在进一步挖掘时,我发现