Respostas:
Para iniciar a atividade como caixa de diálogo, eu a defini assim em AndroidManifest.xml
:
<activity android:theme="@android:style/Theme.Dialog" />
Use esta propriedade dentro de sua activity
tag para evitar que sua caixa de diálogo apareça na lista de aplicativos usados recentemente
android:excludeFromRecents="true"
Se você deseja impedir que sua caixa de diálogo / atividade seja destruída quando o usuário clica fora da caixa de diálogo:
Após o setContentView()
seu Activity
uso:
this.setFinishOnTouchOutside(false);
Agora, quando ligo, startActivity()
é exibido como uma caixa de diálogo, com a atividade anterior mostrada quando o usuário pressiona o botão Voltar.
Observe que se você estiver usando ActionBarActivity
(ou tema do AppCompat), será necessário usá-lo @style/Theme.AppCompat.Dialog
.
@style/Theme.AppCompat.Dialog
this.setFinishOnTouchOutside(false);
depois do setContentView()
método para impedir que a atividade seja destruída quando você clica fora da caixa de diálogo criada.
Use este código para que a atividade da caixa de diálogo não seja fechada quando o usuário tocar fora da caixa de diálogo:
this.setFinishOnTouchOutside(false);
requer API nível 11
Você pode definir esse estilo em values / styles.xml para executar um Splash mais antigo:
<style name="Theme.UserDialog" parent="android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:windowBackground">@drawable/trans</item>
</style>
E use-o AndroidManifest.xml:
<activity android:name=".SplashActivity"
android:configChanges="orientation"
android:screenOrientation="sensor"
android:theme="@style/Theme.UserDialog">
@drawable/trans
: você deve poder usar o @android:color/transparent
que criaria um ColorDrawable
para usar como plano de fundo.
<item name="windowNoTitle">true</item>
(não "android"). Veja aqui . Não tenho certeza sobre os outros itens.
1 - Você pode usar a mesma atividade que tanto a caixa de diálogo quanto a tela cheia, dinamicamente:
Ligue setTheme(android.R.style.Theme_Dialog)
antes de ligar setContentView(...)
e super.oncreate()
em sua Atividade.
2 - Se você não planeja alterar o estilo do tema da atividade, pode usar
<activity android:theme="@android:style/Theme.Dialog" />
(como mencionado por @faisal khan)
<activity android:theme="@android:style/Theme.Dialog" />
) e defina programaticamente o tema da atividade como um diálogo ou uma atividade no onCreate stackoverflow.com/a/35915764/2898715
Se você precisar da versão Appcompat
style.xml
<!-- Base application theme. -->
<style name="AppDialogTheme" parent="Theme.AppCompat.Light.Dialog">
<!-- Customize your theme here. -->
<item name="windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
</style>
yourmanifest.xml
<activity
android:name=".MyActivity"
android:label="@string/title"
android:theme="@style/AppDialogTheme">
</activity>
<item name="windowNoTitle">true</item>
para fazer o trabalho para mim. Eu também adicionei <item name="android:windowActionBar">false</item>
para uma boa medida.
<item name="android:windowNoTitle">true</item>
não funcionou (Android 5.0.1), e eu tive que mudar para<item name="windowNoTitle">true</item>
Se sua atividade estiver sendo renderizada como uma caixa de diálogo, basta adicionar um botão ao xml da sua atividade,
<Button
android:id="@+id/close_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Dismiss" />
Em seguida, anexe um ouvinte de clique no código Java da sua atividade. No ouvinte, basta chamarfinish()
Button close_button = (Button) findViewById(R.id.close_button);
close_button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
Isso deve descartar sua caixa de diálogo, retornando você à atividade de chamada.
Se você deseja remover o cabeçalho da atividade e fornecer uma exibição personalizada para a caixa de diálogo, adicione o seguinte ao bloco de atividades do seu manifesto
android:theme="@style/Base.Theme.AppCompat.Dialog"
e projete seu Activity_layout com a visualização desejada
Defina o tema no seu arquivo de manifesto do Android.
<activity android:name=".LoginActivity"
android:theme="@android:style/Theme.Dialog"/>
E defina o estado da caixa de diálogo ao toque para finalizar.
this.setFinishOnTouchOutside(false);
Criar atividade como caixa de diálogo. Aqui está um exemplo completo
AndroidManife.xml
<activity android:name=".appview.settings.view.DialogActivity" android:excludeFromRecents="true" android:theme="@style/Theme.AppCompat.Dialog"/>
DialogActivity.kt
class DialogActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_dialog)
this.setFinishOnTouchOutside(true)
btnOk.setOnClickListener {
finish()
}
}
}
activity_dialog.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#0072ff"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="@dimen/_300sdp"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/txtTitle"
style="@style/normal16Style"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="20dp"
android:paddingBottom="20dp"
android:text="Download"
android:textColorHint="#FFF" />
<View
android:id="@+id/viewDivider"
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="#fff"
android:backgroundTint="@color/white_90"
app:layout_constraintBottom_toBottomOf="@id/txtTitle" />
<TextView
style="@style/normal14Style"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="20dp"
android:paddingBottom="20dp"
android:text="Your file is download"
android:textColorHint="#FFF" />
<Button
android:id="@+id/btnOk"
style="@style/normal12Style"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_marginBottom="20dp"
android:background="@drawable/circle_corner_layout"
android:text="Ok"
android:textAllCaps="false" />
</LinearLayout>
</LinearLayout>
Algumas vezes você pode obter a exceção que é dada abaixo
Causado por: java.lang.IllegalStateException: você precisa usar um tema Theme.AppCompat (ou descendente) com esta atividade.
Então, para resolver, você pode usar uma solução simples
adicione o tema da sua atividade no manifesto como caixa de diálogo para appCompact.
android:theme="@style/Theme.AppCompat.Dialog"
Pode ser útil para alguém.