V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kldd529
V2EX  ›  Android

请教一个关于安卓多设备适配问题

  •  
  •   kldd529 · 2021-11-14 00:07:24 +08:00 via Android · 9350 次点击
    这是一个创建于 1107 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现有几种设备分辨率的分别 1920*132 1920*480 1920*1080 等各种条形屏矩形屏。现在布局是几张卡片,然后要根据分辨率来自动排列,比如条形屏上就排成一行,矩形屏可以排成 2 行 5 列啥的(居中),然后还有竖屏(可能就排成 5 行 2 列),兼顾对齐美观。

    现在产品要求写一个布局,然后会自动在不同设备上展示合理的排列,大佬们有什么方便的方案(产品要求要简单点实现,我直接内心 c 语言)

    目前我想到的自定义个 viewgroup (经理说要搞这么复杂吗);弄个 recyclerview (每个卡片数据界面都不一样,多布局又是一堆代码)
    9 条回复    2021-11-22 16:06:31 +08:00
    mx8Y3o5w3M70LC4y
        1
    mx8Y3o5w3M70LC4y  
       2021-11-14 00:22:32 +08:00 via iPhone
    试试 flexboxlayout ?
    james2013
        2
    james2013  
       2021-11-14 09:52:11 +08:00
    获取屏幕宽高信息,转化为几种枚举值,再根据这几种枚举值,来设置 RecyclerView 的列数
    CharmingCheung
        3
    CharmingCheung  
       2021-11-15 11:48:14 +08:00
    卡片宽度如果是一个固定值(同一设备下),可以用 GridLayoutManager ,(屏幕宽度 - 控件左右边距) / (卡片宽度 + 卡片之间 margin),计算得出 spanCount
    反之可以参考一下一些开源的标签控件(关键词:LabelView 、TagView 之类)的实现方式,也是可以实现的
    kldd529
        4
    kldd529  
    OP
       2021-11-15 13:44:51 +08:00
    @CharmingCheung 有的布局最后一张卡片长度是其他卡片的两倍
    CharmingCheung
        5
    CharmingCheung  
       2021-11-15 14:11:10 +08:00
    @kldd529 那就重写 setSpanSizeLookup ,把要两倍长度的 position 改成 return 2
    kldd529
        6
    kldd529  
    OP
       2021-11-15 14:25:19 +08:00
    @CharmingCheung 谢谢回答
    ChitandaEru520
        7
    ChitandaEru520  
       2021-11-17 10:36:07 +08:00
    如果卡片数量是固定的,可以试试 ConstraintLayout 里面的 Flow 流式布局
    guoziq09
        8
    guoziq09  
       2021-11-17 17:05:48 +08:00
    参考一下 FloatLayout
    bugmaker233
        9
    bugmaker233  
       2021-11-22 16:06:31 +08:00
    recyclerView 完全可以啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5920 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 03:34 · PVG 11:34 · LAX 19:34 · JFK 22:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.