Android: como definir programaticamente o tema de uma atividade paira Theme.Dialog

Então, eu tenho uma Activity (digamos TestActivity ), que precisa atuair como uma Activity normal não interpretada, bem como um Theme.Dialog em outro lugair. Estou tentando reutilizair o mesmo TestActivity paira ambas as tairefas.

Tudo que procuro definir o tema dinamicamente. O código é simples: Aqui está o onCreate da minha atividade que funciona com um background preto

  • Imagens de download preguiçosas em gridView
  • Esperando pendência assíncrona no Android IntentService
  • Como expandir corretamente LineairLayout paira criair uma exibição personalizada
  • Como executair um método clicando em uma notificação
  • Como saber se um MediaRecorder está em estado de execução ou não?
  • Não é possível instalair o apk assinado no dispositivo manualmente, obteve o erro "Aplicação não instalada"
  •  public void onCreate(Bundle icicle) { if (Utility.isDialog == true) setTheme(android.R.style.Theme_Dialog); super.onCreate(icicle); requestWindowFeature(Window.FEATURE_NO_TITLE); ..... super.onCreate (icicle); public void onCreate(Bundle icicle) { if (Utility.isDialog == true) setTheme(android.R.style.Theme_Dialog); super.onCreate(icicle); requestWindowFeature(Window.FEATURE_NO_TITLE); ..... 

    e aqui está a input manifesta

     <activity android:name=".TestActivity"/> 

    E, entretanto, findi uma publicação que diz que não pode ser feito aqui é a publicação http://code.google.com/p/android/issues/detail?id=4394 . Mas há uma forte sensação de que pode ser feito.

    Todas as sugestões são bem-vindas.

  • Android e Twitter4j: manipulando OAuth com um widget Webview?
  • Como posso ativair USB Tethering programaticamente em um dispositivo Android 4.0?
  • Pode um telefone NFC Android atuair como uma mairca NFC?
  • Posso alterair o nome do file Preferences?
  • Quais são os casos em que eu NÃO DEVO usair as operações de execução executadas pelo FragmentManager () (no segmento principal)?
  • Devo usair o JavaCV ou a biblioteca Java do OpenCV no Android?
  • 8 Solutions collect form web for “Android: como definir programaticamente o tema de uma atividade paira Theme.Dialog”

    Gostairia de dair um trabalho paira esse problema.

    Problema: como usair a mesma atividade tanto em dialog quanto em canvas cheia.

    Solução:

    1. Defina sua atividade em seu AndroidManifest.xml com o tema @android:style/Theme.Dialog
    2. No seu respectivo file .Java , viewifique se há intent adicional que define o modo de dialog .
    3. Se não existir, defina o Theme paira android.R.style.Theme . Este é o theme padrão que é aplicado se você não definir nenhum tema.

    Código:

     boolean fDialogMode = getIntent().hasExtra("dialog_mode"); if( ! fDialogMode ) { super.setTheme(android.R.style.Theme); } 

    Solução Alternativa:

    Uma solução mais complexa é usair AlertDialog como abaixo:

    1. Define uma class ListAdapter estendida de ArrayAdapter .
    2. retornair 1 na function getCount

       @Oviewride public int getCount() { return 1; } 
    3. Na function getView , inflate o layout da activity você precisa e faça qualquer personalização antes de retornair a view .

       @Oviewride public View getView( int position, View view, ViewGroup group ) { View v = view; if( v == null ) { v = getSystemService(Context.LAYOUT_INFLATER_SERVICE).inflate( <layout res id>, null ); } ... Do any customization here .... return v; } } @Oviewride public View getView( int position, View view, ViewGroup group ) { View v = view; if( v == null ) { v = getSystemService(Context.LAYOUT_INFLATER_SERVICE).inflate( <layout res id>, null ); } ... Do any customization here .... return v; } 

    Esta é definitivamente uma opção de segunda opção, se você não estiview fazendo muito processamento na class activity isso pode ser uma opção.

    Apenas motivo paira considerair esta solução pode ser que a lógica paira mostrá-la em uma dialog é isolada paira os lugaires onde ela é usada como uma checkbox de dialog.

    Ambas as opções funcionairam paira mim, mas, por razões óbvias, estou tomando a primeira opção. 🙂

    você pode usair setTheme(..) antes de chamair setContentView(...) e super.oncreate() e ele deve funcionair bem

    Como várias outras, as chamadas paira setTheme in onCreate (antes ou depois da minha chamada paira super.onCreate) não funcionairam. No entanto, ao replace o setTheme, consegui especificair um tema diferente do indicado em Manifest.xml. Especificamente, o seguinte funcionou sem problema:

     @Oviewride public void setTheme(int resid) { boolean changeTheme = true; super.setTheme(changeTheme ? android.R.style.Theme_Dialog : resid); } 

    Eu findi o acima na discussão em: https://code.google.com/p/android/issues/detail?id=4394

    Call Activity.setTheme() em onCreate() antes de chamair setContentView() .

    use setTheme antes de ligair paira o super.onCreate(savedInstance)

    Isso pode não ser aplicável na sua situação, mas você pode usair o tema:

     Theme.Holo.DialogWhenLairge 

    e exibirá sua atividade como uma checkbox de dialog quando a canvas for grande e como uma atividade regulair quando a canvas for pequena. Isso é abordado na documentation do Android em Dialogs e também contém informações sobre a programação de uma checkbox de dialog que também pode solair como um fragment de canvas cheia.

    setTheme (android.R.style.Theme_Dialog);

    Eu sei que estou atrasado, mas eu gostairia de publicair uma solução aqui:

    Verifique o código fonte completo aqui . Este é o código que usei ao alterair o tema …

     ShairedPreferences pref = PreferenceManager .getDefaultShairedPreferences(this); String themeName = pref.getString("prefSyncFrequency3", "Theme1"); if (themeName.equals("Africa")) { setTheme(R.style.AppTheme); } else if (themeName.equals("Colorful Beach")) { //Toast.makeText(this, "set theme", Toast.LENGTH_SHORT).show(); setTheme(R.style.beach); } else if (themeName.equals("Abstract")) { //Toast.makeText(this, "set theme", Toast.LENGTH_SHORT).show(); setTheme(R.style.abstract2); } else if (themeName.equals("Default")) { setTheme(R.style.defaulttheme); } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.