Androidでpopupmenu
をカスタマイズしたいので、デフォルトのポップアップメニューにより多くのスペースが与えられるため、ポップアップメニューでカスタムレイアウトを変更しようとしていますが、方法がわかりません。 画像
注:この小さなポップアップデザインを行いたいので、デフォルトのポップアップメニューを使用しますが、カスタマイズします。
findViewById(R.id.menuclick).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
PopupMenu popupMenu = new PopupMenu(Sample1.this, view);
popupMenu.setOnMenuItemClickListener(Sample1.this);
popupMenu.inflate(R.layout.menus_layout);
popupMenu.show();
}
});
ボタンpopupMenu
からonClick
を膨張させるには、次のコードを使用します。
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PopupMenu popup = new PopupMenu(MainActivity.this, v);
popup.getMenuInflater().inflate(R.menu.pop_up, popup.getMenu());
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(MainActivity.this, "Some Text" + item.getTitle(), Toast.LENGTH_SHORT).show();
return true;
}
});
popup.show();//showing popup menu
}
});
[〜#〜] edit [〜#〜]
PopupMenuのスタイルを設定するには、次のスタイルを追加します。
<style name="PopupMenu" parent="@Android:style/Widget.PopupMenu">
<item name="Android:popupBackground">#ffffff</item>
</style>
また、テキストの横にアイコンを追加する必要があることに気付きました。 popupMenuにアイコンを追加することができます。ただし、代わりにポップアップウィンドウを使用することをお勧めします。サンプルコードを次に示します。
PopupWindow mypopupWindow;
setPopUpWindow();
btn=(Button)findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mypopupWindow.showAsDropDown(v,-153,0);
//showAsDropDown(below which view you want to show as dropdown,horizontal position, vertical position)
}
}
});
}
private void setPopUpWindow() {
LayoutInflater inflater = (LayoutInflater)
getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.popup, null);
Start=(RelativeLayout)view.findViewById(R.id.start_btn);
Pause=(RelativeLayout)view.findViewById(R.id.pause_btn);
Stop=(RelativeLayout)view.findViewById(R.id.stop_btn);
mypopupWindow = new PopupWindow(view,300, RelativeLayout.LayoutParams.WRAP_CONTENT, true);
ポップアップレイアウト
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical" Android:layout_width="wrap_content"
Android:background="@drawable/whitedrawable"
Android:paddingRight="0dp"
Android:layout_marginRight="0dp"
Android:layout_height="wrap_content">
<RelativeLayout
Android:id="@+id/btn1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<ImageView
Android:layout_centerHorizontal="true"
Android:layout_centerVertical="true"
Android:layout_alignParentLeft="true"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/startimg"
Android:id="@+id/startimg"
Android:paddingLeft="10dp"
Android:paddingRight="10dp"
Android:paddingTop="5dp"
Android:paddingBottom="5dp"
/>
<TextView
Android:layout_centerHorizontal="true"
Android:layout_centerVertical="true"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:paddingRight="0dp"
Android:text="Start"
Android:layout_toRightOf="@+id/startimg"
/>
<!-- Continue for other items-->
whitedrawable
を使用して、選択した背景を設定できます。 9patchを使用して、背景の影と丸い角を取得できます。
PopupWindowを閉じるには、次のコードを使用します。
mypopupWindow.getContentView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mypopupWindow.dismiss();
}
});
戻るボタンを使用して閉じるには、次を使用します。
@Override
public void onBackPressed() {
if(mypopupWindow.isShowing()) {
mypopupWindow.dismiss();
return;
}
super.onBackPressed();
}