屏幕带有虚拟键盘时的适配

目前很多手机去掉了物理按键,使用在屏幕中悬浮虚拟键盘来取代,这样在项目开发时经常会遇到一些问题。由于虚拟键盘占据了屏幕的空间,使得屏幕的实际高度减小,而屏幕的宽度没有发生改变,这样的话,屏幕的适配很困难,我们需要将虚拟键盘隐藏掉:

public class MainActivity extends Activity {  
    
      
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        // main = getLayoutInflater().from(this).inflate(R.layout.main, null);  
        Window window = getWindow();  
        WindowManager.LayoutParams params = window.getAttributes();  
        <span style="color:#ffff66;"><span style="background-color: rgb(255, 0, 0);">params.systemUiVisibility = View.SYSTEM_UI_FLAG_LOW_PROFILE; </span> </span>
        window.setAttributes(params);  
  
        setContentView(R.layout.main);  
    }  
  
}  
红色显示的这一行中View可以选择三个参数:

SYSTEM_UI_FLAG_LOW_PROFILE 隐藏导航栏
  SYSTEM_UI_FLAG_VISIBLE         导航栏显示
SYSTEM_UI_FLAG_HIDE_NAVIGATION 要求导航栏完全隐藏-->但这对部分硬件设备有效。
隐藏导航栏的效果是只隐藏掉导航栏上面的图标,导航栏依然存在。完全隐藏导航栏可以将导航栏和图标全部隐藏掉,但是当手指接触屏幕的时候,导航栏又会显示出来。
如果页面中显示的是图片的话,那么由于导航栏的影响,图片距离两边的尺寸会发生改变,不符合设计要求。只能将图片的scaletype属性设置为fitXY,让图片充满,这样图片距离边框以及图片之间的尺寸可以符合要求,但是图片显示有点压缩,图片变得又点胖了。
如果导航栏遮挡了布局,导致一些操作无法执行的时候,就不能使用上述方式来进行处理了,在适配的时候就要先获取两次高度,然后对两次的高度进行比较,如果两次的高度不同,那就说明有虚拟键盘,通过两次高度之间的差值来获取虚拟键盘的高度,然后控件的底部添加一个和虚拟键盘等高的view,将被虚拟键盘遮盖住控件顶出来。
private String getDpi() {

		WindowManager manager = (WindowManager) this
				.getSystemService(Context.WINDOW_SERVICE);
		DisplayMetrics dm1 = new DisplayMetrics();
		manager.getDefaultDisplay().getMetrics(dm1);
		int width3 = dm1.widthPixels;
		int height3 = dm1.heightPixels;
		System.out.println(width3 + "*-----*" + height3);
		// 获取刨去虚拟按键高度的
		Display defaultDisplay = getWindowManager().getDefaultDisplay();
		int width2 = defaultDisplay.getWidth();
		int height2 = defaultDisplay.getHeight();
		System.out.println(width2 + "*-----" + height2);

		// 全部大小
		String dpi = null;
		Display display = getWindowManager().getDefaultDisplay();
		DisplayMetrics dm = new DisplayMetrics();
		@SuppressWarnings("rawtypes")
		Class c;
		try {
			c = Class.forName("android.view.Display");
			@SuppressWarnings("unchecked")
			Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);
			method.invoke(display, dm);
			dpi = dm.widthPixels + "*" + dm.heightPixels;
			System.out.println(dpi);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return dpi;
	}
(用全部高度 - 没有虚拟键盘的高度 )/2 就是 下面遮挡的高度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值