컨텍스트 메뉴 (contextmenu)

사용자가 항목 위에서 오래 누르기를 하면 컨텍스트 메뉴가 표시된다.

PC에서 마우스 우측 버튼 눌렀을 때 나오는 메뉴와 유사하다.


모듈은 Basic Activity로 생성.



1. 레이아웃 context_main.xml


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.progdv.contextmenu.MainActivity"
tools:showIn="@layout/activity_main">

<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="길게 눌러주세요!" />
</RelativeLayout>



2. 기능 구현 MainActivity.java


onCreateContextMenu 메서드를 오버라이드해서 컨텍스트 메뉴를 추가해준다.

package com.progdv.contextmenu;

import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.ContextMenu;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

TextView tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tv = (TextView)findViewById(R.id.tv);
registerForContextMenu(tv); // 컨텍스트 메뉴에 tv 등록



Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}


@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
// super.onCreateContextMenu(menu, v, menuInfo);
// 컨텍스트 메뉴 추가
menu.setHeaderTitle("배경색 선택"); // 메뉴 제목
menu.add(0, 1, 0, "배경색: 빨강"); // ID값 부여
menu.add(0, 2, 0, "배경색: 초록");
menu.add(0, 3, 0, "배경색: 파랑");
}


@Override // 마우스 우클릭-generate에서 override 찾아 넣어줌
public boolean onContextItemSelected(MenuItem item) {

switch(item.getItemId()) {
case 1:
tv.setBackgroundColor(Color.RED);
break;
case 2:
tv.setBackgroundColor(Color.GREEN);
break;
case 3:
tv.setBackgroundColor(Color.BLUE);
break;
default:
return super.onContextItemSelected(item);
}
return false;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}


누르고 있으면 다음과 같이 창이 뜬다.






컨텍스트 메뉴에서 해당 창을 누르면 배경색이 바뀌는 것을 확인할 수 있다.














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

명시적 인텐트 (explicit intent)  (0) 2016.04.29
대화상자 (Dialog): AlertDialog  (0) 2016.04.28
액션바 ActionBar_Items  (0) 2016.04.28
Toast: 랜덤 숫자 맞추기 게임  (0) 2016.04.26
이벤트 처리: Toast 이벤트 기초  (0) 2016.04.26
Posted by netyhobby
,