最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

AndroidView與Compose框架交互實(shí)現(xiàn)介紹

 更新時(shí)間:2022年09月06日 15:00:17   作者:兒歌八萬(wàn)首  
Android Compose自推出正式版本后,google 就一直推薦使用Compose來(lái)開發(fā)。正好疫情期間,作為一個(gè) Android 摸魚達(dá)人,就來(lái)摸索一下Compose的開發(fā)。說(shuō)實(shí)話開發(fā)了2天感覺對(duì)Android 開發(fā)人員來(lái)說(shuō)變化是巨大的,但是作為從業(yè)者我們還必須學(xué)習(xí)和學(xué)會(huì),才能不被甩開

1、在ComposeUI中加載AndroidView控件

Compose中可以加載AndroidView還是比較簡(jiǎn)單的,直接引入AndroidView來(lái)加載AndroidView布局文件。

@Composable
fun Greeting(name: String) {
    Column {
        Text(text = "Hello $name!")
        LoadAndroidView(name)
    }
}
/**
 * Compose中加載AndroidView
 */
@Composable
fun LoadAndroidView(name: String) {
    var tvTittle: TextView? = null
    AndroidView(factory = {
        //加載AndroidView布局。
        LayoutInflater.from(it).inflate(R.layout.activity_main, null).apply {
            tvTittle = findViewById(R.id.tvTittle)
        }
    }) {
        //更新UI數(shù)據(jù)
        tvTittle?.text = name
    }
}

factory參數(shù)主要是用來(lái)初始化AndroidView布局,將AndroidView布局通過(guò)工廠模式轉(zhuǎn)換成ComposeUI加載到Compose中,只會(huì)執(zhí)行一行,第二個(gè)回調(diào)函數(shù),主要是用來(lái)更新UI數(shù)據(jù),ReCompose可能會(huì)執(zhí)行,所以我么初始化AndroidView的代碼應(yīng)該放在factory參數(shù)中。

2、在AndroidView中加載ComposeUI

AndroidView中引入ComposeView直接在AndroidView的布局文件中加入androidx.compose.ui.platform.ComposeView

控件,在代碼中初始化ComposeView,調(diào)用setContent方法,就可以使用ComposeUI了。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <TextView
        android:id="@+id/tvTittle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="我是AndroidView" />
    <androidx.compose.ui.platform.ComposeView
        android:id="@+id/composeView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>
class LoadComposeActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        findViewById<ComposeView>(R.id.composeView).apply { 
            setContent { 
                Column {
                    Text(text = "我是ComposeView")
                }
            }
        }
    }
}

3、LiveData數(shù)據(jù)轉(zhuǎn)換成State數(shù)據(jù)

LiveData是JetPack組件的一部分,主要是在AndroidView中用來(lái)監(jiān)聽數(shù)據(jù)的變化,并且具有生命感知的,只有在Activity等處于活動(dòng)才會(huì)觸發(fā)數(shù)據(jù)更新。

State是Compose中特有的用來(lái)更新Ui的數(shù)據(jù)框架。比如常用的mutableStateOf , mutableListStateOf等。

當(dāng)AndroidView和Compose交互,將會(huì)可能涉及到LiveDataState數(shù)據(jù)的交換問(wèn)題。

由于在AndroidView中常用LiveData來(lái)進(jìn)行數(shù)據(jù)的訂閱,而在Compose中使用的是Compose特有的mutableStateOf或者mutableListStateOf等來(lái)進(jìn)行ReCompose ,UI更新,所以當(dāng)同時(shí)存在兩者的時(shí)候,需要將

LiveData轉(zhuǎn)換成Compose中的State對(duì)象,然后才能在Compose中實(shí)現(xiàn)訂閱功能。

Compose庫(kù)中提供了一個(gè)擴(kuò)展函數(shù)來(lái)進(jìn)行LiveDataState之間進(jìn)行轉(zhuǎn)換:

1、導(dǎo)入runtime-livedata庫(kù)

implementation 'androidx.compose.runtime:runtime-livedata:1.2.0'

2、將LiveData數(shù)據(jù)轉(zhuǎn)換成State數(shù)據(jù)

private val tittleLv = MutableLiveData("Android")
private fun initView() {
    findViewById<ComposeView>(R.id.composeView).setContent {
        val tittle by tittleLv.observeAsState()
        Column {
            Text(text = tittle.orEmpty(),Modifier.clickable {
                tittleLv.value="測(cè)試LiveData轉(zhuǎn)換State"
            })
        }
    }
}

調(diào)用observeAsState擴(kuò)展函數(shù)可以將LiveData對(duì)象直接轉(zhuǎn)換成State對(duì)象,在Compose中使用。

上面代碼給Text加了個(gè)點(diǎn)擊事件改變LiveData數(shù)據(jù),Compose中的文本同步改變是成功的。

需要注意的是,observeAsState函數(shù)只能在Compose方法中調(diào)用。

