방법1
<ImageButton
android:id="@+id/imageButton_Data"
android:layout_width="50dp"
android:layout_height="50dp"
/>
style.xml
<style name="PopupMenuTheme" parent="Widget.AppCompat.PopupMenu">
<item name="popupMenuStyle">@style/PopupMenu</item>
<item name="android:itemTextAppearance">@style/itemTextStyle.AppTheme</item>
<item name="android:listPreferredItemHeightSmall">75dp</item>
</style>
<style name="PopupMenu" parent="ThemeOverlay.AppCompat.Dark">
<item name="android:popupBackground">@drawable/menu_style</item>
</style>
<style name="itemTextStyle.AppTheme" parent="@android:style/TextAppearance.Widget.IconMenu.Item">
<item name="android:textColor">@color/색</item>
<item name="android:textSize">18sp</item>
</style>
drawable\menu_style.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<corners android:bottomLeftRadius="15dp"
android:topLeftRadius="15dp">
</corners>
<solid android:color="#39FFFFFF" />
</shape>
</item>
</layer-list>
binding.imageButtonData.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
val wrapper: Context = ContextThemeWrapper(
this@현재액티비티명,
R.style.PopupMenuTheme
)
val popup = PopupMenu(wrapper, v) //v는 클릭된 뷰를 의미
var setting = SpannableString("환경설정" + " ").also {
it.setSpan(
AlignmentSpan.Standard(Layout.Alignment.ALIGN_OPPOSITE),
0,
it.length,
0
)
}
var exit = SpannableString("종료" + " ").also {
it.setSpan(
AlignmentSpan.Standard(Layout.Alignment.ALIGN_OPPOSITE),
0,
it.length,
0
)
}
popup.menu.add(0, 0, 0, setting)
popup.menu.add(0, 1, 1, exit)
popup.setOnMenuItemClickListener { item ->
when (item.itemId) {
0 -> {
startActivity(
Intent().setClassName(
this@현재액티비티명,
"com.패키지명.클래스명"
)
)
}
1 -> {
// TODO
}
}
false
}
popup.show()
}
})
방법2
버튼클릭으로 팝업메뉴 나타내기
버튼하나를 만들어서 클릭시 팝업메뉴를 간단하게 표시해보겠습니다. 그리고 팝업마다 클릭 이벤트를 주는 방법도 알아보겠습니다.
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:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
tools:context=".MainActivity">
<Button
android:id="@+id/btn"
android:text="팝업메뉴"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
그리고 res 하위 폴더에 menu폴더를 만들어 줍니다.
popup.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_menu1"
android:title="메뉴 1" />
<item
android:id="@+id/action_menu2"
android:title="메뉴 2" />
<item
android:id="@+id/action_menu3"
android:title="메뉴 3" />
</menu>
이제 팝업메뉴 버튼클릭시 이벤트를 나타내게 한번 작성해보겠습니다.
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
final PopupMenu popupMenu = new PopupMenu(getApplicationContext(),view);
getMenuInflater().inflate(R.menu.popup,popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
if (menuItem.getItemId() == R.id.action_menu1){
Toast.makeText(MainActivity.this, "메뉴 1 클릭", Toast.LENGTH_SHORT).show();
}else if (menuItem.getItemId() == R.id.action_menu2){
Toast.makeText(MainActivity.this, "메뉴 2 클릭", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(MainActivity.this, "메뉴 3 클릭", Toast.LENGTH_SHORT).show();
}
return false;
}
});
popupMenu.show();
}
});
}
}
'프로그래밍 > Android' 카테고리의 다른 글
[Android] Meterial 디자인 적용 (0) | 2023.02.21 |
---|---|
[Android] LinearLayout, ConstraintLayout의 차이점 (0) | 2023.02.21 |
[Android] 안드로이드 스튜디오 구버전 다운로드 (0) | 2023.02.16 |
[AutoADB] 휴대폰이 연결될때 자동으로 scrcpy 연결 (0) | 2023.02.13 |
[Android] 키보드 검색버튼 클릭시 이벤트 (0) | 2023.02.09 |
댓글