컨텍스트 메뉴 (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 |