как программно тема деятельности, чтобы быть как диалог?
вопрос
как это сделать программно (не касаясь AndroidManifext.xml) выберите тему Activity так что это выглядит как диалог?
Примечание: я в порядке с изменением AndroidManifext.xml до тех пор, пока его не нужно изменять, чтобы переключаться между тем, чтобы он выглядел как нормальное действие или диалог.
что я пробовал до сих пор
я попробовал следующее В соответствии с этот stackoverflow ответ:
public class DialogActivity extends Activity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        setTheme(android.R.style.Theme_DeviceDefault_Dialog);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dialog);
        Log.d(TAG,"Build.VERSION.SDK_INT: "+Build.VERSION.SDK_INT); // 23
    }
}
но это заканчивается затемнение все в фоновом режиме.
Я тоже видел этот ответ stackoverflow, и попытался:
public class DialogActivity extends Activity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        setTheme(android.R.style.Theme_DeviceDefault_Dialog);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dialog);
        getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
    }
}
но это в конечном итоге сделать все черный.
что делать? Спасибо.
3 ответов
фон
на Activity за Acivity рисуется, если тема переднего плана деятельности в соответствии с его AndroidManifest.xml - это диалог, в противном случае ОС Android будет не рисовать Activity за ним (вероятно, для сохранения памяти, так как он обычно не будет виден в любом случае).
чтобы использовать это, мы установили тему нашего Acitvity в диалоговом окне манифеста, что делает Android os рисовать Activity за ним, но позже, программно установите наш Activity'ы тема для всего, что нам нравится во время выполнения.
пример на github
я сделал пример и поставил его на github.
учебник
Шаг 1: создайте две пользовательские темы для вашего приложения в styles.xml. Один для обычных действий, а другой для диалоговых действий. Важно, чтобы пользовательская тема диалогового окна наследовала от базовой темы, которая также является диалоговым окном. В моем случае родительская тема Base.Theme.AppCompat.Light.Dialog.FixedSize). Вот мой 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>
Шаг 2: на AndroidManifest.xml задайте тему Activity в любом диалоге темы. Это заставляет ОС android думать, что Activity - это диалог, поэтому он будет привлечь Activity позади него, а не затемнить его. В моем случае я использовал Theme.AppCompat.Dialog. Ниже мой 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>
Шаг 3: в фактической деятельности установите тему программно либо тему для нормальной деятельности, или тема для диалогов. Мой DialogActivity.java ниже:
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);
    }
}
если то, что вы ищете, - это просто тема с прозрачным фоном для вас, просто используйте это:
<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>
примените этот стиль к вашей деятельности в вашем файле AndroidManifest, и это он
попробуйте этот код перед dailog.setMessage(...);
Dialog id  = new AlertDialog.Builder(this,AlertDialog.THEME_DEVICE_DEFAULT_DARK);
Dialog ID = new AlertDialog.Builder(this,AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);
//Default theme 
попробуйте это для старой темы
Dialog ID = new AlertDialog.Builder(this,AlertDialog.THEME_TRADITIONAL);
попробуйте эти для KITKAT theme
Dialog ID = new AlertDialog.Builder(this,AlertDialog.THEME_DEVICE_DEFAULT_DARK); //Dark
Dialog ID = new AlertDialog.Builder(this,AlertDialog.THEME_HOLO_LIGHT);
попробуйте эти коды для прагматически
Exmaple
    dialog = new AlertDialog.Builder(this);
            dialog = new AlertDialog.Builder(this,AlertDialog.THEME_DEVICE_DEFAULT_DARK);
            dialog.setTitle("HAI");
            dialog.setMessage("look");
            dialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
Toast toast= Toast.makeText(getApplicationContext(), "This is exmaple theme", Toast.LENGTH_LONG);