본문 바로가기
Android Kotlin

Android Studio 토글 누르면 DrawerLayout 꺼내기 ( setSupportActionBar로 )

by 히예네 2023. 3. 31.
728x90
반응형

토글버튼을 만드는 방법은 여러가지이다.

이번에 소개할 방법은 xml에 직접 ToggleButton을 만드는 것이 아닌

setSupportActionBar를 이용해서 만들어보자.

 

이번에 하는 예제는! 

토글 버튼을 누르면 Drawer에서 NavigationView를 나오게끔한다. 

 

※ 뷰바인딩은 필수이다. (gradle)

  buildFeatures{
        viewBinding true
    }

 

 

 

1. activity_main.xml

ToggleButton자체를 만들지 않았다. 대신 Appbar와 toolbar를 살려둔다. 

<?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"
    android:orientation="vertical"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">



        </androidx.appcompat.widget.Toolbar>

    </com.google.android.material.appbar.AppBarLayout>

    <androidx.drawerlayout.widget.DrawerLayout
        android:id="@+id/drawerlayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.google.android.material.navigation.NavigationView
            android:id="@+id/navigationView"
            android:layout_gravity="start"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <ImageView
                android:src="@drawable/ic_launcher_background"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>

        </com.google.android.material.navigation.NavigationView>

    </androidx.drawerlayout.widget.DrawerLayout>


</LinearLayout>

2.string.xml

<resources>
    <string name="app_name">Togglebutton</string>


    <string name="drawer_open">Open Drawer</string>
    <string name="drawer_close">Close Drawer</string>

</resources>

3. theme.xml

  <style name="Theme.Togglebutton" parent="Base.Theme.Togglebutton" />

 

 

4. MainActivity.kt


import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.MenuItem
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.drawerlayout.widget.DrawerLayout
import com.athena.togglebutton.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    lateinit var toggle: ActionBarDrawerToggle

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

        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        //1. 액션바대신에 툴바로 대체한다.
        setSupportActionBar(binding.toolbar)
        //2. ActionBarDrawerToggle 버튼적용
        toggle = ActionBarDrawerToggle(this,binding.drawerlayout, R.string.drawer_open,  R.string.drawer_close)
        //3.업버튼 활성화
        supportActionBar?.setDisplayHomeAsUpEnabled(true)
        //4. 토글 sync

        toggle.syncState()

    }

    //5. 이 함수가 있어야 토글버튼을 누르면 Drawer가 들어갔다 나갔다한다. 
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        if(toggle.onOptionsItemSelected(item)){
            return true
        }
        return super.onOptionsItemSelected(item)
    }
}
728x90
반응형