Anasayfa » Android, Java ve Java Teknolojileri

Android Programlama – Landscape, Portrait, String.xml

14 Temmuz 2012 39.732 kez okundu Bir yorum
1 Star2 Stars3 Stars4 Stars5 Stars (1 oy,5 üzerinden : 5,00 )
Loading ... Loading ...

Merhaba arkadaşlar,bugünkü çalışmamızda, hazırlamış olduğumuz uygulamayı cihazda landscape modda (yeni cihazı yan çevirdiğinizde aldığı mod) çalıştıracağız. Bir önceki yazımızı okumayanlar buradan okuyabilir.  Okumak istemeyenler bir önceki uygulamayı indirip üzerinde devam edebilirler.

Diğer yazılarımız;

Bugünkü yazımıza kadar bir çok elemanla karşılaştık. drawable altında  resimler, layout altnda view elemanlarımız, menu altında menü elemanlarımız, henüz bahsetmediğimiz values altında strings.xml. Bugünkü yazımızda uygulamıza yeni bir şeyler eklemek yerine var olan uygulamamızı cihazımız landscape moda aldığımızda yani cihazımız yan çevirdiğimizde oluşan görüntüyü düzenlemekle uğraşacağız. Son olarakta string.xml den bahsedeceğiz.

Uygulamamızın son halini çalıştırıp, Ctrl+F12 yaparsanız, cihazın landscape moda geçtiğini görürsünüz. Uygulamamız bu halde de çalışır olacaktır. Ancak ekranın yüksekliği azalıp, eni arttığı için form vs elemanlarımız hoş görünmeyecektir. Bunun için düzenlemeler yapalım.

İlk olarak basitForm/res/layout-land/ adında bir klasör oluşturalım.Bu klasör landscape moda geçtiğimizde bize görünecek olan view dosyalarını tutacak.

Şimdi de basitForm/res/layout/main.xml dosyasını basitForm/res/layout-land/ altına kopyalayalım. Daha sonra da kopyaladığımız main.xml dosyasında şu değişiklikleri yapalım.

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
	<LinearLayout
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">
		<TabWidget android:id="@android:id/tabs"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		/>
		<FrameLayout android:id="@android:id/tabcontent"
		android:layout_width="fill_parent"
		android:layout_height="fill_parent"
		>
		<LinearLayout
		android:layout_width="fill_parent"
		android:layout_height="fill_parent"
		>
			<ListView android:id="@+id/books"
			android:layout_width="fill_parent"
			android:layout_height="fill_parent"
			/>
		</LinearLayout>
			<TableLayout android:id="@+id/details"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:stretchColumns="1,3"
			android:paddingTop="4px"
			>
				<TableRow>
					<TextView
					android:layout_width="wrap_content"
					android:layout_height="wrap_content"
					android:paddingLeft="2px"
					android:paddingRight="2px"
					android:text="İsmi:"
					/>
					<EditText android:id="@+id/name"
					android:layout_width="fill_parent"
					android:layout_height="wrap_content"
					android:maxWidth="140sp"
					/>
					<TextView
					android:layout_width="wrap_content"
					android:layout_height="wrap_content"
					android:paddingLeft="2px"
					android:paddingRight="2px"
					android:text="Yazar:"
					/>
					<AutoCompleteTextView android:id="@+id/author"
					android:layout_width="fill_parent"
					android:layout_height="wrap_content"
					android:paddingLeft="2px"
					android:paddingRight="2px"
					/>
				</TableRow>
				<TableRow >
 
 
					<TextView
					    android:paddingLeft="2px"
						android:paddingRight="2px" 
					    android:text="Cinsi:" />
					<RadioGroup android:id="@+id/types">
					<RadioButton android:id="@+id/adventure"
					android:text="Adventure"
					android:checked="true"
					/>
					<RadioButton android:id="@+id/biography"
					android:text="Biography"
					/>
					<RadioButton android:id="@+id/documentary"
					android:text="Documentary"
					/>
					</RadioGroup>
					<TextView
					android:layout_width="wrap_content"
					android:layout_height="wrap_content"
					android:paddingLeft="2px"
					android:paddingRight="2px"
					android:text="Tarih:"
					/>
					 <DatePicker
			        android:id="@+id/date"
			        android:layout_width="wrap_content"
			        android:layout_height="wrap_content" />
				</TableRow>
				<TableRow>
					<TextView 
					android:paddingLeft="2px"
					android:paddingRight="2px"
					android:text="Yorum:" />
					<EditText android:id="@+id/comment"
					android:singleLine="false"
					android:gravity="top"
					android:lines="3"
					android:scrollHorizontally="false"
					android:maxLines="2"
					android:maxWidth="140sp"
					/>
 
				<Button android:id="@+id/save"
				android:layout_span="2"
				android:layout_width="fill_parent"
				android:layout_height="wrap_content"
				android:text="Kaydet"
				/>
				</TableRow>
			</TableLayout>
		</FrameLayout>
	</LinearLayout>
	</ScrollView>
</TabHost>

