반응형
Context Menu
전용 Menu 버튼을 제공하지 않아도 됨
사용자가 요소를 길게 클릭하면 나타나는 플로팅 메뉴
Activity_main.xml
먼저 길게 클릭하면 Context Menu가 나타날 수 있는 요소인 Button을 LinearLayout에 생성
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/backBtn"
android:text="배경바꾸기"></Button>
</LinearLayout>
menu.xml
메뉴를 정의하기 위해서는 프로젝트의 res/menu/
디렉토리에서 XML파일을 생성하고 요소로 메뉴를 빌드
<?xml version="1.0" encoding="utf-8"?>
<!-- 메뉴 항목의 컨테이너인 Menu를 정의 -->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 메뉴 내부의 단일 항목을 나타내는 MenuItem 생성 -->
<item
android:id="@+id/backRed"
android:title="배경을 빨간색으로 변경"></item>
<item
android:id="@+id/backBlue"
android:title="배경을 파란색으로 변경"></item>
<item
android:id="@+id/backYellow"
android:title="배경을 노란색으로 변경"></item>
<item
android:id="@+id/backGreen"
android:title="배경을 초록색으로 변경"></item>
</menu>
MainActivity.java
Button을 클릭하면 배경색을 변경할 수 있는 메뉴가 나타나기 위해 LinearLayout과 Button 을 연결
public class MainActivity extends AppCompatActivity {
LinearLayout layout;
Button backBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
layout = (LinearLayout) findViewById(R.id.layout);
backBtn = (Button) findViewById(R.id.backBtn);
// registerForContextMenu()를 호출하여 컨텍스트 메뉴를 연결해야하는 버튼을 등록
registerForContextMenu(backBtn);
}
// onCreateContextMenu() 구현 - 긴 클릭 이벤트를 수신하면 시스템에서 해당 메서드를 호출
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
// MenuInflater를 사용하면 메뉴 리소스에서 컨텍스트 메뉴를 확장시킬 수 있음
MenuInflater menuInflater = getMenuInflater();
if (v == backBtn) {
// 기존 레이아웃에 menu를 삽입하기 위해 .inflate(리소스 폴더 내 xml 파일 지정, menu);
menuInflater.inflate(R.menu.menu1, menu);
}
}
// onContextItemSelected() 구현 - 사용자가 메뉴 항목을 선택하면 해당 메서드 호출
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
// getItemId() 메서드는 선택된 메뉴 항목의 ID를 쿼리 - 성공적으로 처리시 true를 반환
// menu.xml에서 각 item에 정의한 ID를 매칭시켜 java코드로 layout의 배경색을 변경
if(item.getItemId() == R.id.backRed){
layout.setBackgroundColor(Color.RED);
}else if(item.getItemId() == R.id.backBlue){
layout.setBackgroundColor(Color.BLUE);
}else if(item.getItemId() == R.id.backYellow){
layout.setBackgroundColor(Color.YELLOW);
}else if(item.getItemId() == R.id.backGreen){
layout.setBackgroundColor(Color.GREEN);
}
return super.onContextItemSelected(item);
}
}
'Android' 카테고리의 다른 글
[Android] ActionBar(액션바) (0) | 2021.10.29 |
---|---|
[Android] Activity와 Intent (0) | 2021.10.28 |
[Android] ViewFlipper (0) | 2021.10.26 |
[Android] AutoCompleteTextView(자동완성 텍스트뷰) (0) | 2021.10.25 |
[Android] Chronometer를 이용해 스탑워치 만들기 (0) | 2021.10.24 |