LayoutInflater中使用的注意点以及PopupWindow的使用
LayoutInflater:
?
mLayout = (LinearLayout)LayoutInflater.from(context).inflate(resLayoutId, null);
?
--->其中resLayoutId为布局文体的id,注意必须是layout级别的 ?:?R.layout.名称
?
?
PopupWindow的使用:
?
? ? ?PopupWindow是阻塞对话框,只有在外部线程 或者 PopupWindow本身做退出操作才行。PopupWindow完全依赖Layout做外观,在常见的开发中,PopupWindow应该会与AlertDialog常混用。
?
public class MenuActivity extends Activity {private static final String TAG = "MenuActivity";MenuPopupWindow menu1;View lt; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); lt = findViewById(R.id.ll_root); menu1 = new MenuPopupWindow(this, R.layout.menu); }@Overridepublic boolean onCreateOptionsMenu(Menu menu) {menu.add(1,100,1,"menu");Log.e(TAG, "======onCreateOptionsMenu=======");return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onMenuOpened(int featureId, Menu menu) {Log.e(TAG, "======onMenuOpened=======");/*if(menu1!= null){if(menu1.isShowing()){menu1.dismiss();}else{*///menu1.showAtLocation(lt, Gravity.BOTTOM, 0, 0);//}//}return super.onMenuOpened(featureId, menu);}@Overridepublic boolean onPrepareOptionsMenu(Menu menu) {Log.e(TAG, "======onPrepareOptionsMenu=======");menu1.showAtLocation(lt, Gravity.BOTTOM, 0, 0);return false;//super.onPrepareOptionsMenu(menu);}class MenuPopupWindow extends PopupWindow{LinearLayout mLayout;public MenuPopupWindow(Context context, int resLayoutId) {super(context);mLayout = (LinearLayout)LayoutInflater.from(context).inflate(resLayoutId, null); this.setContentView(mLayout);this.setWidth(LayoutParams.FILL_PARENT);this.setHeight(LayoutParams.WRAP_CONTENT);this.setFocusable(true);/// 设置 popupWindow 的背景为透明色}}
?注意这里在,onPrepareOptionsMenu这个方法中return的值是false,执行menu的顺序是:
?
? ?onPrepareOptionsMenu-----true---->onMenuOpened----true---->drawmenu
?