안드로이드 앱 스쿨 2기/Android

[10주차 - 수] ActionBarNavigation

봉구형 2023. 7. 2. 02:30

ActionBar Navigation

  • ActionBar에 <- 아이콘을 배치하여 뒤로가기 기능을 구현할 수 있다.
  • 아이콘을 표시한다고 해서 뒤로 가기 기능이 생기는 것은 아니기 때문에 직접 구현을 해야한다

 

파일 구조

 

1. activity_main.xml

 

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

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="MainActivity"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="SecondActivity 실행" />
</LinearLayout>

 

2. MainActivity

 

class MainActivity : AppCompatActivity() {
    lateinit var activityMainBinding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

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

        activityMainBinding.run{
            button.setOnClickListener {
                val newIntent = Intent(this@MainActivity, SecondActivity::class.java)
                startActivity(newIntent)
            }
        }

    }
}

 

3. activity_second.xml

 

<?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=".SecondActivity">

    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="SecondActivity"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />
</LinearLayout>

 

4. SecondActivity

 

class SecondActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)

        // Homebutton = 뒤로가기 버튼
        // Homebutton을 활성화 한다. (활성화만 한다고 눈에 보이지가 않는다)
        supportActionBar?.setHomeButtonEnabled(true)

        // HomeButton을 노출시킨다.
        supportActionBar?.setDisplayHomeAsUpEnabled(true)

        // 아이콘을 변경한다. (아이콘을 변경 가능하나 사용자가 별로기 때문에 쓰지는 말자)
        // supportActionBar?.setHomeAsUpIndicator(R.mipmap.ic_launcher)
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {

        when(item.itemId){
            // 백버튼 는 android.R.id.home 지정되어 있다
            android.R.id.home -> {
                // 현재 Activity를 종료한다.
                finish()
            }
        }

        return super.onOptionsItemSelected(item)
    }

}

 


// Homebutton = 뒤로가기 버튼
// Homebutton을 활성화 한다. (활성화만 한다고 눈에 보이지가 않는다)
supportActionBar?.setHomeButtonEnabled(true)

// HomeButton을 노출시킨다.
supportActionBar?.setDisplayHomeAsUpEnabled(true)

 

[챗 GPT 설명]

 

  1. supportActionBar?.setHomeButtonEnabled(true): supportActionBar를 사용하여 ActionBar의 HomeButton을 활성화합니다. setHomeButtonEnabled(true) 메서드는 ActionBar의 HomeButton을 사용할 수 있도록 설정합니다. supportActionBar가 null이 아닌 경우에만 실행됩니다.
  2. supportActionBar?.setDisplayHomeAsUpEnabled(true): supportActionBar를 사용하여 홈 버튼을 표시합니다. setDisplayHomeAsUpEnabled(true) 메서드는 홈 버튼을 보이도록 설정합니다. 이를 통해 ActionBar의 왼쪽에 홈 버튼이 표시되며, 사용자가 뒤로 가기 등의 동작을 수행할 수 있습니다. supportActionBar가 null이 아닌 경우에만 실행됩니다.

이렇게 코드를 사용하면 ActionBar에서 HomeButton을 활성화하고, 홈 버튼을 표시할 수 있습니다. ActionBar의 HomeButton은 액티비티의 네비게이션 기능과 관련이 있으며, 사용자가 홈 버튼을 누를 때 특정 동작을 수행할 수 있도록 합니다.

 

 


[결과]

 

 

 

출처 : 안드로이드 앱스쿨 2기 윤재성 강사님