Android向上推送式菜单,两个视图在同一布局内同屏显示。

最近在写一个百度地图的小应用,毕竟屏就那么大一点,要在上面放几个按钮,怎么布置都难看。百度了一下,发现侧滑菜单挺好,可百度地图就是用手滑的啊,你妹,这两个玩意居然还冲突,我去年买了个表。于是乎,就想到了上推菜单,不能用滑屏来处理,那就用个按钮来激发上推事件吧。因为是新手啥JB玩意都不懂,问群里的大大们,说得用平移动画,我又百度了半天一看都TM太高大上,用不好。偶然在一段代码中发现了

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);

lp.setMargins(0, 0, 0, 0);

menu.setLayoutParams(lp);

这个玩意,仔细琢磨了一宿,总算是实现了我的需求,话不多说上效果图,放代码,算是自己一个小突破,放博客里以记之。




首先创一个布局文件,其中包含两个Linealayout,也就是这上面用到的 主视图和菜单视图


    
    

    
    
  
 	
     
     
	    
      
      
		    
      
      
		    
      
      
		    
      
      
		    
      
      
		    
      
      
		
      
        
	
			
       
         
	    
      
      
	
     
     
	
    
     
     
	    
	     
      
      
	      
      
      
		     
       
       
		     
       
       
		
      
      
	
     
     

 
    
    

接下来就开始实现功能了


package com.example.upmenu;

import android.os.Bundle;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;

public class MainActivity extends Activity {
	
	Button up;
	LinearLayout menu,view;
	private LinearLayout.LayoutParams lp,lp2;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		up = (Button)findViewById(R.id.bt_up);
		menu = (LinearLayout) findViewById(R.id.menu);
		view = (LinearLayout) findViewById(R.id.view);
		up.setText("上拉菜单");
		
		up.setOnClickListener(new View.OnClickListener() {
			public void onClick(View arg0) {
				UpButton();
			}
			});
	}

	private void UpButton(){
		//设定上拉View的高度为主视图的三分之一
		int h;
		h= view.getHeight()/3;
		
		if (up.getText() == "上拉菜单"){
			//这里得分两条设置否则是还不到效果的,LinearLayout.LayoutParams(宽, 高),这个参数主要是用来显示平移后视图的显示方式。
			LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
			LinearLayout.LayoutParams lp2 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
			//lp.setMargins(left, top, right, bottom)可作参考。
			//设定菜单视图向上平移距离
			lp.setMargins(0, -h, 0, 0);
			//设定主视图顶端和底端同时向上平移距离,如果bottom不设为h的话,底端的按钮不会随主视图一起向上平移,搞了半天才弄出来,就是卡在这个参数没设置,靠!
            lp2.setMargins(0,-h, 0, h);
            menu.setLayoutParams(lp);
            view.setLayoutParams(lp2);
            up.setText("下拉菜单");
             
		} else if (up.getText() =="下拉菜单"){ 
			LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
			//两个视图返回原位置
			lp.setMargins(0, 0, 0, 0);
			menu.setLayoutParams(lp);
            view.setLayoutParams(lp);
            up.setText("上拉菜单");
			}
	}
	//返回按钮也可以取消菜单视图
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		UpButton();
        return super.onKeyDown(keyCode, event);
	}
}

不知道这种方法有多少人用,反正我在网上找了大半天也没有实现这个功能的,个人认为是最简单、最易懂的上推菜单了。





  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值