TabHost در اندروید

منتشرشده توسط حامد قنبری در تاریخ

 

در اندروید TabHost بعنوان یک کانتینر برای نمایش پنجره های مجزا استفاده می شود. این شیء دو فرزند را در خود نگه می دارد یکی مجموعه برچسب پنچره هاست که کاربر بر روی یک برگه خاص کلیک می کند و دیگری یک شی FrameLayout است که محتوای آن صفحه را نمایش می دهد.

هر زمان که ما نیاز به وارد کردن یا نمایش اطلاعات زیادی در یک اکتیویتی داشته باشیم. روش ساده و موثر این است که از تب ها در فرم رابط کاربری خود استفاده کنیم که با استفاده از TabHost در Android انجام می شود.

نکته مهم: Tabhost دارای دو فرزند است که از یکی آنها برای استفاده از برچسب هایی که کاربران بر روی آنها کلیک می کنند استفاده می شود، و دیگری FrameLayout است که برای نمایش محتوای آن صفحه مورد استفاده قرار می گیرد. این بدان معنی است که وقتی شما هر برچسب را انتخاب می کنید (یا هر تب را تغییر می دهید)، FrameLayout برای نمایش محتوا  مرتبط با آن برگه خاص استفاده می شود.

نکته مهم: برای استفاده از TabHost در MainActivity ما نیاز داریم که آن را به نوع   TabActivity گسترش دهیم.

متدهای مهم TabSpec:
اجازه دهید در مورد برخی از متدهای معمول TabSpec بحث کنیم که برای مشخص کردن شاخص و محتوا برای تب استفاده می شود.

1. (setIndicator (CharSequence label: این متد برای تنظیم متن برای نمایش در تب استفاده می شود. در این عبارت CharSequence type را برای نمایش یک برچسب برای Tab تعیین می کنیم.

TabHost tabHost = (TabHost)findViewById(android.R.id.mytabhost); 
TabHost.TabSpec tabSpec = tabHost.newTabSpec("تب اول"); 
  tabSpec.setIndicator("Tab 1");

2- (setIndicator(CharSequence label,Drawable icon

از این متدبرای تعیین برچسب و طرح نمادین برگه استفاده می شود. بطور کلی از  این متد  برای نشان دادن یک برچسب  و drawable برای نمایش یک آیکون استفاده می شود.

    TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost); //فراخوانی ویجت بر اساس ایدی
    TabHost.TabSpec tabSpec = tabHost.newTabSpec("tab1"); //ایجاد تب جدید
tabSpec.setIndicator("Tab 1",getResources().getDrawable(R.drawable.ic_launcher)); // تعیین لیبل و آیکن تب

متدهای  مهم TabHost:
بهتر است در مورد برخی از متدهای مهم TabHost که برای تنظیم زبانه ها در برنامه  استفاده می شود بحث کنیم.

1.( addTab (TabSpec tabSpec: این روش برای افزودن برگه بر روی ویجت استفاده می شود. هر بار که یک Tab جدید با استفاده از TabSpec مشخص می کنیم، باید Tab را در tabHost اضافه کنیم.

درمثال زیر به روشنی نشان داده شده است  که در آن ما یک تب را با استفاده از کلاس TabSpec ایجاد می کنیم و سپس  برگه جدیدی را  با استفاده از متد addTab اضافه می کنیم.

 TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost); 
    TabHost.TabSpec tabSpec = tabHost.newTabSpec("tab1"); 
tabSpec.setIndicator(view); 
        Intent intent = new Intent(this, MyActivity.class);
        tabSpec.setContent(intent); 
        tabHost.addTab(tabSpec);

2.  ()clearAllTabs: از این متد برای حذف همه زبانه هادر TabHost استفاده می شود.

کد زیرنمونه ای است که در ابتدا دو زبانه را اضافه می کند و سپس تمام زبانه ها را از TabHost حذف می کند.

TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost); // initiate TabHost
TabHost.TabSpec tabSpec = tabHost.newTabSpec("tab1"); //ایجاد  تب اسپک جدید
tabSpec.setIndicator("Tab 1"); // ست کردن تب 1 بعنوان ایندکاتور
Intent intent = new Intent(this, MyActivity.class);
tabSpec.setContent(intent);
TabHost.TabSpec tabSpec1 = tabHost.newTabSpec("tab2"); // ایجاد تب اسپک جدید در تب هاست
tabSpec1.setIndicator("Tab 2"); // ست کردن تب دوم
Intent intent1 = new Intent(this, MyActivity.class);
tabSpec1.setContent(intent1); // specify an intent to use to launch an activity as the tab content
tabHost.addTab(tabSpec); // اضفه کردن تب
tabHost.addTab(tabSpec1); // اضافه کردن تب دوم
tabHost.clearAllTabs(); // پاک کردن همه تب ها

متد (setOnTabChangedListener (OnTabChangeListener: این متد برای ثبت فراخوانی callback مورد استفاده قرار می گیرد. در واقع با استفاده از این متد تعیین می کنیم که در صورت کلیک کردن کاربر بر روی هر یک از بزبانه چه اتفاقی باید بیفتد.

در کد زیر ما نشان داده ایم که چگونه از setOnTabChangedListener در TabHost استفاده کنیم.

    tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
// کدهای شما
        }
        });

مثال:

اگر در داخل برنامه اکلیپس یا اندروید استودیو قرار دارید پروژه جدیدی را  ایجاد کنید

اکلیپس :File ⇒ New Android ⇒ Application Project

اندروید استودیو :File ⇒ New  ⇒ New Project

اما اگر هنوز برنامه خود را باز نکرده اید یکی از برنامه های فوق را باز نموده و بعد از تعیین مشخصات(نامگذاری) ، تعیین حداقل sdk  و نوع اکتیویتی (blank  یا Empty) ، نام اکتیویتی ابتدایی و اصلی خود  را همان MainActivity قرار دهید. بعد از لود کامل برنامه ، در مسیر res ⇒layout لایه متناظر اکتیوتی اصلی یعنی activity_main را پیدا نمود و کدهای مندرج و پیش فرض آن را پاک کرده و TabHost را به  لایه XML اکتیویتی خود اضافه کنید. بدین منظور لازم است ابتدا باید TabHost، TabWidget، FrameLayout را به لایه اکتیویتی خود در XML اضافه کنید. با اضافه کردن TabHost، TabWidget و FrameLayout، فایل XML شما شبیه کدهای زیر خواهد بود.

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


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

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="0dip"
            android:layout_weight="1" />

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="-4dp"
            android:layout_weight="0" />

    </LinearLayout>

</TabHost>

در مرحله بعد لازم است ما کد های مربوط به TabHost را به کلاس خود اضافه کنیم و سپس با استفاده از TabHost.TabSpec سه تب را با عناوین Home، Contacts و در جایی که داده های ایستا را نمایش می دهیم اضافه می کنیم. ما همچنین setOnTabChangeListener را اجرا می کنیم، بطوری که هر بار که تب تغییر می کند، نام برگه با استفاده از  Toast نمایش داده می شود.  فراموش نشود که برای استفاده از TabHost در MainActivity ما نیاز داریم که کلاس آن را به نوع TabActivity گسترش دهیم.


0 دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

-- بارگیری کد امنیتی --