Notice
Recent Posts
Recent Comments
Link
투케이2K
17. (AndroidStudio/android/java) PopupMenu 객체 사용해서 버튼 클릭 시 팝업 메뉴 호출 실시 본문
Android
17. (AndroidStudio/android/java) PopupMenu 객체 사용해서 버튼 클릭 시 팝업 메뉴 호출 실시
투케이2K 2021. 1. 22. 10:50/* =========================== */
[ 개발 환경 설정 ]
개발 툴 : AndroidStudio
개발 언어 : java
/* =========================== */
/* =========================== */
[소스 코드]
// ==== [전역 변수 선언] ====
String popup_tittle = "";
// ==== [팝업 메뉴 호출 이벤트] ====
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/**
* 1. new PopupMenu(현재 클래스, 부모 컴포넌트 클릭 이벤트 값);
* [부모 public void onClick(View v) - v 제어권자 사용]
*/
PopupMenu poup = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) {
//poup = new PopupMenu(A_Main.this, v, Gravity.END, 0, R.style.popup_style_right_over); //TODO 우측 [겹침] 표시됨
//poup = new PopupMenu(A_Main.this, v, Gravity.END, 0, R.style.popup_style_right_top); //TODO 우측 [위에] 표시됨
//poup = new PopupMenu(A_Main.this, v, Gravity.END, 0, R.style.popup_style_right_end); //TODO 우측 [아래에] 표시됨
//poup = new PopupMenu(A_Main.this, v, Gravity.TOP, 0, R.style.popup_style_left_over); //TODO 좌측 [겹침] 표시됨
//poup = new PopupMenu(A_Main.this, v, Gravity.TOP, 0, R.style.popup_style_left_top); //TODO 좌측 [위에] 표시됨
//poup = new PopupMenu(A_Main.this, v, Gravity.TOP, 0, R.style.popup_style_left_end); //TODO 좌측 [아래에] 표시됨
poup = new PopupMenu(A_Main.this, v); //TODO 일반 사용
}
else {
poup = new PopupMenu(A_Main.this, v); //TODO 일반 사용
}
getMenuInflater().inflate(R.menu.popup_menu, poup.getMenu());
poup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(getApplicationContext(), item.getTitle().toString(), Toast.LENGTH_SHORT).show();
popup_tittle = item.getTitle().toString();
//TODO ==== [메뉴 선택 동작 처리] ====
if(popup_tittle.contains("블루투스")){
Intent intent= new Intent(Settings.ACTION_BLUETOOTH_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
overridePendingTransition(0,0);
}
else if(popup_tittle.contains("와이파이")){
Intent intent= new Intent(Settings.ACTION_WIFI_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
overridePendingTransition(0,0);
}
else if(popup_tittle.contains("앱정보")){
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivity(intent);
overridePendingTransition(0,0);
}
return false;
}
});
poup.show(); // 메뉴를 띄우기
}
});
// ==== [popup_menu.xml] ====
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:title="설정" >
<menu>
<item android:title="블루투스"/>
<item android:title="와이파이"/>
</menu>
</item>
<item
android:title="앱정보" />
</menu>
// ==== [styles.xml] ====
<resources>
<!-- 기본 애플리케이션 액션바 표시 여부를 설정한다 -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- 애플리케이션 기본 색상 지정 -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<!-- 팝업 메뉴창 위치 조절 -->
<style name="popup_style_right_over" parent="@style/Widget.AppCompat.PopupMenu.Overflow">
<item name="android:dropDownHorizontalOffset">-8dp</item>
<item name="android:dropDownVerticalOffset">8dp</item>
</style>
<style name="popup_style_right_top" parent="@style/Widget.AppCompat.PopupMenu.Overflow">
<item name="android:dropDownHorizontalOffset">-8dp</item>
<item name="android:dropDownVerticalOffset">-100dp</item>
</style>
<style name="popup_style_right_end" parent="@style/Widget.AppCompat.PopupMenu.Overflow">
<item name="android:dropDownHorizontalOffset">-8dp</item>
<item name="android:dropDownVerticalOffset">150dp</item>
</style>
<style name="popup_style_left_over" parent="@style/Widget.AppCompat.PopupMenu.Overflow">
<item name="android:dropDownHorizontalOffset">8dp</item>
<item name="android:dropDownVerticalOffset">8dp</item>
</style>
<style name="popup_style_left_top" parent="@style/Widget.AppCompat.PopupMenu.Overflow">
<item name="android:dropDownHorizontalOffset">8dp</item>
<item name="android:dropDownVerticalOffset">-100dp</item>
</style>
<style name="popup_style_left_end" parent="@style/Widget.AppCompat.PopupMenu.Overflow">
<item name="android:dropDownHorizontalOffset">8dp</item>
<item name="android:dropDownVerticalOffset">150dp</item>
</style>
</resources>
/* =========================== */
[결과 출력]
/* =========================== */
/* =========================== */
[요약 설명]
* 1. new PopupMenu(현재 클래스, 부모 컴포넌트 클릭 이벤트 값);
[부모 public void onClick(View v) - v 제어권자 사용]
/* =========================== */
반응형
'Android' 카테고리의 다른 글
Comments