본문 바로가기

안드로이드

액션바 아이콘 바꾸기

반응형

액티비티의 위쪽에 보이는 타이틀 부분과 옵션 메뉴는 액션바로 합쳐져 보이게 된다

 

액션바는 기본적으로 제목을 보여주는 타이틀의 기능을 하므로 앱의 제목을 보여줄 수 있으며 화면에 보이거나 보이지 않도록 만들 수 있다

 

ActionBar abar = getActionBar();

abar.show();

abar.hide();

 

setSubtitle 메소드를 사용하면 타이틀의 부제목을 달아줄 수 있다

 

디스플레이 옵션 상수

DISPLAY_USE_LOGO
홈 아이콘 부분에 로고 아이콘을 사용

DISPLAY_SHOW_HOME
홈 아이콘을 표시

DISPLAY_HOME_AS_UP
홈 아이콘에 뒤로 가기 모양의 < 아이콘을 같이 표시

DISPLAY_SHOW_TITLE
타이틀을 표시

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:textSize="30sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="192dp"
        android:text="액션바 아이콘 바꾸기"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

 

menu_main.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/menu_refresh"
        android:icon="@drawable/menu_refresh"
        android:title="새로고침"
        app:showAsAction="always"></item>

    <item
        android:id="@+id/menu_search"
        android:icon="@drawable/menu_search"
        android:title="검색"
        app:showAsAction="always"></item>


    <item
        android:id="@+id/menu_settings"
        android:icon="@drawable/menu_settings"
        android:title="설정"
        app:showAsAction="always"></item>


</menu>

 

 

MainActivity

package com.example.a31_sampleactionbar;

import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

//    package androidx.appcompat.app 안에 들어있는 클래스를 임포트
    ActionBar abar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
//        xml 레이아웃에 들어있는 ActionBar 객체를 참조
        abar = getSupportActionBar();

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                abar.setLogo(R.drawable.home);
                
//                버튼을 클릭했을 때 액션바가 보이는 모양을 바꾸는 메소드
                abar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_USE_LOGO);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    //    메뉴를 선택했을 때 처리하는 메소드
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int curId = item.getItemId();

        switch (curId) {
            case R.id.menu_refresh:
                Toast.makeText(this, "새로고침 메뉴 선택", Toast.LENGTH_SHORT).show();
                break;

            case R.id.menu_search:
                Toast.makeText(this, "검색 메뉴 선택", Toast.LENGTH_SHORT).show();
                break;

            case R.id.menu_settings:
                Toast.makeText(this, "설정 메뉴 선택", Toast.LENGTH_SHORT).show();
                break;

            default:
                break;
        }

        return super.onOptionsItemSelected(item);
    }
}

 

메뉴 xml의 <item> 태그에 showAsAction 속성의 값으로 always, always | withText, never가 설정 가능하다

never로 값을 설정하면 액션바에 메뉴가 보이지 않게 된다

 

orderInCategorty 속성은 메뉴가 보이는 순서를 결정하며 101, 102, 103처럼 작은 숫자부터 순서대로 지정한다

반응형

'안드로이드' 카테고리의 다른 글

[에러] Installation failed due to: ''cmd package install-create ....  (0) 2021.10.20
액션바에 검색창 만들기  (0) 2021.10.20
액션바  (0) 2021.10.19
한 화면에 2개의 프래그먼트  (0) 2021.10.19
프래그먼트  (0) 2021.10.18