热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

android现有项目轻微改动适配平板心得

这篇文章主要介绍了android现有项目轻微改动适配平板心得,对android适配感兴趣的同学可以参考下

最近已经开发好几年的项目需要适配平板,同时平板上面需要横竖屏进行切换,还要在手机上能够正常使用,经过调研以后,在改动最小的情况下,对项目进行必要的修改,完成相应的需求,现在将大概的思路和涉及到的内容整理如下:

清单文件放开强制横竖屏的限制

横竖屏切换时页面需要重绘,生命周期会重新走,为了防止多次重复走生命周期,在清单文件中进行设置

android:cOnfigChanges="keyboardHidden|orientation|screenSize"

对界面进行分屏处理

左右分屏,base中进行横向和竖向判断,进行全屏或者占屏幕几份的处理(初次加载)

@Override
	protected void onStart() {
		super.onStart();
		setScreenDirection();
	}
 
	private void setScreenDirection() {
		boolean screenDirection = ScreenDirectionUtil.getInstance().getScreenDirection(this);
		if (screenDirection) {
			ScreenDirectionUtil.getInstance().setScreenProportion(this,1,1,2);
		}else {
			ScreenDirectionUtil.getInstance().setScreenProportion(this,5,3,2);
		}
	}

由于设置了configChanges,横竖屏切换时生命周期不再走,在onConfigurationChanged中判断横竖屏方向,进行屏幕占比动态配置

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE) {
            // 横屏
            ScreenDirectionUtil.getInstance().setScreenProportion(this,5,3,2);
        }else if(newConfig.orientation==Configuration.ORIENTATION_PORTRAIT) {
            // 竖屏
            ScreenDirectionUtil.getInstance().setScreenProportion(this,1,1,2);
        }
    }

设置activity的穿透点击,平板的左侧一级页面可以一直点击

清单文件中给activity设置style

android:theme="@style/transparent_activity"
 

activity中设置可穿透点击

getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);

屏幕的占比动态设置方法

 /**
     * 设置屏幕的横向比例
     *
     * @param context
     * @param proportion 屏幕分成几份
     * @param number 占用屏幕份数
     * @param position 1: 左  2: 右
     */
    public void setScreenProportion(Activity context, int proportion,int number,int position) {
        // 为获取屏幕宽、高
        Display display = context.getWindowManager().getDefaultDisplay();
        Window win = context.getWindow();
        win.getDecorView().setPadding(0, 0, 0, 0);
        WindowManager.LayoutParams lp = win.getAttributes();
        if (proportion > 1){
            lp.width = (int) (display.getWidth() * number / proportion);
        }else {
            lp.width = WindowManager.LayoutParams.MATCH_PARENT;
        }
        lp.height = WindowManager.LayoutParams.MATCH_PARENT;
        //设置对话框置顶显示
        lp.gravity = Gravity.TOP;
        //设置对话框置顶显示
        if (position == 1) {
            lp.gravity = Gravity.LEFT;
        }else {
            lp.gravity = Gravity.RIGHT;
        }
        win.setAttributes(lp);
    }

是否是平板的判断方法

/**
     * 判断是否是平板
     * @param context
     * @return true: 平板   false:不是平板
     */
    public boolean isPad(Context context) {
        return (context.getResources().getConfiguration().screenLayout
                & Configuration.SCREENLAYOUT_SIZE_MASK)
                >= Configuration.SCREENLAYOUT_SIZE_LARGE;
    }

判断是横屏还是竖屏

/**
     * 获取屏幕方向
     *
     * @param context
     * @return true: 竖屏 false: 横屏
     */
    public boolean getScreenDirection(Context context) {
        DisplayMetrics d = context.getResources().getDisplayMetrics();
        if (d.heightPixels > d.widthPixels) {
            return true;
        }
        return false;
    }

上面的是主要涉及到的相关注意事项和用到的方法

以上就是android现有项目轻微改动适配平板心得的详细内容,更多关于android现有项目适配平板的资料请关注其它相关文章!


推荐阅读
  • 在使用高德地图内置导航功能时遇到AMapNavi组件出现空指针异常,经过多次排查发现问题是由于so库的兼容性引起的。本文将详细介绍如何通过调整项目配置来解决这一问题。 ... [详细]
  • 深入解析IGMP各版本特性及其演进
    本文详细探讨了Internet组管理协议(IGMP)的不同版本,包括IGMPv1的基础功能、IGMPv2的增强特性和IGMPv3的重要改进。特别分析了IGMPv3如何支持特定源组播(SSM)模型,并介绍了各版本之间的主要差异。 ... [详细]
  • 本文详细介绍了ActivityManagerService (AMS) 的工作原理及其在Android系统中的重要角色。AMS作为system_server进程的一部分,在系统启动时加载,负责管理和协调应用程序中的Activity和服务(Service)。文章将通过具体的接口图和通信流程,帮助读者更好地理解AMS的工作机制。 ... [详细]
  • EasyMock实战指南
    本文介绍了如何使用EasyMock进行单元测试,特别是当测试对象的合作者依赖于外部资源或尚未实现时。通过具体的示例,展示了EasyMock在模拟对象行为方面的强大功能。 ... [详细]
  • 题目 CF1245F: 清理春天的数学挑战 描述了一个数学问题:给定一个区间 [L, R](0 ≤ L, R ≤ 10^9),求该区间内满足 x + y = x ∧ y 的数对 (x, y) 的总数。 ... [详细]
  • 探讨在Android JNI/NDK环境中遇到的SIGSEGV崩溃问题,以及如何通过自定义信号处理器进行调试的方法。 ... [详细]
  • 三星Galaxy S8/S8+即将登场,全面解析新旗舰
    3月29日晚11点,备受瞩目的三星Galaxy S8/S8+将正式发布。作为三星在Note 7爆炸事件后的重磅产品,S8/S8+不仅承载着恢复消费者信心的重任,其创新的设计和技术也备受期待。 ... [详细]
  • 本文详细介绍了在使用Socket进行网络编程时,遇到链接器错误`undefined reference to WSAStartup@8`的解决方案,适用于多种开发环境。 ... [详细]
  • 深入解析Android中的SQLite数据库使用
    本文详细介绍了如何在Android应用中使用SQLite数据库进行数据存储。通过自定义类继承SQLiteOpenHelper,实现数据库的创建与版本管理,并提供了具体的学生信息管理示例代码。 ... [详细]
  • LCUI 2.1.0 版本现已推出,这是一个用 C 语言编写的图形用户界面开发库,适合创建轻量级的桌面应用程序。此次更新包括多项修复和功能增强,并正式宣布将启动 Android 支持的开发计划。 ... [详细]
  • Android手机用户如何轻松连接蓝牙耳机
    对于拥有Android智能手机的用户来说,连接蓝牙耳机不仅操作简便,还能极大地提升日常听音乐、通话或游戏体验的质量。 ... [详细]
  • 本文详细介绍如何在IntelliJ IDEA 14中打包Android应用APK文件,并提供查询SHA1值的具体步骤。 ... [详细]
  • 本文介绍如何在Android应用中通过调用系统图库来选择并获取图片,以供进一步处理或展示。 ... [详细]
  • python开发mysql:单表查询&多表查询
    一单表查询,以下是表内容二多表查询,一下是表内容三总结&表创建过程单 ... [详细]
  • MacOS 重装指南
    本文详细介绍了如何通过U盘启动并重新安装MacOS,包括遇到安装问题时的解决方案。 ... [详细]
author-avatar
Sunny-阿坚
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有