【问题标题】:Android how to get AppCompat.Translucent type theme with support actionbar?Android 如何获取支持操作栏的 AppCompat.Translucent 类型主题?
【发布时间】:2014-01-18 16:18:44
【问题描述】:

我想将支持操作栏添加到我的一项活动中,我之前一直在使用 theme.translucent 进行此活动,但为了使支持操作栏工作,我需要继承 Theme.AppCompat,我需要在这个活动中保持一个半透明的主题,但不幸的是没有我可以默认看到的 Theme.AppCompat.translucent,有什么办法可以做到这一点?

【问题讨论】:

    标签: android android-actionbar android-theme android-actionbar-compat


    【解决方案1】:

    您可以从themes.xml 创建一组与Theme.Translucent 具有相同属性的新样式。

    将以下内容添加到您的 styles.xml 文件中:

    <style name="Theme.AppCompat.Translucent">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:colorBackgroundCacheHint">@null</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowAnimationStyle">@android:style/Animation</item>
    </style>
    

    如果您想从主题继承其他内容(例如对话框样式等),可以将前缀 Theme.AppCompat 更改为其他名称。例如,Theme.AppCompat.Light.Translucent 之类的名称将具有 Light 主题的属性。

    要使用新样式,请将主题属性设置为@style/Theme.AppCompat.Translucent

    <activity
        android:name=".TranslucentActivity"
        android:theme="@style/Theme.AppCompat.Translucent" >
    </activity>
    

    【讨论】:

    • 想给一个activity添加一个Alertbox,但是又想有一个半透明的ctivity,这是一个完美的解决方案。添加了另一个建议作为对现有答案的更新。
    • 定义的主题有一个问题。当我将上述主题应用于 时,方向不起作用,但如果我删除上述主题,方向正常工作。
    • 但我在透明活动中得到黑色工具栏。请帮我修复我的错误。
    • 这不好,将所需属性添加到(例如)&lt;style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"&gt;... 的正确方法我已将&lt;item name="android:windowIsTranslucent"&gt;true&lt;/item&gt; 添加到我的 AppCompat 主题中,因此应用启动时没有白色背景
    • 这仍然显示操作栏。要消除操作栏,只需添加一个父项,例如:
    【解决方案2】:

    参数,

    <style name="Theme.AppCompat.Translucent" parent="Theme.AppCompat.NoActionBar">
            <item name="android:windowNoTitle">true</item>
            <item name="android:windowBackground">@android:color/transparent</item>
            <item name="android:colorBackgroundCacheHint">@null</item>
            <item name="android:windowIsTranslucent">true</item>
            <item name="android:windowAnimationStyle">@android:style/Animation</item>
        </style>
    

    如果您希望工具栏消失,这应该是样式标题。您可以使用任何具有 NoActionBar 的父主题来实现其他效果。

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      如果我们将 Translucent 用于透明活动。 它引发了其他问题 - Msgbox 的颜色(现在是白色以前是黑色),默认对话框颜色,微调器确实下拉但不显示下划线和下拉箭头。微调器颜色为黑色,文本为黑色;下拉白色下拉文字黑色等。 为了克服这个问题,你可以使用下面的代码

      时尚

      <style name="Theme.AppCompat.Transparent.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
          <item name="android:windowIsTranslucent">true</item>
          <item name="android:windowBackground">@android:color/transparent</item>
       <item name="android:windowContentOverlay">@null</item>
          <item name="android:windowNoTitle">true</item>
          <item name="android:windowIsFloating">false</item>
          <item name="android:backgroundDimEnabled">false</item>
      </style>
      

      在清单文件中

      <activity
              android:name=".activity.YourActivityName"
              android:theme="@style/Theme.AppCompat.Transparent.NoActionBar" />
      

      我希望它会有所帮助 谢谢

      【讨论】:

      • 感谢您的帮助
      • 我使用stackoverflow.com/a/21492572/5199061 来创建透明活动,但我遇到了颜色不同的问题。但是这个答案帮助我摆脱了@Monika在答案中提到的颜色不同的问题。谢谢
      • uggh,这些解决方案似乎都不起作用了,我一直在黑屏。
      【解决方案4】:

      Cameron 的回答是 nice hack,但它产生了一个浮动操作栏并为我的状态栏着色,这是我不想要的。所以我添加了更多 xml 属性以使状态栏透明(对于 sdk >=19)并使用 java 代码使操作栏不可见。

      mainActivity.java:

      public class MainActivity extends AppCompatActivity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              getSupportActionBar().hide();
           ...
          }
           ...
      }
      

      styles.xml

      <style name="AppTheme.TranslucentBG">
          <item name="android:windowNoTitle">true</item>
          <item name="android:windowBackground">@android:color/transparent</item>
          <item name="android:colorBackgroundCacheHint">@null</item>
          <item name="android:windowIsTranslucent">true</item>
          <item name="android:windowAnimationStyle">@android:style/Animation</item>
      
          <item name="android:windowTranslucentStatus">true</item>
          <item name="android:windowTranslucentNavigation">true</item>
      
      </style>
      

      manifest.xml

      <application
          android:icon="@mipmap/ic_launcher"
          ...
          android:theme="@style/AppTheme"
          ...
          >
      
      
          <activity android:name=".MainActivity"
              android:theme="@style/AppTheme.TranslucentBG"
              ...
              >
              ...
          </activity>
      </application>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多