Android 适配(百分比布局 GridView+ListView 项布局适配)

安卓布局本质:ViewGroup约束系统与页面生命周期耦合 安卓布局不是静态UI描述,而是由ViewGroup驱动的动态约束系统,其核心在于measure-layout-draw三阶段与Activity/Fragment生命周期深度耦合。理解ConstraintLayout的约束求解原理、LinearLayout的weight分配机制及RelativeLayout的依赖图局限,是应对设备碎片化、折叠屏适配、TV焦点导航等工程挑战的基础。布局性能瓶颈(如嵌套过深、onMeasure耗时超标)往往源于对ViewGroup测量逻辑和MeasureSpec传递规则的误读。掌 阅读详情

百分比布局

参考鸿洋大神的百分比布局扩展,详细请看这里

优快云:https://blog.youkuaiyun.com/lmj623565791/article/details/46767825

github:https://github.com/hongyangAndroid/android-percent-support-extend

支持的布局

com.zhy.android.percent.support.PercentLinearLayout

com.zhy.android.percent.support.PercentRelativeLayout

com.zhy.android.percent.support.PercentFrameLayout

支持的属性 

  • layout_heightPercent
  • layout_widthPercent
  • layout_marginBottomPercent
  • layout_marginEndPercent
  • layout_marginLeftPercent
  • layout_marginPercent
  • layout_marginRightPercent
  • layout_marginStartPercent
  • layout_marginTopPercent
  • layout_textSizePercent
  • layout_maxWidthPercent
  • layout_maxHeightPercent
  • layout_minWidthPercent
  • layout_minHeightPercent
  • layout_paddingPercent
  • layout_paddingTopPercent
  • layout_paddingBottomPercent
  • layout_paddingLeftPercent
  • layout_paddingRightPercent

使用下来发现,基本能满足手机适配,但当屏幕宽高比例差距太大时,会有一定的拉伸,具体看自己项目实际运行环境

GridView / ListView 的适配

还有一个问题是对 GridView 跟 ListView 的项布局支持不太好,下面记录下如何适配项布局,到达百分比适配的效果

首先GridView和ListView的父类都是 AbsListView,可以在其中找到一个方法 LayoutParams()

        public LayoutParams(int w, int h) {
            super(w, h);
        }

 对布局大小的设置,在代码中设置 宽高占比

在适配器中,通过代码去设置 百分比宽高

public class SearchGirdViewAdapter extends BaseAdapter {

    private Context context;
    private List<String> list;
    private GridView gridView;

    public SearchGirdViewAdapter(Context context, List<String> departments, GridView gridView) {
        this.gridView = gridView;
        this.context = context;
        list = new ArrayList<>();
        list.addAll(departments);
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View v, ViewGroup parent) {

        //获取 gridView 的宽高
        int width = gridView.getWidth();
        int heigth = gridView.getHeight();

        //设置 宽高比例
        AbsListView.LayoutParams param = new AbsListView.LayoutParams((int) (width * 0.23), (int) (heigth * 0.3));

        SearchGirdViewAdapter.ViewHolder viewHolder;
        if (null == v) {
            viewHolder = new SearchGirdViewAdapter.ViewHolder();
            v = LayoutInflater.from(context).inflate(R.layout.item_fragment_search, parent, false);
            v.setLayoutParams(param);
            viewHolder.title = v.findViewById(R.id.search_item_title);
            v.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) v.getTag();
            v.setLayoutParams(param);
        }
        viewHolder.title.setText(list.get(position));
        return v;
    }

    class ViewHolder {
        TextView title;
    }


}

主要看 getView()方法中, 通过代码设置 LayoutParams, 这里我测试代码,直接设置 宽*0.23 高*0.3(此处获取的GridView宽高大小,是在布局文件中占的大小,不是整个屏幕的大小)

项布局文件如下

<?xml version="1.0" encoding="utf-8"?>
<com.zhy.android.percent.support.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:background="@drawable/category_genre_item_bg">

    <TextView
        android:id="@+id/search_item_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:ellipsize="end"
        android:gravity="center"
        android:maxLines="1"
        android:text="电台测试"
        android:textColor="#fff"
        app:layout_textSizePercent="12%w" />

</com.zhy.android.percent.support.PercentRelativeLayout>

可以看到,使用的是PercentRelativelayout,中间就简单放了一个TextView

运行效果如下

红色部分,GridView显示情况,ListView情况类似。具体实现可以在适配器中增加两个宽高百分比属性,外部通过代码设置值,做到灵活应用。

 

 

