Android:PopupWindow、カスタムメニュー
PopupWindowを使用してメニューインタフェースをカスタマイズします.
PopupWindowに関するまとめ:
1.PopupWindow外領域をクリックしてPopupWindowを閉じ、PopupWindowを傍受する
2.WindowManager$BadTokenExceptionエラー解決方法
http://glblong.blog.51cto.com/3058613/1306012
3.あるビューの相対位置にメニューを指定する
本文は“空は痕跡がありませんが私は飛んだことがあります”のブログから出て、転載して作者と連絡してください!
public class MainActivity extends Activity
{
/**
* menu :
* 1. : menu
* 2. :
* (1) menu
* (2) menu
* (3) menu( )
* (4) back
* (5)
*
*/
private PopupWindow mPopupMenu;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LayoutInflater inflater = getLayoutInflater();
View menulayout = inflater.inflate(R.layout.optionmenu_layout, null);
mPopupMenu = new PopupWindow(menulayout, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
//
menulayout.findViewById(R.id.textView1).setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
mPopupMenu.dismiss();
}
});
// layout
menulayout.findViewById(R.id.mainmenu).setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
mPopupMenu.dismiss();
}
});
}
//
// @Override
// public void onBackPressed()
// {
// if(mPopupMenu.isShowing())
// {
// mPopupMenu.dismiss();
// }
// else
// {
// super.onBackPressed();
// }
// }
//
@Override
protected void onPause()
{
if(mPopupMenu.isShowing())
{
mPopupMenu.dismiss();
}
super.onPause();
}
// menu
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if(keyCode == KeyEvent.KEYCODE_MENU)
{
if(mPopupMenu.isShowing())
{
mPopupMenu.dismiss();
}
else
{
mPopupMenu.showAtLocation(findViewById(R.id.main), Gravity.BOTTOM, 0, 0);
}
return true;
}
if(keyCode == KeyEvent.KEYCODE_BACK)
{
if(mPopupMenu.isShowing())
{
mPopupMenu.dismiss();
}
else
{
finish();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
//4.2
/**
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
if(mPopupMenu.isShowing())
{
mPopupMenu.dismiss();
}
else
{
mPopupMenu.showAtLocation(findViewById(R.id.main), Gravity.BOTTOM, 0, 0);
}
// false, menu onCreateOptionsMenu ,
return false;
}
*/
}
PopupWindowに関するまとめ:
1.PopupWindow外領域をクリックしてPopupWindowを閉じ、PopupWindowを傍受する
// ,
mPhoneMenu.setBackgroundDrawable(getResources().getDrawable(R.color.emptylayout_bg));// setOutsideTouchable
mPhoneMenu.setFocusable(true);// menu ,menu
mPhoneMenu.setOutsideTouchable(false);// menu menu
mPhoneMenu.update();// update
// ,
mPhoneMenu.setOnDismissListener(new OnDismissListener()
{
@Override
public void onDismiss()
{
showBottomMenu();
}
});
2.WindowManager$BadTokenExceptionエラー解決方法
http://glblong.blog.51cto.com/3058613/1306012
3.あるビューの相対位置にメニューを指定する
popupWindow = new PopupWindow(layout,120,120); // ,popupWindow.getHeight()
popupWindow.setFocusable(true);
popupWindow.setOutsideTouchable(true);
popupWindow.setBackgroundDrawable(new BitmapDrawable());
int[] location = new int[2];// view
view.getLocationOnScreen(location);
popupWindow.showAtLocation(view, Gravity.NO_GRAVITY, location[0], location[1]-popupWindow.getHeight());
本文は“空は痕跡がありませんが私は飛んだことがあります”のブログから出て、転載して作者と連絡してください!