读书人

LayoutInflater中施用的注意点以及Pop

发布时间: 2012-08-24 10:00:21 作者: rapoo

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

?

读书人网 >移动开发

热点推荐