반응형

Fragment Actionbar와 기능이 유사한 BottomNavigationview를 공부해봤는데요.

이 요소는 인스타그램 앱등 많은 앱에서 사용될 정도로 사용성이 좋은 요소여서 제가 사용한 예제와 함께 정리해보려 합니다!

 

일단 이 코드를 2번째 bulid.gradle에 추가하고 sync now를 클릭해주세요

//noinspection GradleCompatible
implementation 'com.android.support:design:30.0.0'

 

그리고 BottomNavigationview의 요소가 되는 xml 파일을 만들것인데요

res 폴더 안에 menu폴더를 만들어주신 다음 menu 폴더 안에 menu Resource파일을 추가해주세요!

*전 bottom_navigationview로 이름을 지어서 추가하였습니다!*

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/cat"
        android:icon="@drawable/icon_cat"
        android:title="cat"
        android:enabled="true"/>
    <item
        android:id="@+id/dog"
        android:icon="@drawable/icon_dog"
        android:title="dog"
        android:enabled="true"/>
    <item
        android:id="@+id/horse"
        android:icon="@drawable/icon_horse"
        android:title="horse"
        android:enabled="true"/>
    <item
        android:id="@+id/rabbit"
        android:icon="@drawable/icon_rabbit"
        android:title="rabbit"
        android:enabled="true"/>
</menu>

 

그다음으론 이 BottomNavigationview에 들어갈 요소를 만들었으니 앱의 메인 화면에 BottomNavigationview를 만들어 위의 요소와 연결지으면 됩니다

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
     <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:id="@+id/main_content"
        android:orientation="vertical"
        />
    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/navigationview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:menu="@menu/bottom_navigationview"
        />
</LinearLayout>

app:menu="@menu/xml 파일 이름" 으로 코드를 써주시면 menu와 연동이 됩니다!

 

이제 각 메뉴가 클릭되었을때 나올 화면을 만들것인데요. new -> activity -> empty activity를 눌러 새로운 kotlin파일과 xml파일을 만들어 주시면됩니다!

class cat_fragment : Fragment() {
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        var view = LayoutInflater.from(activity).inflate(R.layout.activity_cat_fragment,container,false)
        return view
    }

}

여기서 inflate하는 부분은 당연히 메뉴가 선택했을때 나올 화면을 담은 xml파일이겠죠??

저는 cat,dog,horse,rabbit 다 만들어줬습니다!

 

마지막으로 Mainactivity에 bottomNavigationview를 연결하고 각 메뉴를 눌렀을때 화면이 변경되는 코드를 작성하면됩니다!

 

package kr.ac.kpu.ce2017154024.fragment_practice

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.MenuItem
import com.google.android.material.bottomnavigation.BottomNavigationView
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemSelectedListener {
    override fun onNavigationItemSelected(item: MenuItem): Boolean {
        when(item.itemId){
            R.id.cat ->{
                var catFragment = cat_fragment()
                supportFragmentManager.beginTransaction().replace(R.id.main_content,catFragment).commit()
                return true
            }
            R.id.dog ->{
                var dogFragment = dog_fragment()
                supportFragmentManager.beginTransaction().replace(R.id.main_content,dogFragment).commit()
                return true
            }
            R.id.horse ->{
                var horseFragment = horse_fragment()
                supportFragmentManager.beginTransaction().replace(R.id.main_content,horseFragment).commit()
                return true
            }
            R.id.rabbit ->{
                var rabbitFragment = rabbit_fragment()
                supportFragmentManager.beginTransaction().replace(R.id.main_content,rabbitFragment).commit()
                return true
            }


        }
        return false
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        navigationview.setOnNavigationItemSelectedListener(this)


    }
}

메뉴가 눌렸을 때 linearlayout인 main_content가 바뀌는 알고리즘을

통해서 만들었습니다

반응형

+ Recent posts