android 机型适配,屏幕适配

【Android高级进阶知识】Android-机型适配终极篇 现在新技术层出不穷,如果每次出新的技术,我们都深入的研究的话,很容易分散精力。新的技术可能很久之后我们才会在工作中用得上,当学的新技术无法学以致用,很容易被我们遗忘,到最后真的需要使用的时候,又要从头来过(虽然上手会更快)。我觉得身为技术人,针对新技术应该是持拥抱态度的,入了这一行你就应该知道这是一个活到老学到老的行业,所以面对新技术,不要抵触,拥抱变化就好了。Flutter 明显是一种全新的技术,而对于这个新技术在发布之初,花一个月的时间学习它,成本确实过高。 阅读详情

还是使用百分比和px相结合的方式


0:首先是以某一个尺寸为基础,例如1920*1080,

那么就将设计上面所有的尺寸都是以这个来标注的

然后把下面的文件复制出来以后运行,java GenerateValueFile 1080 1920

如果要考虑一些特殊的尺寸可以是 java GenerateValueFile 1080 1920 width,height_width,height,记住中间以_来分割的

然后我们会得到相应的x和y的px值,直接使用这个一般就可以了

但是有的时候我们还是要考虑用weight来进行一些比例的分配,


参考:http://blog.youkuaiyun.com/lmj623565791/article/details/45460089

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;

/**
 * Created by zhy on 15/5/3.
 */
public class GenerateValueFiles {

    private int baseW;
    private int baseH;

    private String dirStr = "./res";

    private final static String WTemplate = "<dimen name=\"x{0}\">{1}px</dimen>\n";
    private final static String HTemplate = "<dimen name=\"y{0}\">{1}px</dimen>\n";

    /**
     * {0}-HEIGHT
     */
    private final static String VALUE_TEMPLATE = "values-{0}x{1}";

    private static final String SUPPORT_DIMESION = "320,480;480,800;480,854;540,960;600,1024;720,1184;720,1196;720,1280;768,1024;800,1280;1080,1812;1080,1920;1440,2560;";

    private String supportStr = SUPPORT_DIMESION;

    public GenerateValueFiles(int baseX, int baseY, String supportStr) {
        this.baseW = baseX;
        this.baseH = baseY;

        if (!this.supportStr.contains(baseX + "," + baseY)) {
            this.supportStr += baseX + "," + baseY + ";";
        }

        this.supportStr += validateInput(supportStr);

        System.out.println(supportStr);

        File dir = new File(dirStr);
        if (!dir.exists()) {
            dir.mkdir();

        }
        System.out.println(dir.getAbsoluteFile());

    }

    /**
     * @param supportStr
     *            w,h_...w,h;
     * @return
     */
    private String validateInput(String supportStr) {
        StringBuffer sb = new StringBuffer();
        String[] vals = supportStr.split("_");
        int w = -1;
        int h = -1;
        String[] wh;
        for (String val : vals) {
            try {
                if (val == null || val.trim().length() == 0)
                    continue;

                wh = val.split(",");
                w = Integer.parseInt(wh[0]);
                h = Integer.parseInt(wh[1]);
            } catch (Exception e) {
                System.out.println("skip invalidate params : w,h = " + val);
                continue;
            }
            sb.append(w + "," + h + ";");
        }

        return sb.toString();
    }

    public void generate() {
        String[] vals = supportStr.split(";");
        for (String val : vals) {
            String[] wh = val.split(",");
            generateXmlFile(Integer.parseInt(wh[0]), Integer.parseInt(wh[1]));
        }

    }

