91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Jetpack?Compose按鈕組件如何使用

發布時間:2023-04-17 11:41:44 來源:億速云 閱讀:146 作者:iii 欄目:開發技術

本篇內容介紹了“Jetpack Compose按鈕組件如何使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

概述

按鈕組件Button是用戶和系統交互的重要組件之一,它按照Material Design風格實現,我們先看下Button的參數列表,通過參數列表了解下Button的整體功能

@Composable
fun Button(
    onClick: () -> Unit, // 點擊按鈕時的回調
    modifier: Modifier = Modifier, // 修飾符
    enabled: Boolean = true, // 是否啟用按鈕
    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
    elevation: ButtonElevation? = ButtonDefaults.elevation(), // 按鈕的陰影
    shape: Shape = MaterialTheme.shapes.small, 
    border: BorderStroke? = null,
    colors: ButtonColors = ButtonDefaults.buttonColors(),
    contentPadding: PaddingValues = ButtonDefaults.ContentPadding,
    content: @Composable RowScope.() -> Unit
)

Button組件的第一個參數onClick是必填項,這是按鈕組件最重要的功能,通過回調響應用戶的點擊事件,最后一個參數content也是必填項,展示按鈕的內容。Compose 的Button組件默認沒有任何UI,它僅僅是一個響應onClick的容器,它的UI需要在content中通過其他組件實現

1.普通Button按鈕

假設我們需要創建一個顯示文字的Button,代碼如下:

  @Composable
    fun ButtonDemo()
    {
        Button(onClick = { /*TODO*/ }) {
            Text(text = "OK")
        }
    }

運行結果:

Jetpack?Compose按鈕組件如何使用

假如我們想在按鈕文字的左邊加一個圖標,代碼如下

    @Composable
    fun ButtonIconDemo(){
        Button(onClick = { /*TODO*/ }) {
            Icon(imageVector = Icons.Filled.Done, contentDescription = null,
            modifier = Modifier.size(ButtonDefaults.IconSize))
            Spacer(modifier = Modifier.size(ButtonDefaults.IconSpacing))
            Text(text = "OK")
        }
    }

這樣就在文字“OK”的左邊加了一個打勾的圖標了

運行結果:

Jetpack?Compose按鈕組件如何使用

在傳統的Button中,有一個很好用的功能,就是selector,即點擊按鈕的時候,可以自定義按鈕的點擊效果,在Compose中當然也可以,Button中的參數interactionSource就是做這個事情的。interactionSource通過以下的桑格函數獲取當前組件的狀態的:

interactionSource.collectIsPressedAsState(): 判斷是否是按下狀態

interactionSource.collectIsFocusedAsState():判斷是否是獲取焦點的狀態

interactionSource.collectIsDraggedAsState():判斷是否拖動

我們可以通過實例來看下如何使用interacrtionSource來實現類似傳統button的selector效果,代碼如下:

    @Composable
    fun InteractionButtonDemo()
    {
        val interact = remember {
            MutableInteractionSource()
        }
        val pressState = interact.collectIsPressedAsState()
        val borderColor = if(pressState.value) Color.Green else Color.Red
        Button(onClick = { /*TODO*/ },
           border = BorderStroke(2.dp, color = borderColor),
            interactionSource = interact
        ) {
            Text(text = "Long click")
        }
    }

上面的代碼實現的是按鈕在通常情況下邊框為紅色,點擊的時候邊框為綠色

運行結果:

Jetpack?Compose按鈕組件如何使用

Jetpack?Compose按鈕組件如何使用

Button 并非唯一的可點擊組件,理論上任何Compose組件都可以通過Modifier.clickable修飾符制作成可點擊組件,而當Button被點擊的時候,需要額外進行一些事件響應處理,比如水波紋的處理,Button 的onClick在底層是通過覆蓋Modifier.clickable實現的,所以我們使用button時不要為Button覆蓋Modifier.clickable.

2.IconButton圖標按鈕

IconButton組件實際上只是Button組件的簡單封裝,它就是一個可以點擊的圖標,它一般用于應用欄中的導航或者其他的行為,我們需要在IconButton組件里面提供一個圖標組件,這個圖標組件的尺寸一般是24x24dp,看下面的例子:

   @Composable
    fun IconButtonDemo()
    {
        IconButton(onClick = { /*TODO*/ }) {
            Icon(imageVector = Icons.Filled.Favorite,
                contentDescription = null)
        }
    }

運行結果

Jetpack?Compose按鈕組件如何使用

簡單例子,不多講解

3.FloatingActionButton懸浮按鈕

FloatingActionButton懸浮按鈕代表當前頁面的主要行為,它也需要我們提供一個Icon組件,代碼如下:

    @Composable
    fun FloatButtonDemo()
    {
        FloatingActionButton(onClick = { /*TODO*/ }) {
            Icon(imageVector = Icons.Filled.ArrowBack, contentDescription = null)
        }
    }

運行結果:

Jetpack?Compose按鈕組件如何使用

懸浮按鈕其實還有一個帶文字的擴展懸浮按鈕ExtendedFloatingActionButton組件,使用方法如下:

   @Composable
    fun ExtFloatButtonDemo(){
        ExtendedFloatingActionButton(icon = {Icon(imageVector = Icons.Filled.Favorite, contentDescription = null ) },
            text = { Text(text = "我喜歡的") },
            onClick = { /*TODO*/ })
    }

運行結果:

Jetpack?Compose按鈕組件如何使用

“Jetpack Compose按鈕組件如何使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巩义市| 巍山| 白城市| 古交市| 靖州| 涪陵区| 泌阳县| 苏尼特右旗| 手机| 吴川市| 车险| 宜宾县| 吉林省| 石河子市| 建瓯市| 理塘县| 宁晋县| 阳谷县| 东兰县| 亚东县| 瓦房店市| 上虞市| 塔河县| 广东省| 三门峡市| 松潘县| 平南县| 河池市| 平度市| 岱山县| 积石山| 凌云县| 祁东县| 临颍县| 阳城县| 简阳市| 淮安市| 阳西县| 开原市| 若尔盖县| 奉贤区|