亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Jetpack Compose修飾符專項(xiàng)精講

 更新時(shí)間:2022年10月26日 10:24:58   作者:唯鹿  
在今年的Google/IO大會(huì)上,亮相了一個(gè)全新的 Android 原生 UI 開發(fā)框架-Jetpack Compose, 與蘋果的SwiftIUI一樣,Jetpack Compose是一個(gè)聲明式的UI框架,它可簡化并加快Android上的界面開發(fā),使用更少的代碼、強(qiáng)大的工具和直觀的 Kotlin API,快速讓應(yīng)用生動(dòng)而精彩

本篇開始介紹Jetpack Compose 中的修飾符Modifier。修飾符可以用來執(zhí)行以下操作:

  • 更改可組合項(xiàng)的大小、布局、行為和外觀。
  • 添加信息,如無障礙標(biāo)簽。
  • 處理用戶輸入。
  • 添加高級(jí)互動(dòng),如使元素可點(diǎn)擊、可滾動(dòng)、可拖動(dòng)或可縮放。

1.常用修飾符

下面先介紹一些常用的方法:

  • alpha(alpha: Float):設(shè)置透明度,范圍0到1。
  • background(color: Color, shape: Shape?):設(shè)置背景色,shape可以指定形狀,例如可以使用RoundedCornerShape來指定圓角大小。
  • 對(duì)于背景是漸變的,可以使用background(brush: Brush, shape: Shape?, alpha: Float?)。其中Brush就是我們指定漸變,例如使用horizontalGradient創(chuàng)建水平方向漸變:
	Box(Modifier.background(
        Brush.horizontalGradient(
            listOf(Color.Red, Color.Green)
        )
    ).size(100.dp))

當(dāng)然,還可以指定開始結(jié)束的位置,顏色的分散偏移量,這里就不多說了。

  • Modifier.border(width: Dp, color: Color, shape: Shape?),添加邊框,可以指定顏色、粗細(xì)和形狀。
  • Modifier.clickable(),添加點(diǎn)擊事件。參數(shù)如下:
Modifier.clickable(
    enabled: Boolean = true, // 是否可點(diǎn)擊狀態(tài),默認(rèn)可點(diǎn)擊
    onClickLabel: String? = null, // 語義/可訪問性標(biāo)簽
    role: Role? = null, // 點(diǎn)擊元素的類型,例如Button、Checkbox、Image等。用于可訪問性服務(wù)。
    onClick: () -> Unit // 點(diǎn)擊事件
)

如果不考慮Android TalkBack 讀屏這類功能,一般情況下使用就是Modifier.clickable { }

  • Modifier.combinedClickable()與上面的點(diǎn)擊事件一樣,只是它還支持長按,雙擊事件。
  • Modifier.onFocusChanged(),監(jiān)聽焦點(diǎn)變化事件。
  • Modifier.focusable(),設(shè)置焦點(diǎn)。
  • Modifier.height(height: Dp),設(shè)置高度,同理width設(shè)置寬度。
  • Modifier.requiredHeight(height: Dp),強(qiáng)制設(shè)置高度,可以忽略父元素的寬高限制。requiredWidth同理。舉一個(gè)小例子:
	Box(Modifier.requiredSize(100.dp)
        .background(Color.Red)
    ) {
        Box(Modifier.width(50.dp)
            .height(150.dp)
            .background(Color.Blue)
        )
    }

一個(gè)100dp100dp的紅色方塊內(nèi)有個(gè)50dp150dp的藍(lán)色方塊。如果我們把height換為requiredHeight

	Box(Modifier.requiredSize(100.dp)
        .background(Color.Red)
    ) {
        Box(Modifier.width(50.dp)
            .requiredHeight(150.dp)
            .background(Color.Blue)
        )
    }

