活动应该是透明的,但背景为黑色

Uwe*_*ass 7 android android-layout

我的用例是为横向相机预览编写覆盖控制器活动.我按照几个教程中的说明编写了一个透明的主题.

所以我的res/values/style.xml看起来像这样:

<resources>

  <style name="Theme" parent="android:Theme" />

  <style name="Theme.Transparent">
      <item name="android:windowBackground">@drawable/transparent_background</item>
  </style>

  <drawable name="transparent_background">#00000000</drawable>

</resources>
Run Code Online (Sandbox Code Playgroud)

活动代码段:

    <activity android:name=".CameraPreview"
       android:label="Camera"
       android:screenOrientation="landscape"
       android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".Controlls"
              android:label="Controlls"
              android:screenOrientation="portrait"
              android:theme="@android:style/Theme.Translucent">
    </activity>
Run Code Online (Sandbox Code Playgroud)

当我从根活动开始此活动时,布局被正确绘制,但背景保持黑色.我尝试使用@android:style/Theme.Translucent,但是这个主题继承了调用活动(横向)的方向,这不是我想要的.

编辑:

保持相机预览的应用程序设置为横向视图,因为它不能以纵向正确显示预览.(参见旧的谷歌bug报告)

我想要做的是在相机表面支架前面为用户交互界面设置一个独立的活动(此活动应设置为"纵向",或者更好地设置为"传感器")

Mar*_*ark 6

对于其他有类似问题的人来说,这是一个有点相关的答案。

tl;dr
添加名称为现有样式后缀的新样式可能会导致问题(例如使透明活动具有黑屏)。


问题:在进行大型重构后,我们的透明活动背景变成了黑色。 (该活动已经使用透明主题。)

经过几个小时的提交后,我发现了问题的原因。在我们的应用程序中,我们使用 CSS 等样式。我们将这样的现有样式应用于 TextView。

<style name="HeadLine.SM.White.MyFontBold">
    <item name="android:fontFamily">@font/some_bold_font</item>
</style>
Run Code Online (Sandbox Code Playgroud)

样式的非粗体变体作为粗体变体之前的样式添加,如下所示。

//This style was added
<style name="HeadLine.SM.White.MyFont">
    <item name="android:fontFamily">@font/some_font</item>
</style>

<style name="HeadLine.SM.White.MyFontBold">
    <item name="android:fontFamily">@font/some_bold_font</item>
</style>
Run Code Online (Sandbox Code Playgroud)

由于某种原因,添加非粗体样式变体后,所有透明活动都会出现黑屏。当我们将非粗体变体样式名称更改为其他名称时,它解决了我们的问题。现在我们的样式看起来像这样(我知道有更好的方法来处理字体样式 - 这些样式已经有几年了)

<style name="HeadLine.SM.White.MyFontRegular">
    <item name="android:fontFamily">@font/some_font</item>
</style>

<style name="HeadLine.SM.White.MyFontBold">
    <item name="android:fontFamily">@font/some_bold_font</item>
</style>
Run Code Online (Sandbox Code Playgroud)

结论

添加名称是现有样式后缀的新样式似乎会引起问题。如果您要添加新样式,请确保该名称不是现有样式的后缀。

我们确实尝试清理构建、重建和使 Android Studio 缓存失效。这些都没有解决我们的问题。


Com*_*are 2

@android:style/Theme.Translucent根据这篇博客文章,尝试使用内置的而不是自定义的。我自己没有尝试过这样做,所以我不知道那里写的技术是否有效。