Android Activity'nin Dialog Olarak Açılmasını Sağlamak

20-08-2014
Bir Activity sınıfını dialog olarak açmak istiyorsak AndroidManifest.xml dosyasında, Activity set ederken tema değerini, android dialog temalarından birine set etmemiz gereklidir:
<activity android:name=".UserAdd" android:theme="@android:style/Theme.Holo.Light.Dialog" />


Bu işlem tamamlandıktan sonra Activity sınıfı, dialog olarak açılacaktır. Eğer dialog'un boyutunu özelleştirmek istiyorsanız aşağıdaki kodları onCreate() metodu içerisinde, setContentView() metodundan önce kullanmak gereklidir:

DisplayMetrics metrics = getResources().getDisplayMetrics();
int screenWidth = (int) (metrics.widthPixels * 0.80);
getWindow().setLayout(screenWidth, ViewGroup.LayoutParams.WRAP_CONTENT);
setContentView(R.layout.user); //setContentView() metodundan önce kullanildi


0.80 sayısı ile ekran genişliğini çarparak, dialog olarak açılacak Activity'nin %80 genişlikte olması sağlanır.


Activity'nin Kapatılması

Aşağıdaki kodları kullanarak dialog olarak açılan Activity'nin layoutu dışında bir yere tıkladığımızda, bu Activity'nin kapatılıp kapatılmamasını sağlayabiliriz.

1. Boşluğa tıklandığında kapatılmasını istiyorsak:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, 
        WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);


2. Boşluğa tıklandığında kapatılmasını istemiyorsak:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, 
        WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);


Not: Yukarıda verilen kodlar setContentView() metodundan önce kullanılır.

3. Ayrıca Activity sınıfının onTouchEvent() metodu override edilir. Boşluğa tıklandığı zaman, MotionEvent.ACTION_OUTSIDE == event.getAction() değeri true olur.

@Override
public boolean onTouchEvent(MotionEvent event) {
    // If we've received a touch notification that the user has touched
    // outside the app, finish the activity.
    if (MotionEvent.ACTION_OUTSIDE == event.getAction()) {
        //finish(); todo finish() aktif yapilirsa activity disinda tiklandiginda dialog kapanir
        return true;
    }
  
    // Delegate everything else to Activity.
    return super.onTouchEvent(event);
}


Dialog Başlığını Özelleştirmek

Dialog başlığını özelleştirmek için öncelikle custom bir layout eklememiz gereklidir. Örnek bir layout (dialog_title_content.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
    <TextView
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/text_title_user_dialog"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:textColor="@android:color/darker_gray"
            android:gravity ="center"/>
</LinearLayout>


Activity sınıfının onCreate() metodu içerisinde eklenmesi gereken kodlar ise şunlardır:
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.user); 
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.dialog_title_content);
  
//Baslik icerigini set ediyoruz
TextView title = (TextView) findViewById(R.id.text_title_user_dialog);
title.setText("Kullanıcı Giriş Sayfası");
title.setTextSize(20);
title.setTextColor(Color.parseColor("#ff0092f4"));


Örnek uygulamayı indirmek için tıklayınız

© 2019 Tüm Hakları Saklıdır. Codesenior.COM