출처: https://3months.tistory.com/307 [Deep Play]

안드로이드/연습

[Android] ContextMenu

코딩하는 랄뚜기 2021. 8. 23. 13:19

menu1.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/itemRed"
        android:title="배경색(빨강)"/>
    <item
        android:id="@+id/itemGreen"
        android:title="배경색(초록)"/>
    <item
        android:id="@+id/itemBlue"
        android:title="배경색(파랑)"/>
</menu>

menu2.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/subRotate"
        android:title="버튼 45도 회전"/>
    <item
        android:id="@+id/subSize"
        android:title="버튼 2개 확대"/>
</menu>

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:id="@+id/baseLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="배경색 변경"/>
    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="버튼 변경"/>
</LinearLayout>

MainActivity.java

package com.example.project7_2;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {
    LinearLayout baseLayout;
    Button button1, button2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("배경색 바꾸기 (컨텍스트 메뉴)");
        baseLayout = (LinearLayout) findViewById(R.id.baseLayout);
        button1 = (Button) findViewById(R.id.button1);
        //버튼을 메뉴가 뜰 수 있는 버튼으로 register한다.
        registerForContextMenu(button1);
        button2 = (Button) findViewById(R.id.button2);
        registerForContextMenu(button2);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater mInflater = getMenuInflater();
        //inflate하는 xml파일이 버튼마다 다르다
        if (v == button1) {
            menu.setHeaderTitle("배경색 변경");
            mInflater.inflate(R.menu.menu1, menu);
        }
        if (v == button2) {
            menu.setHeaderTitle("버튼 변경");
            mInflater.inflate(R.menu.menu2, menu);
        }
    }

    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
        switch(item.getItemId()){
            case R.id.itemRed:
                baseLayout.setBackgroundColor(Color.RED);
                return true;
            case R.id.itemBlue:
                baseLayout.setBackgroundColor(Color.BLUE);
                return true;
            case R.id.itemGreen:
                baseLayout.setBackgroundColor(Color.GREEN);
                return true;
            case R.id.subRotate:
                button1.setRotation(45);
                button2.setRotation(45);
                return true;
            case R.id.subSize:
                button1.setScaleX(2);
                button2.setScaleX(2);
                return true;
        }
        return super.onContextItemSelected(item);
    }
}

배운 점

각 버튼마다 길게 눌렀을 때, contextmenu가 나오게 하는 법을 배웠다. 버튼마다 실행해야 하는 기능이 다르므로 menu.xml을 menu1, menu2 두가지로 설정해야 했다. registerForContextMenu를 이용하여 button들을  ContextMenu로 등록해주고 OnCreateContextMenu를 이용하여 기능을 부여해주면 된다.

 

실행화면

 

 

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

[Android] Dialog2  (0) 2021.08.23
[Android] Dialog  (0) 2021.08.23
[Android] Menu xml  (0) 2021.08.23
[Android] TapHost  (0) 2021.08.22
[Android] ViewFlipper  (0) 2021.08.22