對(duì)比一下前后效果,一目了然。

  • Modifier.heightIn(min: Dp, max: Dp ),設(shè)置高度的最大最小值。widthIn同理。
  • Modifier.size(size: Dp),可同時(shí)設(shè)置寬高。requiredSizesizeIn與上面的同理。
  • Modifier.padding(all: Dp),元素的邊添加間隔,也就是常說的內(nèi)間距。
  • Modifier.rotate(degrees: Float),設(shè)置旋轉(zhuǎn)度數(shù)。
  • Modifier.scale(scaleX: Float, scaleY: Float),設(shè)置縮放,如果是負(fù)數(shù)可以實(shí)現(xiàn)鏡像效果。
  • Modifier.horizontalScroll(),允許子元素在寬度大于最大限制時(shí)垂直滾動(dòng)。例如我們給Row添加它,這樣在超出屏幕寬度后,我們就可以水平方向滾動(dòng)了。verticalScroll同理。
	Row(Modifier.horizontalScroll(rememberScrollState())) {
		Box(
			Modifier.size(5000.dp, 100.dp)
       			.background(Color.Blue)
    	)
	}

Modifier.fillMaxHeight(fraction: Float = 1f),高度上填充滿父元素,參數(shù)fraction指填充的比例。fillMaxWidth,fillMaxSize同理。示例:

	Box(Modifier.requiredSize(100.dp).background(Color.Blue)) {
        Box(
            Modifier.fillMaxWidth(0.8f)
                .fillMaxHeight(0.5f)
                .background(color = Color.Yellow)
        )
    }

效果如下:

Modifier.wrapContentSize(align: Alignment?, unbounded: Boolean?),看這個(gè)名字,相信你就會(huì)聯(lián)想起wrap_content,它允許內(nèi)容以其所需的大小進(jìn)行測(cè)量,會(huì)忽略最小寬度或最小高度的約束。如果unbounded為true,也會(huì)忽略最大寬高的約束,默認(rèn)為false。align是指定子元素相對(duì)父元素的對(duì)齊方式,默認(rèn)居中。

看個(gè)例子:

	Box(Modifier.requiredSize(200.dp).background(Color.Blue)) {
        Box(
            Modifier.sizeIn(minWidth = 140.dp, minHeight = 140.dp)
                .wrapContentSize(Alignment.TopStart)
                .size(70.dp)
                .background(Color.Yellow)
        )
    }

外層是個(gè)200dp*200dp的藍(lán)色方塊,內(nèi)部是最小寬高140dp的黃色方塊。由于設(shè)置了wrapContentSize,此時(shí)size(70.dp)就生效了,成為了70dp的黃色方塊。下圖是使用wrapContentSize前后的對(duì)比圖。

同樣的例子,我們看一下unbounded屬性的作用。外層是個(gè)200dp*200dp的藍(lán)色方塊,內(nèi)部是最大寬高140dp的黃色方塊。現(xiàn)在我們?cè)O(shè)置size為170dp

	Box(Modifier.requiredSize(200.dp).background(Color.Blue)) {
        Box(
            Modifier.sizeIn(maxWidth = 140.dp, maxHeight = 140.dp)
                .wrapContentSize(Alignment.TopStart, true)
                .size(170.dp)
                .background(Color.Yellow)
        )
    }

下圖分別是unbounded為true和false的效果圖:

2.修飾符順序

修飾符函數(shù)的順序非常重要。每個(gè)函數(shù)都會(huì)對(duì)上一個(gè)函數(shù)返回的 Modifier 進(jìn)行更改。

上面介紹了一些常用的修飾符,不知道你有沒有注意到,有提到padding,為啥沒見margin?其實(shí)就是因?yàn)樾揎椃捻樞颍煌捻樞驎?huì)實(shí)現(xiàn)paddingmargin效果。這塊我就直接照搬文檔的例子了,很直觀。

@Composable
fun ArtistCard(/*...*/) {
    val padding = 16.dp
    Column(
        Modifier
            .clickable(onClick = onClick)
            .padding(padding)
            .fillMaxWidth()
    ) {
        // rest of the implementation
    }
}

clickablepadding

可以看到點(diǎn)擊范圍就是整個(gè)卡片,然后卡片的內(nèi)容四周有16dp的間隔,實(shí)現(xiàn)的效果就是padding

如果先paddingclickable

@Composable
fun ArtistCard(/*...*/) {
    val padding = 16.dp
    Column(
        Modifier
            .padding(padding)
            .clickable(onClick = onClick)
            .fillMaxWidth()
    ) {
        // rest of the implementation
    }
}

效果如下:

可以看到效果就是margin。

