web-dev-qa-db-ja.com

Androidで透明なアクティビティを作成する方法

他のアクティビティの上に透明なアクティビティを作成したいです。

どうすればこれを達成できますか?

842
UMAR

res/values/styles.xmlファイルに次のスタイルを追加します(持っていない場合は作成します)。これで完成したファイルになります。

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="Theme.Transparent" parent="Android:Theme">
    <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">true</item>
    <item name="Android:backgroundDimEnabled">false</item>
  </style>
</resources>

(値@color/transparentは、私が#00000000ファイルに入れたカラー値res/values/color.xmlです。また、それ以降のAndroidバージョンでは@Android:color/transparentを使用することもできます。)

次に、あなたの活動にスタイルを適用します。例えば:

<activity Android:name=".SampleActivity" Android:theme="@style/Theme.Transparent">
...
</activity>
1297
gnobal

こんなふうになります:

<activity Android:name=".usual.activity.Declaration" Android:theme="@Android:style/Theme.Translucent.NoTitleBar" />
187
yanchenko

「AppCompat」ライブラリまたは「Android Design Support Library」では、少し異なります。

Styles.xmlでは、次のようになります。

<style name="Theme.AppCompat.Translucent" parent="Theme.AppCompat.NoActionBar">
    <item name="Android:background">#33000000</item> <!-- Or any transparency or color you need -->
    <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>

AndroidManifest.xmlで、次のようにします。

<activity
    Android:name=".WhateverNameOfTheActivityIs"
    Android:theme="@style/Theme.AppCompat.Translucent">
    ...
</activity>
106
Andrey

以下のようにマニフェストであなたの活動を宣言してください。

 <activity   
     Android:name=".yourActivity"    
     Android:theme="@Android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>

また、レイアウトに透明な背景を追加してください。

35
Deepak Swami

プロジェクトのAndroidマニフェストファイルで透明にするアクティビティに半透明のテーマを割り当てます。

<activity
    Android:name="YOUR COMPLETE ACTIVITY NAME WITH PACKAGE"
    Android:theme="@Android:style/Theme.Translucent.NoTitleBar" />
27
Jigar Pandya

マニフェストのactivityタグにAndroid:theme="@Android:style/Theme.Translucent"を追加するだけで、2.3.3でこれを達成しました。

私はより低いバージョンについて知りません….

15
androabhay

私は新しいAndroid開発者でもあるので、これに少し追加したいと思いました。受け入れられた答えは素晴らしいです、しかし私はいくつかの問題にぶつかりました。 colors.xmlファイルに色を追加する方法がわかりませんでした。これがどのように行われるべきかです:

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
     <color name="class_zero_background">#7f040000</color>
     <color name="transparent">#00000000</color>
</resources>

私のオリジナルのcolors.xmlファイルには、 "drawable"というタグがありました。

<drawable name="class_zero_background">#7f040000</drawable>

そのため、色についても同じことを行いましたが、 "@ color /"参照がXMLのタグ "color"を探すことを意味していることはわかりませんでした。私は他の誰かを助けるために私もこれに言及するべきだと思いました。

15

私の場合は、いくつかの条件に基づいてJavaでランタイムにテーマを設定する必要があります。それで私はスタイルで一つのテーマを作成しました(他の答えと同様に):

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="Theme.Transparent" parent="Android:Theme">
    <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">true</item>
    <item name="Android:backgroundDimEnabled">false</item>
  </style>
</resources>

それからJavaで私はそれを私の活動に適用しました:

@Override
    protected void onCreate(Bundle savedInstanceState) {

        String email = getIntent().getStringExtra(AppConstants.REGISTER_EMAIL_INTENT_KEY);
        if (email != null && !email.isEmpty())
        {
            // We have the valid email ID, no need to take it from user, prepare transparent activity just to perform bg tasks required for login
            setTheme(R.style.Theme_Transparent);
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);

        }
        else
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_dummy);


    }

覚えておいてください 重要なポイント ここ:setTheme()の前にsuper.onCreate(savedInstanceState);関数を呼び出さなければなりません。なぜ私のテーマが実行時に反映されないのかを考えて、私はこの点を逃して2時間立ち往生しました。

11
Gem

onCreate 関数の setContentView の下に、次の行を追加します。

getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
7
Leebeedev

アクティビティの背景画像を透明にしてください。またはXMLファイルにテーマを追加します。

<activity Android:name=".usual.activity.Declaration" Android:theme="@Android:style/Theme.Translucent.NoTitleBar" />
7
jian

私が見つけた最も簡単な方法は、AndroidManifestのアクティビティのテーマをAndroid:theme="@Android:style/Theme.Holo.Dialog"に設定することです。

次に、アクティビティのonCreateメソッドでgetWindow().setBackgroundDrawable(new ColorDrawable(0));を呼び出します。

6
Drew Leonce

ダイアログ活動のためにこれを使います

getWindow().getDecorView().setBackgroundResource(Android.R.color.transparent);

ただし、アクティビティ内のメインビューを非表示に設定する必要もあります。そうでなければ、背景は見えなくなりますが、その中のすべてのビューは見えます。

5
Pavel Kataykin

私はちょうど2つのことをしました、そしてそれは私の活動を透明にしました。それらは以下です。

  1. マニフェストファイルで、 activity /タグに次のコードを追加しました。

    Android:theme="@Android:style/Theme.Translucent.NoTitleBar.Fullscreen"
    
  2. そしてそのアクティビティのメインレイアウトの背景を " #80000000 "に設定しただけです。好き

    Android:background="#80000000"
    

それは私にとっては完璧に機能します。

3
Md Sufi Khan

半透明のテーマを割り当てます

Android:theme="@Android:style/Theme.Translucent.NoTitleBar"
2
saurabh

2つの方法があります。

  1. Theme.NoDisplayを使う
  2. Theme.Translucent.NoTitleBarを使用する

Theme.NoDisplayを使用しても機能しますが、古いAndroidデバイスでのみ有効です。 Android 6.0以降では、finish()内でonCreate() (or, technically, before onResume())を呼び出さずにTheme.NoDisplayを使用すると、アプリケーションに crash _となります。これが、推奨が_ Theme.Translucent.NoTitleBarを使用することになっている理由です。これは、この制限の影響を受けません。」

2
Shubham Soni

上記の回答に加えて:

android Oreo関連のクラッシュを回避するために

<style name="AppTheme.Transparent" parent="@style/Theme.AppCompat.Dialog">
    <item name="windowNoTitle">true</item>
    <item name="Android:windowCloseOnTouchOutside">false</item>
</style>

<activity
     Android:name="xActivity"
     Android:theme="@style/AppTheme.Transparent" />
2
Zafer Celaloglu

注意1:Drawableフォルダにtest.xmlを作成し、次のコードをコピーします。

   <?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="rectangle" >

    <stroke Android:width="2dp" />

    <gradient
        Android:angle="90"
        Android:endColor="#29000000"
        Android:startColor="#29000000" />

    <corners
        Android:bottomLeftRadius="7dp"
        Android:bottomRightRadius="7dp"
        Android:topLeftRadius="7dp"
        Android:topRightRadius="7dp" />

</shape>

//注:角と形はあなたの要求通りです。

//注2:xmlを作成する

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:background="@drawable/test"
        Android:orientation="vertical" >

        <LinearLayout
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:layout_weight="1.09"
            Android:gravity="center"
         Android:background="@drawable/transperent_shape"
            Android:orientation="vertical" >
     </LinearLayout>
    </LinearLayout>
1
ManiTeja

これらの答えはすべて紛らわしいかもしれませんが、TransparentアクティビティとNone UIアクティビティには違いがあります。

これを使用して:

Android:theme="@Android:style/Theme.Translucent.NoTitleBar"

アクティビティを透明にしますが、UIはブロックします。

これを使用するよりもNone UIアクティビティが必要な場合:

Android:theme="@Android:style/Theme.NoDisplay"

0
Kashkashio

透明にする必要があるマニフェストファイルのactivityタグに次の行を追加するだけです。

Android:theme="@Android:style/Theme.Translucent"
0
Kanagalingam

AppCompatActivityを使用している場合は、これをstyles.xmlに追加します。

<style name="TransparentCompat" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <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>

manifestファイルでは、このテーマをアクティビティタグにこのように追加することができます

Android:theme="@style/TransparentCompat"

もっと詳しく知りたい方はこちら 記事

0
Zohab Ali