web-dev-qa-db-ja.com

AndroidアクションバーをサポートしてAppCompat.Translucentタイプのテーマを取得する方法は?

サポートアクションバーをアクティビティの1つに追加したいのですが、以前はこのアクティビティでtheme.translucentを使用していましたが、サポートアクションバーを機能させるためにTheme.AppCompatを継承する必要があり、半透明を維持する必要がありますこのアクティビティのテーマですが、残念ながら、デフォルトで見ることができるTheme.AppCompat.translucentはありませんが、これを行う方法はありますか?

61
Edmund Rojas

themes.xmlTheme.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>
146
Cameron Ketcham

パラマ、

<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を持つ親テーマを使用できます。

お役に立てれば

36
Dhaval Chheda

透明なアクティビティに半透明を使用する場合。それは他の問題を引き起こします-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" />

ありがとう

4
Monika

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>
2
user4831795