关闭

自定义Popmenu

54人阅读 评论(0) 收藏 举报

一:感觉使用android自带的menu菜单背景默认颜色不是很好看,于是想改变一下背景颜色或是添加一个背景图片。

二:使用了setBackgroundColor和setTextColor等来修改背景颜色和文字颜色,费劲千辛万苦弄好之后,在模拟器上能够看见效果,谁知放到手机上却没有任何改变,显示的仍是默认的颜色样式,纳闷至极,三:在群里问了一下,说是可以自己写一个自定的MENU,于是开始了自定义menu的过程。对于我这种新手,花费了好几天的时间,不过最终,终于搞定。

 

三:先贴上我的自定义menu效果图:


四:下面贴上我的实现代码:

主要包括 一个自定义的menu类(CustomMenu)和自定义menu布局(layout_custom_menu)。

CustomMenu.java代码如下:

public final class CustomMenu {
	
	private static final String TAG="CustomMenu";	
	private static PopupWindow pop=null;
	private final Activity activity;
	
	public CustomMenu(Activity activity) {
		// TODO Auto-generated constructor stub
		this.activity = activity;
	}
	                
	public  PopupWindow getMenu(OnTouchListener touchListener,OnKeyListener keyListener) {

		View view = activity.getLayoutInflater().inflate(R.layout.layout_custom_menu, null);  // layout_custom_menu菜单的布局文件
		pop = new PopupWindow(view,ViewGroup.LayoutParams.FILL_PARENT,
				ViewGroup.LayoutParams.WRAP_CONTENT);          
		pop.setAnimationStyle(R.style.pop_anim_style);
		pop.setBackgroundDrawable(activity.getResources().getDrawable(R.drawable.pop_menu_bg));// 这句是关键,响应返回键必须的语句
		pop.setFocusable(true);
		pop.setTouchable(true);
		pop.setOutsideTouchable(true);
		view.setFocusableInTouchMode(true); 
		pop.setTouchInterceptor(touchListener);
		view.setOnKeyListener(keyListener);
		
		Log.i(TAG, pop.toString());
		return pop;
	
}

默认加载的activity_main.xml布局我这里就不再贴出代码,对本应用的实现没有影响。贴出  layout_custom_menu.xml代码如下:

MainActivity.java代码如下:

public class MainActivity extends Activity {

	private String skey="";
	private View textview3;
	private long ntime;
	private Button btn1,btn2;
	private PopupWindow pop;
	public MyHandler myHandler;
	private ImageButton imgIndex;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		CustomMenu cm = new CustomMenu(this); 
		pop = cm.getMenu(touchListener, keyListener);
		setContentView(R.layout.activity_main);				
	}


	
	/**
	 * 处理键盘事件
	 */
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub

		if (keyCode == KeyEvent.KEYCODE_MENU) {
			if (pop.isShowing()) {
				pop.dismiss();
			} else {	
				pop.showAtLocation(findViewById(R.id.tt),Gravity.BOTTOM, 0, 0);

			}
		}
		
		
		
		return super.onKeyDown(keyCode, event);
	}
	
	

	 /**
	 * 处理键盘事件
	 */
	
		private OnTouchListener touchListener = new OnTouchListener() {

			public boolean onTouch(View v, MotionEvent event) {
				if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
					pop.dismiss();
				}
				return false;
			}
		};
		private OnKeyListener keyListener = new OnKeyListener() {

			public boolean onKey(View v, int keyCode, KeyEvent event) {
				if (event.getAction() == KeyEvent.ACTION_DOWN
						&& keyCode == KeyEvent.KEYCODE_MENU) {
					pop.dismiss();
					return true;
				}
				return false;
			}
		};

	
	
	


}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:301次
    • 积分:30
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:5篇
    • 译文:0篇
    • 评论:0条
    文章存档