2016-03-07 37 views
7

Soru

Nasıl Activityso that it looks like a dialog temasını belirler (AndroidManifext.xml dokunmadan) programlama birini yapar?Bir aktivitenin bir diyalog gibi nasıl programlanacağı

Not: Normal bir etkinlik veya iletişim kutusu gibi görünmesi arasında geçiş yapmak için değiştirilmesinin gerekmediği sürece, AndroidManifext.xml'u değiştirmeyle sorun yaşıyorum.

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 
    } 
} 

Ama blacking out everything in the background biter: Çok denedim ne

kadar

Ben this stackoverflow answer uyarınca aşağıdaki çalıştı.

Ben de this stackoverflow answer gördü ve çalıştı:

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)); 
    } 
} 

ama everything black hale biter.

Ne yapar? Teşekkür ederim. onun AndroidManifest.xml göre ön etkinliğin teması bir iletişim ise

+0

Muhtemelen kopyalar: http://stackoverflow.com/questions/1979369/android-activity-as-a-dialog. Şunlarla da ilgilenebilirsin: https://github.com/pingpongboss/StandOut –

+0

@NguyenDoanTung teşekkür ederim. Bu mesajı da gördüm, ancak bu cevapların çoğu yapmak istemediğim AndroidManifest.xml dosyasını değiştirmeyi içeriyor. Http://stackoverflow.com/a/22216966/2898715 adresinde belirtilen ilk yöntemi denedim, ancak bu soruda belirtildiği gibi tatmin edici sonuçlar vermedi. Ayrıca, github bağlantısı için teşekkürler, ben kontrol ettim, ancak gerçekten daha basit bir çözüm olduğunu umuyorum. – Eric

cevap

8

Arka Plan

bir Acivity arkasında Activity çekilir; aksi halde android işletim sistemi,'un 'unun arkasında Activity değerini çekmeyecektir (muhtemelen bellekte saklanmakta, çünkü bu genellikle zaten görülmeyecektir).

bu istismar için, android os arkasında Activity çizmek yapma manifest'te bizim Acitvity bir iletişim temasını belirler, ancak daha sonra, programlama biz zamanında ne gibi bizim Activity 'nin temasını ayarlayın.

Eğitimi

Adım 1:styles.xml uygulamanız için iki özel temalar oluşturun. Normal aktivitelerden biri, diğeri ise diyalog aktiviteleri için. Özel diyalog temasının, aynı zamanda bir diyalog olan bir temel temadan miras alması önemlidir. Benim durumumda, ana tema Base.Theme.AppCompat.Light.Dialog.FixedSize). İşte benim styles.xml geçerli:

<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> 

Adım 2: AndroidManifest.xml yılında, herhangi bir iletişim temaya söz konusu Activity temasını belirler. Bu android os yapar Activity bir diyalog olduğunu düşünün, bu yüzden onun arkasında Activity çizecek ve siyah dışarı değil. Benim durumumda, Theme.AppCompat.Dialog kullanmıştım. Aşağıda benim AndroidManifest.xml geçerli:

<?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> 

Adım 3: fiili aktivitede normal faaliyetleri için tema veya iletişim kutuları için tema birine programlama yoluyla tema ayarlayın.Benim DialogActivity.java aşağıdaki gibidir:

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); 
    } 
} 
+1

awsome !!! setTheme (R.style.AppTheme_Dialog); 'gerçekten çok önemli bir teşekkür! – Phoenix

1

etkinlik için şeffaf arka plan ile sadece bir tema ne arıyorsanız, sadece bu kullanın:

<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> 

sizin AndroidManifest da etkinlik için bu stil uygulamak dosya ve bu

0

önce bu kodu deneyin olan 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_DEVICE_DEFAULT_DARK); //Dark 


Dialog ID = new AlertDialog.Builder(this,AlertDialog.THEME_HOLO_LIGHT); 

Exmaple

pragmatik

için bu kodları deneyin Dialog ID = new AlertDialog.Builder(this,AlertDialog.THEME_TRADITIONAL);

KITKAT tema için bu deneyin Eski tema için bu deneyin