Android12(API32)新特性-activity嵌入

一、依赖

implementation("androidx.window:window:1.0.0-beta03")
implementation "androidx.startup:startup-runtime:1.0.0-alpha01"

二、xml静态注册

start up 初始化类:

class ExampleWindowInitializer : Initializer<SplitController> {

    override fun dependencies(): MutableList<Class<out Initializer<*>>> {
        return arrayListOf()
    }

    override fun create(context: Context): SplitController {
        SplitController.initialize(context,R.xml.multi_window)
        var splitRules = SplitController.getInstance().getSplitRules()
        return SplitController.getInstance()
    }
}

在AndroidManifest中静态注册

    <provider
        android:name="androidx.startup.InitializationProvider"
        android:authorities="${applicationId}.androidx-startup"
        android:exported="false"
        android:multiprocess="true"
        tools:node="merge">
        <meta-data
            android:name="com.android.splitdemo.ExampleWindowInitializer"
            android:value="androidx.startup" />
    </provider>

在xml文件夹中创建multi_window.xml

<?xml version="1.0" encoding="utf-8"?>
<resources
    xmlns:window="http://schemas.android.com/apk/res-auto">
    <SplitPairRule
        window:splitRatio="0.5"
        window:splitMinWidth="300dp"
        window:finishPrimaryWithSecondary="true"
        window:finishSecondaryWithPrimary="true"
        window:clearTop="true">>
        <SplitPairFilter
            window:primaryActivityName="com.android.splitdemo.MainActivity"
            window:secondaryActivityName="com.android.splitdemo.DetailActivity"/>
        <SplitPairFilter
            window:primaryActivityName="*"
            window:secondaryActivityName="*/*"
            window:secondaryActivityAction="android.intent.action.VIEW"/>
    </SplitPairRule>

    <SplitPlaceholderRule
        window:placeholderActivityName="com.android.splitdemo.OtherActivity"
        window:splitRatio="0.5"
        window:splitMinWidth="300dp">
        <ActivityFilter
            window:activityName="com.android.splitdemo.MainActivity"/>
    </SplitPlaceholderRule>

</resources>

二、动态注册

初始使用xml静态注册之外,还可以用代码实现动态注册

class MainActivity : AppCompatActivity() {

    private var finishPrimaryWithSecondary: Boolean = true
    private var finishSecondaryWithPrimary: Boolean = true
    private var clearTop: Boolean = true
    private var minWidth: Int = 300
    private var minSmallestWidth: Int = 0
    private var splitRatio: Float = 0.5f

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var splitController: SplitController = SplitController.getInstance()
        val splitPairFilter: MutableSet<SplitPairFilter> = HashSet()
        splitController.registerRule(
            SplitPairRule(
                splitPairFilter,
                finishPrimaryWithSecondary,
                finishSecondaryWithPrimary,
                clearTop,
                minWidth,
                minSmallestWidth,
                splitRatio,
                LayoutDirection.LOCALE
            ),
        )
        val activityFilters: MutableSet<ActivityFilter> = HashSet()
        addActivityFilter(activityFilters, MainActivity::class.java)
        val intent = Intent(this@MainActivity, OtherActivity::class.java)
        val placeholderRule = SplitPlaceholderRule(
            activityFilters,
            intent,
            300,
            0,
            0.5f,
            LayoutDirection.LOCALE,
        )
        splitController.registerRule(placeholderRule)

    private fun addActivityFilter(
        activityFilters: MutableSet<ActivityFilter>,
        activityClass: Class<out Activity?>
    ) {
        activityFilters.add(ActivityFilter(ComponentName(this@MainActivity, activityClass), null /* intentAction */))
    }

}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值