오늘도 삽질중

android PopupMenu 사용법 및 스타일 적용 본문

안드로이드

android PopupMenu 사용법 및 스타일 적용

Choi3950 2020. 2. 12. 00:13
반응형

안드로이드 팝업메뉴 기본사용법 및 스타일 적용방법입니다.





popup_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000">

<Button
android:id="@+id/btn_popup_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="팝업 메뉴 실행" />


<ImageView
android:id="@+id/image_icon"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/image_toolbar_more"
android:layout_alignParentRight="true"/>

</RelativeLayout>





popup_menu.java


import android.os.Bundle;
import android.view.Gravity;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.PopupMenu;

public class PopupMenuActivity extends AppCompatActivity implements View.OnClickListener, PopupMenu.OnMenuItemClickListener {

PopupMenu popupMenu;
Button btnPopupShow;
ImageView imageIcon;


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

btnPopupShow = findViewById( R.id.btn_popup_show );
imageIcon = findViewById( R.id.image_icon );
btnPopupShow.setOnClickListener( this );

// style 적용안됨
// popupMenu = new PopupMenu( this , imageIcon , Gravity.END, R.attr.actionOverflowMenuStyle, 0 );
popupMenu = new PopupMenu( this, imageIcon, Gravity.END, 0, R.style.MyPopupMenu );
popupMenu.getMenu( ).add( 0, 0, 0, "리스트 첫번째" );
popupMenu.getMenu( ).add( 0, 1, 0, "리스트 두번째" );
popupMenu.getMenu( ).add( 0, 2, 0, "리스트 세번째" );
popupMenu.setOnMenuItemClickListener( this );

}

@Override
public void onClick( View v ) {
if ( v == btnPopupShow ) {
popupMenu.show( );
}
}


@Override
public boolean onMenuItemClick( MenuItem item ) {
switch ( item.getItemId( ) ) {
case 0: //리스트 첫번째 클릭시 호출
break;
case 1: //리스트 두번째 클릭시 호출
break;
case 2: //리스트 세번째 클릭시 호출
break;
}

return false;
}
}





res -> values -> styles.xml 에 추가

원하는 만큼 간격 조절이 가능합니다.

<style name="MyPopupMenu" parent="@style/Widget.AppCompat.PopupMenu.Overflow">
<item name="android:dropDownHorizontalOffset">-8dp</item>
<item name="android:dropDownVerticalOffset">8dp</item>
</style>




실행 결과












반응형
Comments