2010-11-09 32 views
10

Model iletişimini göstermenin herhangi bir yolu var mı - iletişim kutusundan önce kullanıcının ekranda olan her şeyle etkileşimde bulunmasına izin veren, ancak aynı zamanda kullanıcının iletişim kutusuyla iletişim kurması durumunda iletişim kurmasına olanak tanıyan bir iletişim kutusu var mı?zamana dayalı iletişim kutusu iletişim kutusu

Tostları biliyorum, ancak pop-up ile etkileşime izin vermiyorlar.

İletişim Kutularını biliyorum ancak modal ve arka planla etkileşime izin vermiyorlar.

Bildirimleri biliyorum, ancak ekranda görünmeyen bir şey istiyorum.

Temel olarak bir oyun ya da bir şey oynayabilmek istiyorum ve yeni bir e-posta veya bir şey olduğunu gösteren bir açılır pencere beliriyor. E-postamı görmek için tıklayabilirim, ancak oyunumu oynamaya devam etmek istersem, gitmesini bekleyebilirim. Android'de bu mümkün mü?

+0

size bildirimin yalnızca Faaliyet görünmesini istediğiniz veya potansiyel olarak diğer faaliyetlere görünmesini bunu istiyorsun musunuz? –

+0

yalnızca benim etkinliğim –

cevap

12

Evet, Theme.Dialog stiliyle bir Etkinlik oluşturun. Bu, modelleme ve olayları kabul ederken bir diyalog gibi görünen normal bir aktivitedir.

Bir örnek:

<activity android:name=".activity.dialog.PhotoDialog" 
      android:label="@string/photo_dialog_title" 
      android:theme="@android:style/Theme.Dialog"/> 

düzenlenmiştir:

Aslında Theme.Dialog yatan aktivitesi buğulu ve bu erişilemez hale getirir. Burada benzer bir zorunluluk vardı, metin ile yükleme ilerleme diyaloğunu ve iptal butonunu göstermek zorunda kaldım. Ana yakalama WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL ayarında ve WindowManager.LayoutParams.FLAG_DIM_BEHIND sıfırlanıyor.

özel içerikli bir iletişim oluşturuldu

if (progressDialog == null) { 
      progressDialog = new Dialog(activityRequestingProgressDialog); 
      progressDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
      progressDialog.setContentView(R.layout.progress_upload); 
      progressBar = (ProgressBar) progressDialog.findViewById(R.id.progressBar); 
      progressText = (TextView) progressDialog.findViewById(R.id.progressText); 
      progressText.setText("0 %"); 
      progressText.setTextSize(18); 
      Button buttonCancel = (Button) progressDialog.findViewById(R.id.btnCancel); 
      buttonCancel.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View view) { 
        cancelProgressDialog(); 
        stopUpload("Upload cancelled."); 
       } 
      }); 
      Window window = progressDialog.getWindow(); 
      window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, 
        WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); 
      window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
      window.setGravity(Gravity.BOTTOM); 
      progressDialog.show(); 
     } 

     progressText.setText(text); 
     progressBar.setProgress(percent); 

Ve bu Dialog düzeni geçerli:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/progressDialog" 
      android:orientation="vertical" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:layout_centerVertical="true"> 

<TextView android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:textSize="18sp" 
      android:padding="10dp" 
      android:text="@string/progress_title"/> 

<LinearLayout android:id="@+id/progressDialog" 
       android:orientation="horizontal" 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content" 
       android:padding="10dp" 
       android:layout_centerVertical="true"> 

    <ProgressBar android:id="@+id/progressBar" 
       android:layout_width="150dp" 
       android:layout_height="34dp" 
       android:paddingRight="10dp" 
       android:max="100" 
       android:progress="0" 
       android:fadingEdge="vertical" 
       style="?android:attr/progressBarStyleHorizontal"/> 

    <TextView android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       android:id="@+id/progressText" 
       android:paddingRight="10dp"/> 

    <Button android:layout_height="40dp" 
      android:layout_width="80dp" 
      android:id="@+id/btnCancel" 
      android:text="@string/dialog_cancel"/> 

</LinearLayout> 
</LinearLayout> 
+0

bunun arkasındaki etkinlikle etkileşime izin veriyor mu? –

+0

evet –

+0

müthiş izin veriyor! Bunu deneyeceğim! –

0
biraz daha hackish ama aynı zamanda düğme presler yakalanmak sağlar

My uygulaması arkaplan penceresinden

_wm = this.getWindowManager(); 
LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
_view = layoutInflater.inflate(R.layout.notification, null); 

_params = new WindowManager.LayoutParams(); 
_params.height = android.view.ViewGroup.LayoutParams.WRAP_CONTENT; 
_params.width = android.view.ViewGroup.LayoutParams.WRAP_CONTENT; 
_params.flags = 
    // this is to keep button presses going to the background window 
    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | 
    // this is to enable the notification to recieve touch events 
    WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; 
// background transparant 
_params.format = PixelFormat.TRANSLUCENT; 
_gravity = Gravity.TOP;//Gravity.BOTTOM; 

_wm.addView(_view, _params); 
+0

birçok durumda iyi çalışıyor ...ama bu iletişim kutusunun arkasında bir liste görünümü var ve liste görünümü öğesini tıklayabilmem için herhangi bir öneri seçemez miyim? – fvisticot

4

sadece ekleyin FLAG_NOT_TOUCH _MODAL bayrak için iletişim

dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);