再舉一個(gè)例子,就是我們上面說到的wrapContentSize。注意我們當(dāng)時(shí)的使用順序:

	Box(Modifier.requiredSize(200.dp).background(Color.Blue)) {
        Box(
            Modifier.sizeIn(minWidth = 140.dp, minHeight = 140.dp)
                .wrapContentSize(Alignment.TopStart)
                .size(70.dp)
                .background(Color.Yellow)
        )
    }

如果wrapContentSizesize順序反過來,那就不會(huì)顯示黃色的方塊了,因?yàn)槭紫人雎粤酥霸O(shè)置的最小寬高,然后內(nèi)容大小后面沒有設(shè)置了,所以就看不到了。記住開始的那句話,每個(gè)修飾符函數(shù)都會(huì)對(duì)上一個(gè)函數(shù)返回的 Modifier 進(jìn)行更改。

所以在實(shí)際的使用中,不僅需要了解修飾符的作用,同樣需要注意修飾符的順序。

那么到這里有關(guān)修飾符的部分就完了,下一篇就是常用組件的介紹。如果本篇對(duì)你有幫助,希望點(diǎn)個(gè)贊支持一下~

參考: 官方文檔 - 修飾符

到此這篇關(guān)于Jetpack Compose修飾符專項(xiàng)精講的文章就介紹到這了,更多相關(guān)Jetpack Compose修飾符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android編程設(shè)計(jì)模式之責(zé)任鏈模式詳解

    Android編程設(shè)計(jì)模式之責(zé)任鏈模式詳解

    這篇文章主要介紹了Android編程設(shè)計(jì)模式之責(zé)任鏈模式,詳細(xì)分析了Android設(shè)計(jì)模式中責(zé)任鏈模式的概念、原理、應(yīng)用場(chǎng)景、使用方法及相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • Android實(shí)現(xiàn)excel/pdf/word/odt/圖片相互轉(zhuǎn)換

    Android實(shí)現(xiàn)excel/pdf/word/odt/圖片相互轉(zhuǎn)換

    這篇文章主要為大家詳細(xì)介紹了Android如何實(shí)現(xiàn)excel/pdf/word/odt/圖片之間的相互轉(zhuǎn)換,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-04-04
  • Android實(shí)現(xiàn)朋友圈點(diǎn)贊列表

    Android實(shí)現(xiàn)朋友圈點(diǎn)贊列表

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)朋友圈點(diǎn)贊列表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Android自定義View——扇形統(tǒng)計(jì)圖的實(shí)現(xiàn)代碼

    Android自定義View——扇形統(tǒng)計(jì)圖的實(shí)現(xiàn)代碼

    本篇文章主要介紹了Android自定義View——扇形統(tǒng)計(jì)圖的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • android 中viewpager+fragment仿微信底部TAG完美漸變

    android 中viewpager+fragment仿微信底部TAG完美漸變

    這篇文章主要介紹了android 中viewpager+fragment仿微信底部TAG完美漸變,需要的朋友可以參考下
    2017-05-05
  • Android Room的使用詳解

    Android Room的使用詳解

    這篇文章主要介紹了Android Room的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下
    2021-04-04
  • Android編程之光線傳感器用法詳解

    Android編程之光線傳感器用法詳解

    這篇文章主要介紹了Android編程之光線傳感器用法,結(jié)合實(shí)例形式分析了Android光線傳感器的功能、實(shí)現(xiàn)步驟與相關(guān)注意事項(xiàng),并給出了相關(guān)demo示例,需要的朋友可以參考下
    2017-11-11
  • Android Socket通信詳解

    Android Socket通信詳解

    這篇文章主要介紹了Android Socket通信詳解的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • 新手必看Android Studio入門詳解

    新手必看Android Studio入門詳解

    上篇文章已經(jīng)說過了Android Studio的安裝配置,這篇文章主要介紹了Android Studio入門詳解以及一些常見的報(bào)錯(cuò),新手同學(xué)一起從這里開始完成我們的第一個(gè)Android項(xiàng)目吧!
    2021-08-08
  • Android MarginDesign控件TabLayout導(dǎo)航欄使用詳解

    Android MarginDesign控件TabLayout導(dǎo)航欄使用詳解

    這篇文章主要為大家詳細(xì)介紹了Android MarginDesign控件TabLayout導(dǎo)航欄使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01

最新評(píng)論