آموزش Tablayout به زبان کاتلین در اندروید

سلام دوستان همشگی در این سری از آموزش برنامه نویسی اندروید به آموزش Tablayout به زبان کاتلین در اندروید می پردازیم در این آموزش با استفاده از Fragment فرزند های خود را تعیین خواهیم کرد از Tablayout به منظور بخش بندی صفحه اصلی به چند بخش می توان استفاده کرد در ادامه با ما همراه باشید تا نحوه پیاده سازی Tablayout به زبان کاتلین در اندروید را یاد بگیرید.
بخش هایی که در ادامه ساخته خواهند شد و با آنها کار خواهیم داشت عبارتند از :

  • fragment_layout.xml
  • FragmentOne
  • FragmentTwo
  • FragmentThree
  • ViewPager Adapter
  • activity_main.xml
  • MainActivity
  • AndroidManifest.xml

در ادامه کد هر بخش را قرار خواهیم داد.

fragment_layout.xml در این بخش تمامی فرگمنت های دیگر قرار خواهند گرفت در واقع صفحه مربوط به هر فرگمنت از این بخش استفاده خواهد کرد کد های زیر را در آن قرار دهید.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/rel_main"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv_name"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        />
</RelativeLayout>

فرگمنتی به نام FragmentOne.kt ایجاد کرده و کدهای زیر را در آن قرار دهید.

package com.programchi.tabexample
import android.graphics.Color
import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.RelativeLayout
import android.widget.TextView
class FragmentOne : Fragment() {
    var tv_name: TextView? = null
    var rel_main: RelativeLayout? = null
    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        var view: View? = inflater!!.inflate(R.layout.fragment_layout, container, false)
        rel_main=view?.findViewById<RelativeLayout>(R.id.rel_main) as RelativeLayout
        rel_main?.setBackgroundColor(Color.CYAN)
        tv_name = view?.findViewById<TextView>(R.id.tv_name) as TextView
        tv_name?.text = "Programchi First Tab"
        return view
    }
}

در بالا صفحه اول فرگمنت ما ایجاد خواهد شد و یک متن نمایش داده خواهد شد.
همین کار را دوباره تکرار کرده و یک فرگمنت به نام FragmentTwo.kt ایجاد می کنید و کدهای زیر را قرار دهید.

package com.programchi.tabexample
import android.annotation.SuppressLint
import android.graphics.Color
import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.RelativeLayout
import android.widget.TextView
class FragmentTwo : Fragment() {
    var tv_name: TextView? = null
    var rel_main: RelativeLayout? = null
    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        var view:View?=inflater!!.inflate(R.layout.fragment_layout,container,false)
        rel_main=view?.findViewById<RelativeLayout>(R.id.rel_main) as RelativeLayout
        rel_main?.setBackgroundColor(Color.LTGRAY)
        tv_name=view?.findViewById<TextView>(R.id.tv_name) as TextView
        tv_name?.text="Programchi Second Tab"
        return view
    }
}

فرگمنت بالا همانند فرگمنت قبلی است و تفاوت چندانی ندارد.
فرگمنتی به نام FragmentThree.Kt ایجاد کرده و کدهای زیر را در آن قرار دهید.

package com.programchi.tabexample
import android.annotation.SuppressLint
import android.graphics.Color
import android.os.Bundle
import android.support.v4.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.RelativeLayout
import android.widget.TextView
class FragmentThree : Fragment() {
    var tv_name: TextView? = null
    var rel_main: RelativeLayout? = null
    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        var view:View?=inflater!!.inflate(R.layout.fragment_layout,container,false)
        rel_main=view?.findViewById<RelativeLayout>(R.id.rel_main) as RelativeLayout
        rel_main?.setBackgroundColor(Color.YELLOW)
        tv_name=view?.findViewById<TextView>(R.id.tv_name) as TextView
        tv_name?.text="Programchi Third Tab"
        return view
    }
}

باید با استفاده از یک آداپتور از کلاس FragmentPagerAdapter فرگمنت های خود را برای مدیریت و قرار دادن در Viewpager اماده کنیم برای اینکار یک کلاس به نام ViewPagerAdapter.kt ایجاد کرده و کدهای زیر را در آن قرار دهید.

package com.progrmchi.tabexample
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentPagerAdapter
class ViewPagerAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) {
    override fun getItem(position: Int): Fragment? {
        var fragment: Fragment? = null
        if (position == 0) {
            fragment = FragmentOne()
        } else if (position == 1) {
            fragment = FragmentTwo()
        } else if (position == 2) {
            fragment = FragmentThree()
        }
        return fragment
    }
    override fun getCount(): Int {
        return 3
    }
    override fun getPageTitle(position: Int): CharSequence? {
        var title: String? = null
        if (position == 0) {
            title = "First"
        } else if (position == 1) {
            title = "Second"
        } else if (position == 2) {
            title = "Third"
        }
        return title
    }
}

در لایه ی activity_main.xml یا صحفه اصلی باید یک viewpager همانند زیر قرار گیرد.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">
<android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="40dp"
    app:tabGravity="fill"
    app:tabMode="fixed"
    app:tabSelectedTextColor="@color/colorAccent"
    app:tabIndicatorColor="#1c1c1d"
    />
    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:layout_below="@+id/tab_layout"/>
</RelativeLayout>

و در نهایت باید کدهای زیر را در MainActivity.kt قرار دهید.

package com.w3adda.tabexample
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_tab_layout.*
class MainActivity : AppCompatActivity(){
  internal lateinit var viewpageradapter:ViewPagerAdapter //Declare PagerAdapter
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        viewpageradapter= ViewPagerAdapter(supportFragmentManager)
 this.viewPager.adapter=viewpageradapter  //Binding PagerAdapter with ViewPager
 this.tab_layout.setupWithViewPager(this.viewPager) //Binding ViewPager with TabLayout
    }
}

در واقع در بالا آداپتوری که ساختیم را به viewpager معرفی می کنیم و تب های مربوط به Tablayout ایجاد می شوند.
 
این آموزش هم به پایان رسید.
موفق و پیروز باشید.

مطالعه بیشتر