Android 传统view嵌入compose

上一个demo使用compose调用view, 再试下传统view嵌套compose, 还是修改之前的demo。

MainActivity 增加一个按钮,用于跳转到该demo的activity:

Kotlin 复制代码
package com.example.testnavigation

import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.widget.Button
import android.widget.ImageView
import androidx.fragment.app.FragmentActivity
import dagger.hilt.android.AndroidEntryPoint


@AndroidEntryPoint  // 注入点,可以被注入对象
class MainActivity : FragmentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)
        val ivBaibing = findViewById<ImageView>(R.id.iv_baibing)
        val uri = Uri.parse("android.resource://com.example.testnavigation/${R.drawable.baibing}")
        ivBaibing?.setImageURI(uri)
        ivBaibing?.let{
            it.setOnClickListener {
                // 预览
                val intent = Intent(this@MainActivity, PicZoomActivity::class.java).let {
                    it.putExtra(PicZoomActivity.BUNDLE_KEY_PIC_URI, uri)
                }
                startActivity(intent)
            }
        }

        // Compose 预览按钮(启动纯 Compose Activity)
        val btnComposePreview = findViewById<Button>(R.id.btn_compose_preview)
        btnComposePreview.setOnClickListener {
            val intent = Intent(this, ComposePreviewActivity::class.java).apply {
                putExtra(PicZoomActivity.BUNDLE_KEY_PIC_URI, uri)
            }
            startActivity(intent)
        }

        val btn_test_view_invoke_compose = findViewById<Button>(R.id.btn_test_view_invoke_compose)
        btn_test_view_invoke_compose?.setOnClickListener {
            startActivity(Intent(this@MainActivity, ActivityViewContainsCompose::class.java))
        }
    }
}
复制代码
ActivityViewContainsCompose 代码如下:
Kotlin 复制代码
package com.example.testnavigation

import android.app.Activity
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.unit.sp

public class ActivityViewContainsCompose : AppCompatActivity() { // 用到compose必须继承AppCompatActivity
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_view_contains_compose)
        val composeView = findViewById<ComposeView>(R.id.compose_host)

        composeView.setContent {
            // 纯 Compose 代码
            ComposeContent()
        }
    }
}

@Composable
fun ComposeContent() {
    Column {
        Text(
            text = "汝比颜良文丑如何?",
            fontSize = 18.sp
        )
        Text(
            text = "今天下英雄,惟使君与操耳!",
            fontSize = 16.sp
        )
    }
}

其布局:

XML 复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">
    <!-- 传统 TextView -->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="此间乐,不思蜀也。"
        android:textSize="18sp"/>

    <!-- 用来放 Compose 的容器 -->
    <androidx.compose.ui.platform.ComposeView
        android:id="@+id/compose_host"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"/>
</LinearLayout>

测试:

点击最下面按钮:

ok. 显示正确。

相关推荐
私人珍藏库27 分钟前
[Android] PeakFinder AR v4.8.89 (山峰全景识别+增强现实山峰查看器)
android·人工智能·智能手机·ar·工具·软件
researcher-Jiang1 小时前
高性能计算之OpenMP——超算习堂学习1
android·java·学习
alexhilton2 小时前
Kotlin DSL深度解析:从Gradle脚本到构建你自己的DSL
android·kotlin·android jetpack
烽火聊员2 小时前
查看Android Studio错误日志
android·ide·android studio
星空语7 小时前
音频001_Android+Linux车载/手机音频全链路分层架构图
android·linux·音视频
CyL_Cly8 小时前
解决官网下载慢!Android Studio 最新版网盘下载
android·ide·android studio
智塑未来8 小时前
鸿蒙系统对比安卓、iOS,核心优势是什么?
android·ios·harmonyos
AI刀刀8 小时前
豆包智能体对话导出后,如何构建长期归档与高效检索体系?
android·人工智能·word·excel·ai导出鸭
初雪云10 小时前
iOS 上架入门:证书、描述文件、IPA 上传到底是什么关系?
android·ios·自动化·产品经理·iphone
玩机达人8812 小时前
一加12/Ace5/Ace3pro手机ColorOS16降级回锁BL熔断变黑砖怎么办
android·智能手机·电脑