他のアクティビティの上に透明なアクティビティを作成したいです。
どうすればこれを達成できますか?
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>
こんなふうになります:
<activity Android:name=".usual.activity.Declaration" Android:theme="@Android:style/Theme.Translucent.NoTitleBar" />
「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>
以下のようにマニフェストであなたの活動を宣言してください。
<activity
Android:name=".yourActivity"
Android:theme="@Android:style/Theme.Translucent.NoTitleBar.Fullscreen"/>
また、レイアウトに透明な背景を追加してください。
プロジェクトのAndroidマニフェストファイルで透明にするアクティビティに半透明のテーマを割り当てます。
<activity
Android:name="YOUR COMPLETE ACTIVITY NAME WITH PACKAGE"
Android:theme="@Android:style/Theme.Translucent.NoTitleBar" />
マニフェストのactivityタグにAndroid:theme="@Android:style/Theme.Translucent"
を追加するだけで、2.3.3でこれを達成しました。
私はより低いバージョンについて知りません….
私は新しいAndroid開発者でもあるので、これに少し追加したいと思いました。受け入れられた答えは素晴らしいです、しかし私はいくつかの問題にぶつかりました。 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"を探すことを意味していることはわかりませんでした。私は他の誰かを助けるために私もこれに言及するべきだと思いました。
私の場合は、いくつかの条件に基づいて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時間立ち往生しました。
onCreate 関数の setContentView の下に、次の行を追加します。
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
アクティビティの背景画像を透明にしてください。またはXMLファイルにテーマを追加します。
<activity Android:name=".usual.activity.Declaration" Android:theme="@Android:style/Theme.Translucent.NoTitleBar" />
私が見つけた最も簡単な方法は、AndroidManifestのアクティビティのテーマをAndroid:theme="@Android:style/Theme.Holo.Dialog"
に設定することです。
次に、アクティビティのonCreateメソッドでgetWindow().setBackgroundDrawable(new ColorDrawable(0));
を呼び出します。
ダイアログ活動のためにこれを使います
getWindow().getDecorView().setBackgroundResource(Android.R.color.transparent);
ただし、アクティビティ内のメインビューを非表示に設定する必要もあります。そうでなければ、背景は見えなくなりますが、その中のすべてのビューは見えます。
私はちょうど2つのことをしました、そしてそれは私の活動を透明にしました。それらは以下です。
マニフェストファイルで、 activity /タグに次のコードを追加しました。
Android:theme="@Android:style/Theme.Translucent.NoTitleBar.Fullscreen"
そしてそのアクティビティのメインレイアウトの背景を " #80000000 "に設定しただけです。好き
Android:background="#80000000"
それは私にとっては完璧に機能します。
半透明のテーマを割り当てます
Android:theme="@Android:style/Theme.Translucent.NoTitleBar"
Theme.NoDisplay
を使用しても機能しますが、古いAndroidデバイスでのみ有効です。 Android 6.0以降では、finish()
内でonCreate() (or, technically, before onResume())
を呼び出さずにTheme.NoDisplayを使用すると、アプリケーションに crash _となります。これが、推奨が_ Theme.Translucent.NoTitleBar
を使用することになっている理由です。これは、この制限の影響を受けません。」
上記の回答に加えて:
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" />
注意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>
これらの答えはすべて紛らわしいかもしれませんが、TransparentアクティビティとNone UIアクティビティには違いがあります。
これを使用して:
Android:theme="@Android:style/Theme.Translucent.NoTitleBar"
アクティビティを透明にしますが、UIはブロックします。
これを使用するよりもNone UIアクティビティが必要な場合:
Android:theme="@Android:style/Theme.NoDisplay"
透明にする必要があるマニフェストファイルのactivityタグに次の行を追加するだけです。
Android:theme="@Android:style/Theme.Translucent"
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"
もっと詳しく知りたい方はこちら 記事