超轻量级Android-UI自适应解决方案(AndroidUI适配)

本文介绍了一种超轻量级的Android UI自适应解决方案,使用Kotlin开发,具有低侵入性,支持Activity和Adapter的自适应,并采用插拔式组件设计。通过自定义组件,开发者可以轻松扩展以适应不同布局需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android自适应布局解决方案

Android UI自适应解决方案

前言

项目地址:AdaptiveAnkoComponent

因为之前一直使用的鸿洋的AndroidAutoLayout(貌似目前停止维护了),所以对这种模式的自适应方案比较认同。但是我是一个JetBrains的粉丝,在学习Anko的时候发现这套方案不适用了,于是打算自己来实现一套。

最终形成的这套方案特点如下:

  • 使用Kotlin开发(顺便推广一下,用了Kotlin之后,基本上不会再喜欢写java的代码了)
  • 超低侵入性(不需要继承Activity,不需要改变之前的layout文件,只需要依赖+配置meta)
  • 插拔式组件
  • 并同时支持普通的layout模式和Anko模式

另外,如果本文读起来有任何不顺畅或者不合理的地方,也请帮忙提出来,感谢!

如何使用

Step1

repositories {
        ...
        maven { url 'https://jitpack.io' }
    }

Step2

dependencies {
    ...
    compile 'com.github.nobeginning.AdaptiveAnkoComponent:adaptive-anko:v0.4.0'
    compile 'com.github.nobeginning.AdaptiveAnkoComponent:adaptive:v0.4.0'
}

Step3

In AndroidManifest.xml

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme.NoActionBar">
        <meta-data
            android:name="com.young.adaptive.designWidth"
            android:value="720" />
            
		<activity></activity>
</application>

In layout xml:

直接以px为单位按照设计稿即可

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="AutoSized List Title"
        android:textSize="30px"/>

Step4

In Activity:

AdaptiveAssistant().setContentView(this, R.layout.activity_xxx)

In Adapter:

......

val layoutAssistant = LayoutAssistant()

......

override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
   
   
            val view = convertView ?: layoutAssistant.adaptive(this@NormalActivity, parent ,R.layout.cell_for_list)
            view.tvTitle.text = "Title -> ${
     
     getItemId(position)}"
            view.tvDesc.text = "Description -> ${
     
     getItemId(position)}"
            return view
        }

详解

图解

自适应图解

代码及思路介绍

主要类的介绍
AdaptiveAssistant

自适应入口,提供了基于Activity和Adapter的自适应方法

AdaptiveComponent

内部维护了一个IComponent链表,用以管理自适应组件,同时对外暴露了管理组件的add及remove方法,便于使用者自己扩展

IComponent

抽象出的自适应组件接口

AdaptiveLayoutContext

核心类,用于处理自适应逻辑

AdaptiveViewManager

用于Anko的支持,待优化

核心思路

先看一下Activity的setContentView最终实现:

@Override
    public void setContentView(View v) {
   
   
        ensureSubDecor(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值