【问题标题】:Views gone after changing app to use AppCompat更改应用程序以使用 AppCompat 后视图消失
【发布时间】:2018-02-27 12:32:23
【问题描述】:

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

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

布局的层次结构如下:

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

我该如何解决这个问题?是因为嵌套视图太多,我没有看到 ImageButtons 和 SeekBar 的原因吗?

【问题讨论】:

  • 你能添加(或链接到)你的整个布局xml吗?我希望能够尝试在我自己的 IDE 中复制问题。
  • @PrimožKralj 以后,请编辑您的问题以包含布局的相关部分,而不是在评论中提供下载链接。查看您的 XML,ImageViews 将其visibility 设置为gone。你会从代码中更改它们吗?
  • 是的,ImageViews 的可见性是通过程序控制的。

标签: android android-layout android-appcompat


【解决方案1】:

我可以重现这个问题,这太奇怪了。 但是,我通过在 ImageView 的 RelativeLayout 中添加 android:elevation="2dp" 来显示 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>

在挖掘的过程中,我发现了this

【讨论】:

  • 嗯,这令人鼓舞,谢谢。我仍然需要 API
  • 感谢您的努力,但仍不完美。当FButton 处于按下状态时,RelativeLayout(包含 ImageViews 和 SeekBar)会消失(一旦不再按下就会重新出现)。
  • @PrimožKralj 我认为 Punchlag 正在解决您的问题。它绝对看起来像一个海拔问题。例如,在模拟器中,如果我使用 API 20 或更低版本显示,我会看到您消失的项目。对于 API 21+,我不知道。在 RelativeLayout 上设置高度可以解决它。您可能对按钮动画还有其他问题。查看this posting 看看这是否与您的问题有关。
  • @PrimožKralj 您似乎也遇到了 API 21 中实现的功能:StateListAnimator。要么设置android:stateListAnimator="@null",要么设置足够高的海拔以克服StateListAnimator 正在做的任何事情。 (6dp 似乎足够高了)。
  • 已解决。我的海拔是 5dp,这就是它不起作用的原因。将其设置为6dp后,它可以工作。此外,正如@Cheticamp 所写,将android:stateListAnimator="@null" 添加到FButton 也可以。谢谢大家
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
相关资源
最近更新 更多