Android下拉刷新控件SwipeRefreshLayout实战指南 下拉刷新是移动应用中最基础的用户交互模式之一,其本质是将用户滑动意图转化为数据加载行为并提供符合Material Design规范的视觉反馈。SwipeRefreshLayout作为Android官方提供的轻量级嵌套滚动刷新组件,基于NestedScrollingParent/Child协议实现,无需侵入业务逻辑即可完成触发检测、状态管理与动画渲染。相比早期PullToRefresh等第三方库,它原生兼容RecyclerView、WebView等现代滚动容器,具备低耦合、高稳定性与强可定制性等工程优势。本文 阅读详情

相关推荐

Unity UI性能优化实战:从UGUI迁移到UI Toolkit的性能提升与架构解析

在游戏开发中,UI系统的性能直接影响用户体验,尤其是在移动端和复杂界面场景下。传统的即时模式UI架构,如Unity的UGUI,每帧都需要重建UI元素,导致CPU开销随界面复杂度线性增长,成为性能瓶颈。而保留模式UI架构通过分离UI状态与渲染,仅在状态变化时更新,大幅降低了静态和低频更新界面的CPU占用。这种架构革新为复杂、数据驱动的游戏界面带来了显著的性能提升和更优的内存管理。UI Toolkit作为Unity新一代的UI系统,正是基于保留模式构建,并引入了视觉树、样式表等现代前端开发理念,支持类似CSS的

weixin_34054931的博客 356

Android XML布局开发指南:从基础到性能优化

XML布局是Android UI开发的核心技术,通过声明式语法实现界面与逻辑的分离。其工作原理是将视图层级结构转化为View对象树,具有可视化编辑、多设备适配和维护便捷等技术优势。在工程实践中,LinearLayout、RelativeLayout和ConstraintLayout是最常用的三种布局方式,其中ConstraintLayout凭借其扁平化结构和约束关系,能有效解决嵌套层级过深导致的性能问题。热门的布局复用技术如include标签和ViewStub,配合尺寸限定符等适配方案,能够显著提升开发效率

weixin_30437847的博客 465

Android 百分比布局

百分比布局

安卓开发笔记———布局方式之百分比布局

【代码】安卓开发笔记———布局方式之百分比布局。

m0_55584761的博客 3112

糖尿病预测(深度学习pytorch实现-最新)

本次做的项目是糖尿病的预测,也是来自kaggle上面的一个小项目。根据一个人的怀孕次数、血糖、血压、皮肤厚度、胰岛素指标、身体质量指数、糖尿病谱系指数、年龄等身体参数来预测一个人是否患有糖尿病。

NangoGreen的博客 5359

【智驾与大模型】端到端与多模态大模型的精彩之旅

智驾和大模型的回顾与展望。开头的笔者自述也说了些心窝子话,边缘计算的监管刻不容缓!

仿生实验室:从0到1,制作人脸表情交互机器人,记录过程,软硬件全部开源,与君共襄盛举! 1320

【Android入门到项目实战--3.2】—— 详解4种基本布局(线性布局、相对布局、帧布局、百分比布局)

LinearLayout又称线性布局,是非常常用的布局,此布局将它所包含的控件在线性方向上依次排列,其下面尝试演示。改变orientation属性为horizontal后效果如下:1、下面加入新属性尝试一下。,而android:gravity指定文字在控件中的对齐方式。2、android:layout_weight属性这个属性允许我们使用比例的方式来指定控件大小,在手机屏幕的适配性方面起到重要作用。下面尝试实现:编写一个消息发送界面。

个人博客 2337

金属粘结剂喷射3D打印技术:工艺流程与后处理关键

金属粘结剂喷射(Binder Jetting)是一种创新的增材制造技术,通过逐层喷射粘合剂将金属粉末粘结成型,再经过脱脂和烧结等后处理工序获得最终零件。这项技术的核心优势在于无需支撑结构、可实现批量生产,并且材料利用率高。在3D打印领域,金属BJ技术特别适合中小尺寸、结构复杂且表面质量要求高的零件生产。其工艺流程包括前期数据处理、打印生胚阶段、拆包与清粉,以及关键的渗透、脱脂和烧结后处理环节。后处理工艺的控制直接决定了零件的机械性能和尺寸精度,其中烧结工艺尤为关键,需要精确控制温度曲线和气氛环境。金属BJ打

weixin_35751194的博客 84

Android百分比布局

