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:
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:
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:
2. Boşluğa tıklandığında kapatılmasını istemiyorsak:
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,
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):
Activity sınıfının onCreate() metodu içerisinde eklenmesi gereken kodlar ise şunlardır:
Örnek uygulamayı indirmek için tıklayınız
<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