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 |