android有个百分比布局,于是研究了下。 用途 官方针对屏幕适配的问题提出的一种优化手段,主要用来解决屏幕适配。屏幕适配主要以屏幕宽度为依据。 使用 1.添加依赖 在Module级别的build.gradle中加入如下代码: compile 'com.android.support:percent:26.+' 2.关联命名空间 在需要使用百分比布局的布局文件...

桑心剑 2393

Linux内核支持串口屏,linux串口触摸屏设计总结

Linux serial touch 设计总结概述:最近在做嵌入式linux下串口触摸屏设计,遇到一些问题,经过查找资料和请教同事,总算把问题解决了,事后有把linux相关的内核代码仔细看了一遍,为了有点成果,特别写了个总结。如有任何问题请联系yxj_5421@http://www.doczj.com/doc/87b94b1e227916888486d76d.html,转载请标明出处。系统资源:L...

weixin_39935903的博客 1297

SNN目标识别MNIST

总体来说这篇论文提出的方法用了多种更精密的细节,如LIF膜电位公式,三种STDP方法,但我觉得还可以有很大的改进,比如输入层全连接到兴奋层,兴奋层通过抑制层实现的侧向抑制,抑制层不参与学习等等。尤其是兴奋层通过抑制层实现侧向抑制这里,当神经元兴奋时,通过抑制层再倒回兴奋层,所抑制的已经经过一了一段时间的延迟。如有错误,请不吝赐教。

m0_74982304的博客 1262

Android 常用布局

android view常用布局

look85的专栏 632

论文必备 - YOLO26统计数据集中大、中、小目标数量,附完整代码和详细使用步骤

数据集是由微软开发维护的大型图像数据集。数据集标注类型对应任务包括物体检测、关键点检测、实例分割、stuff分割(没有特定形状的物体),全景分割人体关键点, 人体密度检测等。官网数据规模和样本特点数据规模大:总共包含32.8万张图像)。其中标注过的图像超过 20 万张,拥有 150 万个目标实例,数据量丰富,能够为模型训练提供充足的信息。类别丰富:包含80个目标类别和91个“stuff”类别。目标类别涵盖了日常生活中常见的各种物体,如人、动物、交通工具、生活用品等;stuff。

Limiiiing的博客 266

Android之ListView,AsyncTask,GridView,CardView,本地数据存储,SQLite数据库

版权声明:未经博主允许不得转载 补充 补充上一节,使用ListView是用来显示列表项的,使用ListView需要两个xml文件,一个是列表布局,一个是单个列表项的布局。如我们要在要显示系统所有app列表项时,需要左边appimage视图和右边文本视图。 一个是列表布局 all_app_list.xml &lt;ListView android:id="@andro...

程序员哆啦A梦,蓝胖子 660

【AI编程干货】Vibe Coding 技巧(适用于AI编程IDE)

用 AI 写代码这件事门槛低,谁都能对着对话框输入几句话让它生成代码,但生成的东西能不能用、出了问题能不能兜住,这中间的差距比想象中大得多。 我从去年开始把 AI 编码工具作为主力开发手段,中间经历过项目失控、代码雪崩、反复返工,慢慢摸索出一套相对稳定的工作方式。这篇把核心的五个习惯拆开聊聊,都是实际项目里验证过的。

blues_C的博客 621

KNN算法

其原理是在给定的数据集中,根据某个距离度量方法,将测试数据与已知数据集中的所有数据进行距离计算,然后选取K个距离最近的数据作为测试数据的邻居,根据邻居的类别进行投票,将测试数据分类到得票最多的类别中。总之,KNN算法是一种简单而有效的分类方法,它不需要对数据进行训练,可以适用于多种数据类型和应用场景,并且可以通过调整K值或距离阈值等参数来控制算法的复杂度和性能。,KNN算法需要找到K个距离测试样本最近的训练样本,计算它们的类别,并将测试样本归入到得票最多的类别中。则取值为1,否则为0,表示邻居中属于类别。

优快云XXCQ的博客 2632

9.RecyclerView(ListView的进阶版)

由于我ListView中的尝试就没按照《第一行代码》中的样例来,所以以下内容我都是找的几篇博客看的 与百分比布局类似,都要先添加依赖库 implementation 'com.android.support:recyclerview-v7:28.0.0' RecyclerView的四大组成: 名 用途 Layout Manager Item的布局管理器 Adapt...

George_UP的博客 322

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Android——UI开发的点点滴滴2