到此這篇關(guān)于AndroidView與Compose交互實(shí)現(xiàn)介紹的文章就介紹到這了,更多相關(guān)AndroidView Compose內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android實(shí)現(xiàn)密碼隱藏和顯示

    Android實(shí)現(xiàn)密碼隱藏和顯示

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)密碼隱藏和顯示,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Android Eclipse 注釋模板的使用(圖文說(shuō)明)

    Android Eclipse 注釋模板的使用(圖文說(shuō)明)

    為提高代碼的可讀性以及后期的可維護(hù)性,為我們的代碼加上規(guī)范化的注釋是很有必要,不僅有利于提高自己的專業(yè)素養(yǎng),也能方便他人
    2013-12-12
  • Android CameraX結(jié)合LibYUV和GPUImage自定義相機(jī)濾鏡

    Android CameraX結(jié)合LibYUV和GPUImage自定義相機(jī)濾鏡

    之前使用Camera實(shí)現(xiàn)了一個(gè)自定義相機(jī)濾鏡(Android自定義相機(jī)濾鏡 ),但是運(yùn)行起來(lái)有點(diǎn)卡頓,這次用Camerax來(lái)實(shí)現(xiàn)一樣的效果發(fā)現(xiàn)很流暢,在此記錄一下,也希望能幫到有需要的同學(xué)
    2021-12-12
  • 使用OkHttp包在Android中進(jìn)行HTTP頭處理的教程

    使用OkHttp包在Android中進(jìn)行HTTP頭處理的教程

    HTTP頭部處理是HTTP網(wǎng)絡(luò)編程中的基本操作,安卓中使用OkHttp包(github.com/square/okhttp)進(jìn)行相關(guān)操作當(dāng)然也是得心應(yīng)手,這里我們就來(lái)看一下使用OkHttp包在Android中進(jìn)行HTTP頭處理的教程
    2016-07-07
  • Android輕量級(jí)存儲(chǔ)SharedPreferences?MMKV?Jetpack?DataStore方案

    Android輕量級(jí)存儲(chǔ)SharedPreferences?MMKV?Jetpack?DataStore方案

    這篇文章主要為大家介紹了Android輕量級(jí)存儲(chǔ)SharedPreferences?MMKV?Jetpack?DataStore方案示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Android修改源碼解決Alertdialog觸摸對(duì)話框邊緣消失的問(wèn)題

    Android修改源碼解決Alertdialog觸摸對(duì)話框邊緣消失的問(wèn)題

    在開發(fā)的時(shí)候遇到一個(gè)問(wèn)題,就是一觸摸對(duì)話框邊緣外部,對(duì)話框會(huì)自動(dòng)消失。這個(gè)問(wèn)題很糾結(jié)啊,查找了一下發(fā)現(xiàn)從Android 4.0開始,AlertDialog有了變化,就是在觸摸對(duì)話框邊緣外部,對(duì)話框會(huì)自動(dòng)消失,查了源碼,找到解決辦法如下
    2013-11-11
  • Android App中使用ListFragment的實(shí)例教程

    Android App中使用ListFragment的實(shí)例教程

    這篇文章主要介紹了Android App中使用ListFragment的實(shí)例教程,ListFragment的內(nèi)容是以列表(list)的形式顯示的Fragment,需要的朋友可以參考下
    2016-05-05
  • Android的SurfaceView和TextureView介紹及使用示例

    Android的SurfaceView和TextureView介紹及使用示例

    SurfaceView 是一種用于直接將圖形繪制到屏幕的Android組件,下面給大家分享SurfaceView使用示例,它展示了如何在 Android 應(yīng)用中創(chuàng)建并使用,感興趣的朋友一起看看吧
    2024-12-12
  • OpenGL關(guān)于glStencilFuncSeparate()和glStencilFunc()函數(shù)的區(qū)別講解

    OpenGL關(guān)于glStencilFuncSeparate()和glStencilFunc()函數(shù)的區(qū)別講解

    今天小編就為大家分享一篇OpenGL關(guān)于glStencilFuncSeparate()和glStencilFunc()函數(shù)的區(qū)別講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • Androd 勇闖高階性能優(yōu)化之布局優(yōu)化篇

    Androd 勇闖高階性能優(yōu)化之布局優(yōu)化篇

    Android性能優(yōu)化方面也有很多文章了,這里就做一個(gè)總結(jié),從原理到方法,工具等做一個(gè)簡(jiǎn)單的了解,從而可以慢慢地改變編碼風(fēng)格,從而提高性能
    2021-10-10

最新評(píng)論

噶尔县| 杨浦区| 安龙县| 定州市| 南华县| 绥化市| 洮南市| 宿迁市| 星子县| 巫溪县| 皮山县| 永和县| 延寿县| 娱乐| 霍城县| 渝中区| 任丘市| 体育| 西昌市| 临泽县| 沙洋县| 长武县| 镇安县| 福安市| 南乐县| 安徽省| 绍兴市| 塔河县| 长顺县| 凤山县| 紫金县| 云梦县| 景宁| 黄大仙区| 巨鹿县| 铜梁县| 来凤县| 诏安县| 嵊州市| 汉川市| 库尔勒市|