Buradaki değişiklikleri şöyle sıralayalım.

  • Tablomuz 4 kolonlu hale geldi.
  • 1. ve 3. kolonları android:stretchColumns=”1,3″ komutu ile esnek hale getiriyoruz.
  • İsim ve yazar gibi bazı elemanları aynı satıra aldık.
  • Yorum alanını 3 satırlık yaptık.
  • EditText leri 140 sp ile sınırladık. Böylece yazı yazılsa dahi genişlemeyecekler.
  • Bazı alanlara padding ekledik.
Eğer elemanınızı sıradaki kolon yerine istediğiniz bir kolona koymak istiyorsanız. android:layout_column=”1″  ile kolon numarasını vermesi gerekiyor. Yada birden fazla kolonu birleştirmek istiyorsanız, yukarıdaki xml Buton için yaptığımız gibi android:layout_span=”2″ ile kaç tane kolonu birleştirmek istediğinizi belirtiyorsunuz.

Şimdi biz sadece main.xml için landscape modu ayarladık. Peki row.xml ne olacak? Android row.xml dosyasını layout-land klasöründe bulamadığı için tekrar gidip eski layout klasörüne bakacak ve oradakini kullanacak.

Eğer uygulamayı çalıştırıp, bir kaç kitap ekledikten sonra tekrar düz konuma (portrait) getirirsek. Listedeki kitapların kaybolduğunu göreceğiz. Bunun sebebi, biz kitaplarımızı herhangi bir konumda saklamıyoruz. Cihazın duruşu değiştiğinde aktif activity tekrar baştan çalışıyor. Buda proğramı baştan çalıştırmış gibi oluyor ve kitaplar kayboluyor. Daha sonraki yazılarımızda bu kitapları bir yere kaydedeceğiz. Böylece kayıp olmayacak.

Biz landscape için yeni bir klasör oluşturduk ve bu modda kullanılacak layoutları buraya koyduk. Aynı işlemi drawable içinde yapabiliriz. res/drawable-land/ adında bir klasörü oluşturup aynı isimde ikonları buraya koyarsak yatay konumda iken buradaki ikonlar gözükür. Yani cihaz landscape moda geçtiğinde değişmesini istediğiniz ikonları buraya koyabilirsiniz.

Bugün ayrıca bir diğer konu olan String.xml dosyasından bahsedeceğiz. Öncelikle şöyle düşünelim. Onlarca sayfadan ve layouttan oluşan bir program yaptınız. Daha sonra ise bu programda bazı text alanlarının bazı butonların isimlerini değiştirmek istediniz. Ne olacak şimdi, kodu açıp tek tek arayıp, bulduklarınızı değiştirecek misiniz? Ya da türkçe yaptığınız bir programı ingilizce hale getireceksiniz. Yine bütün text leri tek tek bulup değiştireceksiniz. İşte bunu önlemek için stringlerinizi, values/string.xml dosyasına kaydedebiliriz. Örneğin ben string.xml dosyasına save_my_button id li ve “Kaydet” değerine sahip yeni bir string ekliyorum. Sonra da gidip main.xml dosyamda buton textine  android:text=”@string/save_button_text” diyorum. Programı çalıştırdığımda butonumun üzerinde “Kaydet” yazıyor. Bütün stringlerimi böyle yaptığımı düşünürsek, herhangi bir değişiklik olduğunda açıp sadece string.xml dosyasına bakmamız gerekecek. Ayrıca başka faydalarıda var. Ben sadece bir kaçından bahsettim.

Bugün kü yazımızda cihazın landscape modda çalışırken kullandığı yapıları nasıl ayarlayacağımızı ve string.xml dosyasından bahsettik. Takipte kalmaya devam edin!

Projenin kaynak kodlarını buradan indirebilirsiniz. Rar şifresi: www.kodmerkezi.net

<<< Önceki:

Sonraki: >>>


Facebookta Paylaş

Bir yorum »

  • turgay dedi ki:

    merhabalar. makale için teşekkürler.
    aynen uyguladım dediklerinizi fakat bir sorun oluşuyor.
    uygulama ilk açıldığında ekran ne durumda ise o şekilde hatasız çalışıyor. fakat değiştirince (land to port veya port to land) direk hata verip kapanıyor.
    logcat ten aldığım mesaj şu fakat anlayamadım. yardımcı olursanız çok makbule geçer. şimdiden teşekkür ederim.

    12-05 08:04:39.620: E/art(2184): Throwing OutOfMemoryError “Failed to allocate a 8640012 byte allocation with 1051876 free bytes and 1027KB until OOM”

Yorum Bırakın!

Yorum yaz, yada kendi sitende trackback (Geri besleme) olarak ekle. Ayrıca RSS ile bu konuya üye olabilirsin. .

Nazik olun. Temiz tutun. Konu dışına çıkmayın. Spam yaratmayın.

Bu tagları kullanabilirsiniz:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Bloğumuz gavatarı desteklemektedir. Kendi gavatarınızı edinmek için lütfen Gravatar a üye olun.