1.2详解四种布局 1.2.1线性布局LinearLayout LinearLayout又称线性布局,这个布局会将它所包含的控件在线性方向上依次排列。android:orientation 属性指定排列方向,vertical是垂直方向,horizontal是水平方向。 注意:如果LinearLayout的排列方向是horizontal。内部控件就绝对不能将宽度指定为math_parent,这样的话单独一个控件就会将水平方向占满,同样,若是vertical,就不能将高度指定为math_parent. 补充:

xuan的博客 282

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android andbase,AndBase: 改写后的andbase框架,增加了许多自定义控件,一些通用功能...

就是在这个AbPullToRefreshView包一个ListView或者GridView,这样就可以用BaseActivity来做分页加载了。用法是在Activity里使用initRefreshView方法,需要一些参数requestCode,这个参数是网络请求时标识是哪个请求的,可以参考一下csdn里的HttpUtil[输入链接说明](http://blog.youkuaiyun.com/tianyale...

weixin_42363662的博客 207

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android学习笔记

  1.反编译工具:     1.1: apktool:获取资源文件,图片资源,布局文件和XML文件。     1.2: dex2jar: 将dex代码反编译成java代码。     1.3: jd-g ui: 查看反编译后的Java源码。   2.LinearLayout's Weight: 使用martch_parent:     2.1: 只有一个屏幕,那么看需要分成几份,1...

湫兮若风的博客 900

推荐项目:SwipeMenu - 打造流畅滑动菜单的神器

在追求用户体验至上的移动应用开发领域,如何实现优雅且交互友好的侧滑或上下滑动菜单成为了一个重要课题。今天,我们要向大家隆重推荐一款开源项目——**SwipeMenu**。这款轻量级、高度灵活的库专为Android平台设计,旨在帮助开发者轻松集成横竖方向的滑动菜单功能,极大丰富应用的交互体验。 ## 项目介绍 SwipeMenu是一个强大而全面的解决方案,支持水平和垂直方向的滑动操作,无论是从左...

gitblog_00239的博客 1029

系统Widget相关

组件-控件 一.组件属性 1.android:layout_weight 表示该组件在layout中所占的比重即占布局(layout)的百分比,其值越大,比重越小 注意:{必须将控件的layout_width = “fill_parent”|”match_parent”,否则weight属性将不起作用。} 注:如果设为“fill_parent”则weight属性将是你的控件尽可能的大,最

ccp1994的专栏 1353

flutter学习笔记

1.跨平台移动UI框架2.与现有的代码一起工作(可以直接嵌入到原生代码中或直接把原生代码嵌入到自己的代码中运行)3. 完全免费、开源。

haoxuhong的博客 8246

基于HarmonyOS API 24实战解析宠物健康监测应用:“事件 → 方法 → 状态变更 → 自动渲染“的闭环,是声明式 UI 范式的核心

在移动互联网与智能穿戴设备高度普及的今天,"习惯养成"已经从一个模糊的自我管理理念,演变为一个可量化、可追踪、可视化的数字化产品赛道。越来越多的人希望借助手中的智能终端,把"早起、冥想、阅读、运动"这些抽象的自律行为,转化为一条条清晰的数据曲线和一张张可触摸的打卡卡片。而鸿蒙生态(HarmonyOS)凭借其跨设备协同、分布式软总线以及声明式 UI 开发框架 ArkUI,为这类注重"轻量化交互 + 即时反馈"的生活方式类应用提供了极为理想的生长土壤。本应用正是一款面向"晨间场景"深度打磨的习惯追踪工具。它聚焦

2301_79516720的博客 39

基于HarmonyOS API 24实战解析电影收藏管理@ObjectLink 则用于子组件中接收一个 @Observed 对象的引用,使得子组件能够对该对象的属性变化做出响应式更新

在移动互联网与智能穿戴设备高度普及的今天,"习惯养成"已经从一个模糊的自我管理理念,演变为一个可量化、可追踪、可视化的数字化产品赛道。越来越多的人希望借助手中的智能终端,把"早起、冥想、阅读、运动"这些抽象的自律行为,转化为一条条清晰的数据曲线和一张张可触摸的打卡卡片。而鸿蒙生态(HarmonyOS)凭借其跨设备协同、分布式软总线以及声明式 UI 开发框架 ArkUI,为这类注重"轻量化交互 + 即时反馈"的生活方式类应用提供了极为理想的生长土壤。本应用正是一款面向"晨间场景"深度打磨的习惯追踪工具。它聚焦

2301_79516720的博客 165
上一篇: Android Mobile Hotfix(阿里云——移动热修复接入)
下一篇: Android .9图片的作用与制作
Android_man_me
博客等级 码龄12年 10粉丝 11原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值