Tło
Activity
za jeden Acivity
uwagę jeśli tematyka pierwszym tle Activity w zależności od jego AndroidManifest.xml
jest dialog; w przeciwnym razie Android OS będzie nie narysować za nim Activity
(prawdopodobnie w celu zaoszczędzenia pamięci, ponieważ zwykle nie będzie widoczna).
Aby to wykorzystać, ustawiamy temat naszej Acitvity
do dialogu w manifeście, dzięki Android OS narysować Activity
za nim, ale później, programowo ustawić naszego tematu Activity
„s do tego, co nam się podoba w czasie wykonywania.
Tutorial
Krok 1: utworzyć dwa niestandardowe tematy dla aplikacji w styles.xml
. Jeden dla zwykłych czynności, a drugi dla działań dialogowych. Ważne jest, aby niestandardowy motyw okna dziedziczył z motywu podstawowego, który również jest dialogiem. W moim przypadku tematem nadrzędnym jest Base.Theme.AppCompat.Light.Dialog.FixedSize
). Oto moja styles.xml
:
<resources>
<!-- custom normal activity theme -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
</style>
<!-- custom dialog activity theme -->
<style name="AppTheme.Dialog" parent="Base.Theme.AppCompat.Light.Dialog.FixedSize">
<!-- removing the dialog's action bar -->
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
</resources>
Krok 2: w AndroidManifest.xml
ustaw tematem Activity
mowa z każdym tematem dialogowego. To sprawia, że Android OS myśli, że Activity
jest oknem dialogowym, więc narysuje za nim Activity
, a nie go zamazuje. W moim przypadku użyłem Theme.AppCompat.Dialog
. Poniżej jest moje AndroidManifest.xml
:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.eric.questiondialog_artifact">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
<activity
android:name=".DialogActivity"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Dialog"> <-- IMPORTANT!!! -->
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
Krok 3: w rzeczywistej aktywności ustawić motyw programowo albo do tematu normalnej działalności lub tematu dla okien dialogowych.Moja DialogActivity.java
jest poniżej:
package com.example.eric.questiondialog_artifact;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
public class DialogActivity extends AppCompatActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
setTheme(R.style.AppTheme_Dialog); // can either use R.style.AppTheme_Dialog or R.style.AppTheme as deined in styles.xml
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dialog);
}
}
Prawdopodobnie duplikat: http://stackoverflow.com/questions/1979369/android-activity-as-a-dialog. Może być również zainteresowany: https://github.com/pingpongboss/StandOut –
@NguyenDoanTung dziękuję. Widziałem też ten post, ale większość z tych odpowiedzi wymaga modyfikacji "AndroidManifest.xml", którego nie chcę robić. Próbowałem pierwszej metody wspomnianej w http://stackoverflow.com/a/22216966/2898715, ale nie dało zadowalających wyników, jak wspomniano w moim pytaniu. Ponadto, dziękuję za link github, sprawdziłem to, jednak mam nadzieję, że istnieje prostsze rozwiązanie. – Eric