    private void generateXmlFile(int w, int h) {

        StringBuffer sbForWidth = new StringBuffer();
        sbForWidth.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
        sbForWidth.append("<resources>");
        float cellw = w * 1.0f / baseW;

        System.out.println("width : " + w + "," + baseW + "," + cellw);
        for (int i = 1; i < baseW; i++) {
            sbForWidth.append(WTemplate.replace("{0}", i + "").replace("{1}",
                    change(cellw * i) + ""));
        }
        sbForWidth.append(WTemplate.replace("{0}", baseW + "").replace("{1}",
                w + ""));
        sbForWidth.append("</resources>");

        StringBuffer sbForHeight = new StringBuffer();
        sbForHeight.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
        sbForHeight.append("<resources>");
        float cellh = h *1.0f/ baseH;
        System.out.println("height : "+ h + "," + baseH + "," + cellh);
        for (int i = 1; i < baseH; i++) {
            sbForHeight.append(HTemplate.replace("{0}", i + "").replace("{1}",
                    change(cellh * i) + ""));
        }
        sbForHeight.append(HTemplate.replace("{0}", baseH + "").replace("{1}",
                h + ""));
        sbForHeight.append("</resources>");

        File fileDir = new File(dirStr + File.separator
                + VALUE_TEMPLATE.replace("{0}", h + "")//
                        .replace("{1}", w + ""));
        fileDir.mkdir();

        File layxFile = new File(fileDir.getAbsolutePath(), "lay_x.xml");
        File layyFile = new File(fileDir.getAbsolutePath(), "lay_y.xml");
        try {
            PrintWriter pw = new PrintWriter(new FileOutputStream(layxFile));
            pw.print(sbForWidth.toString());
            pw.close();
            pw = new PrintWriter(new FileOutputStream(layyFile));
            pw.print(sbForHeight.toString());
            pw.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static float change(float a) {
        int temp = (int) (a * 100);
        return temp / 100f;
    }

    public static void main(String[] args) {
        int baseW = 320;
        int baseH = 400;
        String addition = "";
        try {
            if (args.length >= 3) {
                baseW = Integer.parseInt(args[0]);
                baseH = Integer.parseInt(args[1]);
                addition = args[2];
            } else if (args.length >= 2) {
                baseW = Integer.parseInt(args[0]);
                baseH = Integer.parseInt(args[1]);
            } else if (args.length >= 1) {
                addition = args[0];
            }
        } catch (NumberFormatException e) {

            System.err
                    .println("right input params : java -jar xxx.jar width height w,h_w,h_..._w,h;");
            e.printStackTrace();
            System.exit(-1);
        }

        new GenerateValueFiles(baseW, baseH, addition).generate();
    }

}


无限泛化!AI背景文字识别,腾讯文字六宫格 本文介绍了生成大规模文字验证码数据集的方法,通过使用上百种字体和2万+字库,结合随机背景和数十种图像增强技术,生成了2000万+的多样化样本。该方法采用二阶段训练策略,确保模型对字体、形态、形变等具有强泛化能力,可适配腾讯、咸鱼等多种平台的文字验证码识别,包括生僻字和复杂形变情况。生成的模型在多种验证码场景下表现优异,但强调该方法仅用于技术研究,严禁非法用途。 阅读详情

相关推荐

【kubeEdge】离线部署

根据k8s的这个规则,可以将节点通过 label 的方式进行分组,比如将某几个节点都打上标签为 name=edge,当调度应用到 edge 节点时,会找到 label 为 edge 的所有节点,根据设置的副本数,将应用启动起来,如果设置的副本数超过了设置 edge 标签的节点数,则多出的将会显示 pending 状态,从而无法启动。清除 keadm init 或 keadm join 造成的影响均可使用 keadm reset,这个操作会删除 /etc/kubeedge 下的文件,如有需要请提前备份。

qq_42944740的博客 1716

Android屏幕屏幕适配小结,单位换算/屏幕信息/屏幕坐标/状态栏/点九图使用和制作

比起IOS开发总共不过区区几种设备型号,作为Android开发者,面对成千上万的机型,屏幕适配的工作就显得尤为重要。 官方中关于屏幕适配的几点建议: 拉伸和压缩你的布局,以适应各种不同的高度和宽度。更大的设备上,利用额外的屏幕。结合多个视图 创建复合控件来显示更多内容和轻松导航。为不同的屏幕密度(DPI)设备提供多套资源,以确保应用程序在任何设备上看起来不错。 1.px

萧萧北keno的专栏 4033

总结-NuerIPS2023-Direct Preference Optimization:Your Language Model is Secretly a Reward Model

对比PPO,DPO的泛化能力更强。

m0_60361484的博客 1606

机型适配

1、机型适配介绍 1.1 Android中机型适配出现的原因(系统碎片和屏幕碎片) Android平台的诞生为手机智能化的普及立下汗马功劳,但其最大的缺点也越来越凸显,那就是碎片化严重:设备繁多、品牌众多、版本各异,芯片、摄像头、分辨率不统一等等,这些都逐渐成为Android系统发展的障碍,碎片化严重不仅造成Android系统混乱,也导致Android应用隐形开发成本的增多。 下面这

everything_isok的博客 2018

告别密码烦恼:用Windows Server NPS给公司Wi-Fi和有线网加一道MAC地址白名单(附H3C交换机配置)

本文详细介绍了如何利用Windows Server NPS(网络策略服务器)与H3C交换机实现MAC地址白名单认证,为企业Wi-Fi和有线网络提供零密码安全方案。通过配置NPS服务器、网络策略及H3C交换机联调,实现无感知认证体验,降低运维负担,同时满足审计追溯需求。适用于中小企业网络管理,提升安全性与便捷性。

weixin_42535703的博客 365

使用HFSS仿真分支波导耦合器

本文介绍了分支波导耦合器的HFSS仿真设计过程。首先给出了器件关键参数(t=0.365mm,l=1.600mm等),详细说明了建模步骤:包括创建中心分支、设置变量参数、镜像复制两侧分支、矩形波导端口设计等操作。重点阐述了激励端口设置方法,包括四个端口的积分线绘制,以及求解频率设定。最后展示了S参数、幅度平衡度和相位差等关键性能指标的仿真结果提取方法。整个设计过程体现了HFSS在微波器件仿真中的参数化建模和结果分析能力。

shao666888的博客 180

Android开发中针对市面主流机型的适配方案

Android开发中常用的适配方案

mikehot的博客 1965

Cadence Virtuoso里搞定斩波运放AC仿真:PSS+PAC保姆级设置避坑指南

然而,当工程师们尝试在Cadence Virtuoso环境中对这种特殊结构进行AC特性分析时,往往会遇到传统AC仿真方法失效的困境——这正是PSS(Periodic Steady-State)与PAC(Periodic AC)仿真组合大显身手的场景。实际项目中我们常采用"先快后精"的两步法:先用快速设置确认大体趋势,再针对关键频段进行精细仿真。例如某次设计迭代中,将harmonics从10增加到20后,发现在1MHz处的相位裕度估算误差达15°,这解释了之前样机测试时的振荡问题。

weixin_33508411的博客 449

Android之机型适配

Android中的机型适配 在软件开发的过程中,为了让软件在不同的场景下都可以使用,所以机型适配是不可或缺并且非常重要耗时的一个环节

小冯的Blog 6470

【ros2】ros2_control 全面解析与实战指南

ros2_control 是 ROS2 生态中用于机器人实时控制的核心框架,旨在统一硬件接入接口、复用控制算法,避免重复开发,实现仿真与实机硬件的无缝迁移。其核心目标是简化不同硬件(传感器、执行器、完整系统)的集成流程,让开发者专注于控制逻辑而非硬件适配。创建类型功能包,依赖rclcpp。实现on_initupdate在中声明控制器插件,编译生成动态库。在 YAML 配置文件中指定自定义控制器类型,加载测试。

EnHengNa的博客 1469

iStoreOS等软路由插件卸载的残留?分享一款软路由高级卸载工具,自定义卸载,轻松解决卸载残留问题

iStoreOS用户看过来!👀 还在被插件包残留困扰吗?本文分享一款“高级卸载”的插件,助你深度清理iStoreOS系统,彻底解决软件卸载不净的痛点,告别频繁恢复出厂设置的烦恼!🚀

XiaoqiangClub的博客 1537

Android屏幕适配(一)

引言 Android系统作为目前手机市场占用率最高的系统,也由于它开源的特性,使得很多公司自己进行私人订制,尤其小米、华为等对android系统进行了深度定制,正因如此,手机屏幕的尺寸、分辨率造成android开发中屏幕适配的一大难点。上图便是android手机的屏幕分辨率的统计,是不是有点太花了,因为手机类型太多了,所以要做到所有屏幕适配基本不可能的,所以只能做到主流的屏幕尺寸,首先啊我们了解一

luweicheng24的博客 450

在ros中进行多传感器融合定位

ROS 中的 robots_localization 包是一个非常有用的包,可以使用各种卡尔曼滤波器融合任意数量的传感器!我们将使用它将全局姿势数据(x、y、z 和orientation)与机器人上的现有传感器融合,以实现更强大的定位!

如果想成为中心,那么就到中心去吧。 3001

android 屏幕适配,解决不同的机型适配 ,dp与px通用

我们在android 开发中总会遇到屏幕适配这种问题,对于一个初学者来说 这还在真是一个比价头疼的问题, 此前看到网上好多都是建议在res下新建多套布局。 1、选用主要分辨率来适配:480X800,720X1280,1080X1920  2、各个分辨率单独适配,res,dimens里设置各个对应的px,再统一调用,有系统筛选。  3、用weight和match等,少用dp在位置布局里  接...

qq_37014804的博客 4655

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

android 面试机型适配,Android屏幕适配;知识点+攻略+面试要点

引子屏幕适配是 android 开发/面试 绕不开的一个问题。本文 将屏幕适配的知识要点完整展现给各位读者。正文大纲android需要做屏幕适配的原因基础知识点(很重要)屏幕适配攻略正文android需要做屏幕适配的原因关键字:android碎片化android面世以来,google开源了android系统,各家厂商各自为政,导致屏幕尺寸没有统一标准,屏幕的宽高比各种各样,屏幕密度也是各个厂家攀比...

weixin_42470362的博客 451

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Android开发屏幕适配之smallestWidth

由于市场上的安卓机种类繁多,各类安卓机的屏幕像素和宽高比也是各式各样,所以android开发就需要设配各类机型和屏幕大小(羡慕隔壁ios),此文章介绍一个屏幕适配的主流框架——smallestWidth的使用方法。 集成 步骤1 在插件中搜索ScreenMatch,安装并重启Studio 步骤2 生成适配文件 ...

跑路羊崽丶的博客 547

Android 机型适配之屏幕适配

Supporting Different Screens PREVIOUSNEXT THIS LESSON TEACHES YOU TO Create Different Layouts Create Different Bitmaps YOU SHOULD ALSO READ Designing for Multiple Screens ...

张颜峰 204

Android多屏适配完美方案

1.多屏适配的概念 2.屏幕的基础概念 3.如何进行适配 4.现实的适配方案  5.理想的适配方案 。。犯懒,直接贴我做的PPT截图好啦。。。

chutianya的专栏 1364

弹性布局和AndroidAutoSize屏幕适配

导言: 技术在不断的革新,需要有新的技术代替老的方案,老的不再维护,新的一直推荐,作为技术也不能一直停滞不前 概念: 弹性布局(约束布局): ConstraintLayout可以算是RelativeLayout的升级版 屏幕适配: 百分比和最小宽度从px的AndroidAutoLayout方案到dp,pm等主副单位AndroidAutoSize方案 案例步骤: 1:ConstraintLayo...

Aile 3088

Android 适配多种屏幕

文字和尺寸的适配 我们这里需要将代码跑在一个1920*1200分辨率320dpi的平板上,发现所有的字体都变大了,看似1920*1200的分辨率比之前的1280*800要大一大圈,但是因为dpi也高,所以导致字体变大。 Configuration config = getResources().getConfiguration(); int smallestScreenWidth = con...

xiaohudemsdn的博客 413

android机型适配终极篇

一,基本概念1、分辨率,屏幕大小,密度 (1)分辨率。分辨率就是手机屏幕的像素点数,一般描述成屏幕的“宽×高”,安卓手机屏幕常见的分辨率有480×800、720×1280、1080×1920、1440x2560的2K屏等。720×1280表示此屏幕在宽度方向有720个像素,在高度方向有1280个像素。 (2)屏幕大小。屏幕大小是手机对角线的物理尺寸,以英寸(inch)为单位。比如某某手机为“5寸

曹银飞的专栏 2万+

Android多屏适配完美方案,android不同机型的适配的解决方案(完整篇)

现在,市场上android的机型太多,如何让自己的应用更多的适配不同的机型,这是一个非常现实的并且是要处理解决的问题。android官方给出的解决文档是从三个方向来分析处理的。(1)支持不同屏幕大小的设备(Supporting Different Screen Sizes)1.1 合理使用wrap_content,match_parent1.2 尽可能的使用 RelativeLayout1.3 ...

weixin_39599081的博客 1494

安卓屏幕适配方式(一):res生成各分辨率文件的方式

屏幕适配的方式有很多,有的公司采用这种方式,在这里记录一下     将下面代码复制到文本中,文件名为   GenerateValueFiles.java 下文代码的主函数中填写基准宽高后再进行以下操作(在main方法中将basW和baseH改成UI标注的基准宽高) 然后打开控制台 javac GenerateValueFiles.java java GenerateValueFi...

Hansion的博客 1359

Android百分比布局

使用GenerateValueFiles.java文件生成res文件夹首先GenerateValueFiles.java文件两个地方需要注意: 第一处: 箭头表示那处,代表着是你想要适配的机型,如果这个字符串里面没有,你可以加进去,当然,你加的话,要按照相同的格式加进去 第二处: 这里代表着是。你当前测试机的手机分辨率。。。。。如果你测试机分辨率不是这个,那么你就要修改这里 生成res文件

plq690816的博客 1380

实用Android 屏幕适配方案分享

如果我们换个角度看下这个问题,不知道大家有没有了解过web前端开发,或者说对于网页都不陌生,其实适配的问题在web页面的设计中理论上也存在,为什么这么说呢?电脑的显示器的分辨率、包括手机分辨率,我敢说分辨率的种类远超过Android设备的分辨率,那么有一个很奇怪的现象:为什么Web页面设计人员从来没有说过,尼玛适配好麻烦?那么,到底是什么原因,让网页的设计可以在千差万别的分辨率的分辨率中依旧能给用户一个优质的体验呢?其实就是一个原因,网页提供了百分比计算大小。

2401_84123201的博客 1079

android常用的适配机型,Android多机型适配

一,支持多语种前提要求是不要进行硬编码,应该将字符串提出来放入strings.xml中。然后需要对多语种支持时,通过res/values文件夹的名称来区分语种,比如:简体中文是values-zh-rCN繁体中文是values-zh-rTW英文是values-en参考:二,支持多屏幕尺寸1,确保系统可以适当地调整您布局的尺寸以便适应屏幕,2,根据屏幕配置提供合适的用户界面布局3,确保正确的布局应用到...

weixin_35353285的博客 616

Android 屏幕适配方案

转载请标明出处:http://blog.youkuaiyun.com/lmj623565791/article/details/45460089; 1、概述 大家在Android开发时,肯定会觉得屏幕适配是个尤其痛苦的事,各种屏幕尺寸适配起来蛋疼无比。如果我们换个角度我们看下这个问题,不知道大家有没有了解过web前端开发,或者说大家对于网页都不陌生吧,...

weixin_34293141的博客 3477
上一篇: [已解决]: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4
下一篇: xcode上传代码至GitHub
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值