2 Ekim 2015 Cuma

#ANDROID - Tab Kullanımı (TabHost)

  Hiç yorum yok
Hemen ekran görüntümüz üzerinden uygulamayı anlatmaya başlayalım. Tab dediğimiz şey aslında bir internet tarayıcısından örnek verecek olursak "sekme" diyebiliriz.

Her tabın içerisine farklı nesneler koyup bunları ayrı sayfalarmış gibi gösterebiliriz ve o nesnelerle ayrı ayrı fonksiyonlar yapabiliriz.

Kısa bir bilginin ardından tablar.xml ve Tablar.java dosyalarımızı oluşturuyoruz.

tablar.xml sayfamız biraz uzun ve karışık görünebilir fakat tasarım ekranında TabHost nesnesini ekrana sürüklediğimizde bu uzun yapıyı sistem zaten kendisi yazıyor. Siz sadece tabların içerisine nesne koymakla uğraşıyorsunuz bu nedenle gözünüz korkmasın.

Gelelim biz burada ne yapağız. Bizim 3 adet tab'ımız olacak. İlk taba iki buton koyuyoruz, ikinci tabı boş bırakıyoruz ve üçüncü taba "yeni tab ekle" yazılı bir buton koyuyoruz. Diğerleri göstermelik olsa da üçüncü panele koyduğumuz buton önemli çünkü o butona tıklandığında java kodlarıyla sayfamıza otomatik olarak yeni tab'lar ekleyeceğiz.

tablar.xml dosyası:

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

<TabHost
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tabHost"
android:layout_gravity="center_horizontal">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"></TabWidget>

<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
android:id="@+id/tab1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Başla"
android:id="@+id/bStart" />

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Durdur"
android:id="@+id/bStop" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="........."
android:id="@+id/tvSonuc" />

</LinearLayout>

<LinearLayout
android:id="@+id/tab2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"></LinearLayout>

<LinearLayout
android:id="@+id/tYeniTabEkle"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Yeni Tab Ekle"
android:id="@+id/bYeniTab" />

</LinearLayout>
</FrameLayout>
</LinearLayout>
</TabHost>




</LinearLayout>

Yalnız burada çok önemli bir konu var. TabHost'u ekrana sürükleyip bırakınca tasarım ekranında tabları görüyorsunuz fakat uygulamayı çalıştırdığınız da bu tabları görmeniz mümkün değil. Bunun nedeni TabHostu .java kısmında henüz tanımlamadığınız ve gerekli ayarlarını yapmadığınızdandır.

Tablar.java dosyası:

package com.hakancengiz.blogders;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TabHost;
import android.widget.TextView;

import java.text.BreakIterator;

public class Tablar extends Activity implements View.OnClickListener{

TabHost tabhost;
Button yeniTabEkle, startButonu, stopButonu;
TextView sonuclariGoster;

long start=0, stop=0, sonuc=0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tablar);

startButonu = (Button) findViewById(R.id.bStart);
stopButonu = (Button) findViewById(R.id.bStop);
sonuclariGoster = (TextView) findViewById(R.id.tvSonuc);
startButonu.setOnClickListener(this);
stopButonu.setOnClickListener(this);

yeniTabEkle = (Button) findViewById(R.id.bYeniTab);
yeniTabEkle.setOnClickListener(this);

tabhost = (TabHost) findViewById(R.id.tabHost);
tabhost.setup();

TabHost.TabSpec tabOzellikleri;

tabOzellikleri = tabhost.newTabSpec("tag1");
tabOzellikleri.setContent(R.id.tab1);
tabOzellikleri.setIndicator("Kronometre");
tabhost.addTab(tabOzellikleri);

tabOzellikleri = tabhost.newTabSpec("tag1");
tabOzellikleri.setContent(R.id.tab2);
tabOzellikleri.setIndicator("Panel 2");
tabhost.addTab(tabOzellikleri);

tabOzellikleri = tabhost.newTabSpec("tag1");
tabOzellikleri.setContent(R.id.tYeniTabEkle);
tabOzellikleri.setIndicator("Yeni Panel");
tabhost.addTab(tabOzellikleri);

}

@Override
public void onClick(View v) {

switch (v.getId())
{
case R.id.bYeniTab:
TabHost.TabSpec yeniTabSpec = tabhost.newTabSpec("tag1");
yeniTabSpec.setContent(new TabHost.TabContentFactory() {
@Override
public View createTabContent(String tag) {

TextView text = new TextView(Tablar.this);
text.setText("Yeni bir panel oluştu.");

return text;
}
});

yeniTabSpec.setIndicator("Yeni");
tabhost.addTab(yeniTabSpec);
break;

case R.id.bStart:
start = System.currentTimeMillis();
break;

case R.id.bStop:
stop = System.currentTimeMillis();
if(start!=0)
{
sonuc = stop - start;
int milisaniye = (int) sonuc;
int saniye = (int) sonuc/1000;
int dakika = (int) saniye/60;
milisaniye = milisaniye % 100;
dakika = dakika % 60;

sonuclariGoster.setText(String.format("%d : %02d : %02d", dakika, saniye, milisaniye));
}
break;
}

}
}

Bu arada birinci tabda eklediğimiz butonlar boşa durmasın diye bir kronometre programı yazdık. Bu kısım android değilde daha çok java programlamayla ilgili olduğu için çok fazla takılmayın. Önemli olan asıl amacımız TabHost'u sınıfımıza tanıtma ve yeni panel ekleme butonuyla activity'mize yeni panel eklemekti.

İşi biraz daha ayıklayacak olursak sadece onCreate metodunda tasarım ekranında yaptığımız, tabların görünmesi için yazdığımız kod parçası:

        TabHost.TabSpec tabOzellikleri;

tabOzellikleri = tabhost.newTabSpec("tag1");
tabOzellikleri.setContent(R.id.tab1);
tabOzellikleri.setIndicator("Kronometre");
tabhost.addTab(tabOzellikleri);

tabOzellikleri = tabhost.newTabSpec("tag1");
tabOzellikleri.setContent(R.id.tab2);
tabOzellikleri.setIndicator("Panel 2");
tabhost.addTab(tabOzellikleri);

tabOzellikleri = tabhost.newTabSpec("tag1");
tabOzellikleri.setContent(R.id.tYeniTabEkle);
tabOzellikleri.setIndicator("Yeni Panel");
tabhost.addTab(tabOzellikleri);

Son olarak her makalemizde belirttiğimiz gibi (çünkü beynimize kazımamız gerekiyor) activitymizi AndroidManifest.xml dosyasına tanıtmayı unutmayalım.

Hiç yorum yok :

Yorum Gönder