融會(huì)貫通Android?Jetpack?Compose中的Snackbar
正文
開(kāi)始寫(xiě)Compose的時(shí)候,真的有點(diǎn)不習(xí)慣。思考方式和以前完全不同,有點(diǎn)類(lèi)似ReactNative。 寫(xiě)習(xí)慣了之后,還真有點(diǎn)欲罷不能,行云流水~
Snackbar感覺(jué)就是Toast Plus版,可以自定義視圖,還可以進(jìn)行交互,可以用在很多地方實(shí)現(xiàn)意想不到的效果。

主要的實(shí)現(xiàn)思路
主要的實(shí)現(xiàn)思路有兩部步:
- 1.Snackbar的控制邏輯
- 2.Snackbar的UI部分
Snackbar UI部分
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
actionBar?.hide()
setContent {
ContentView(Modifier.fillMaxSize())
}
}
}
@Composable
fun ContentView(modifier: Modifier) {
val context = LocalContext.current
val snackBarState = remember {
SnackbarHostState()
}
val coroutineScope = rememberCoroutineScope()
Surface(
color = Color.DarkGray,
modifier = modifier.fillMaxSize()
) {
Box(modifier = modifier.fillMaxSize()) {
Button(
modifier = modifier
.align(Alignment.Center)
.wrapContentSize()
,
onClick = {
coroutineScope.launch {//showSnackbar為suspend函數(shù),要在協(xié)成調(diào)用
snackBarState.showSnackbar("")
}
},
colors = ButtonDefaults.buttonColors(
backgroundColor = Color.White,
contentColor = Color.Black
)
) {
Text(text = "顯示SnackBar", fontSize = 16.sp)
}
SnackbarHost(
modifier = modifier.align(Alignment.BottomCenter),
hostState = snackBarState
) {
// custom snackBar
CustomSnackBar(
title = "我是綠色大米呀",
content = "關(guān)注點(diǎn)一波~下次不迷路哦!",
profileImageResource = R.drawable.head,
actionImageResource = R.drawable.back_black_bg,
onAction = {}
)
}
}
}
}
@Composable
fun CustomSnackBar(
modifier: Modifier = Modifier,
title: String,
content: String,
profileImageResource: Int,
actionImageResource: Int,
onAction: () -> Unit
) {
Snackbar(
elevation = 0.dp,//去掉陰影
backgroundColor = Color.Transparent
) {
Box(
modifier = modifier
.fillMaxWidth()
.wrapContentHeight()
) {
Column(
modifier = modifier
.padding(top = 10.dp)
.fillMaxWidth()
.clip(RoundedCornerShape(10.dp))
.background(
Brush.verticalGradient(
colors = listOf(
Color(android.graphics.Color.parseColor("#0ac1ff")),
Color(android.graphics.Color.parseColor("#fb2c38"))
)
)
)
.padding(start = 78.dp, top = 8.dp, bottom = 12.dp, end = 8.dp),
horizontalAlignment = Alignment.Start
) {
Text(
modifier = modifier.
padding(top = 5.dp),
text = title,
color = Color.White,
fontWeight = FontWeight.Bold,
fontSize = 22.sp
)
Spacer(modifier = modifier.padding(vertical = 2.dp))
Text(
text = content,
color = Color.White,
fontStyle = FontStyle.Italic,
fontSize = 15.sp
)
}
Column(
modifier = modifier
.padding(start = 16.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
Card(
elevation = 6.dp,
shape = RoundedCornerShape(8.dp)
) {
Image(
painter = painterResource(profileImageResource),
contentScale = ContentScale.Crop,
contentDescription = null,
modifier = modifier.size(50.dp)
)
}
}
Image(
painter = painterResource(actionImageResource),
contentDescription = null,
contentScale = ContentScale.Fit,
modifier = modifier
.align(Alignment.BottomEnd)
.padding(bottom = 10.dp, end = 10.dp)
.size(23.dp)
.rotate(180f)
.clickable(
interactionSource = MutableInteractionSource(),
indication = null,
onClick = onAction
)
)
}
}
}不知道為什么,我的這個(gè)Snackbar一直出現(xiàn)在屏幕頂部,如果想讓它出現(xiàn)在底部應(yīng)該如何實(shí)現(xiàn)?更多關(guān)于Android Jetpack Compose Snackbar的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Jetpack Compose按鈕組件使用實(shí)例詳細(xì)講解
- Jetpack Compose圖片組件使用實(shí)例詳細(xì)講解
- Jetpack Compose之選擇器使用實(shí)例講解
- Jetpack Compose實(shí)現(xiàn)對(duì)話框和進(jìn)度條實(shí)例解析
- Android使用Jetpack Compose開(kāi)發(fā)零基礎(chǔ)起步教程
- Jetpack?Compose基礎(chǔ)組件之文字組件
- Jetpack?Compose實(shí)現(xiàn)對(duì)角線滾動(dòng)效果
- 使用Jetpack Compose實(shí)現(xiàn)翻轉(zhuǎn)卡片效果流程詳解
相關(guān)文章
Android應(yīng)用中制作選中后圖標(biāo)變大浮動(dòng)效果的代碼分享
這篇文章主要介紹了Android應(yīng)用中制作選中后圖標(biāo)變大浮動(dòng)效果的代碼分享,這里作者舉了一個(gè)體育賽事app的例子,需要的朋友可以參考下2016-02-02
在android中ScrollView嵌套ScrollView解決方案
大家好,眾所周知,android里兩個(gè)相同方向的ScrollView是不能嵌套的,那要是有這樣的需求怎么辦,接下來(lái)為您介紹解決方法,感興趣的朋友可以了解下2013-01-01
Android:“萬(wàn)能”Activity重構(gòu)篇
本文主要介紹了mvp以及每一層,以及使用mvp來(lái)重構(gòu)“萬(wàn)能”Activity,其實(shí)每一層需要注意的東西還有很多,比如model層是最難寫(xiě)的一層。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01
Android程序開(kāi)發(fā)之防止密碼輸入錯(cuò)誤 密碼明文顯示功能
在使用App的時(shí)候,首次登錄都需要用戶輸入密碼的,有些朋友為了安全起見(jiàn)密碼設(shè)置的比較長(zhǎng),導(dǎo)致很多次密碼都輸入錯(cuò)誤,嚴(yán)重影響了用戶體驗(yàn)效果,下面通過(guò)本文給大家介紹Android程序開(kāi)發(fā)之防止密碼輸入錯(cuò)誤 密碼明文顯示功能,需要的朋友參考下2016-02-02
Android實(shí)現(xiàn)底部彈出PopupWindow背景逐漸變暗效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)底部彈出PopupWindow背景逐漸變暗效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
Android訪問(wèn)php取回json數(shù)據(jù)實(shí)例
Android訪問(wèn)php取回json數(shù)據(jù),實(shí)現(xiàn)代碼如下,遇到訪問(wèn)網(wǎng)絡(luò)的權(quán)限不足在AndroidManifest.xml中,需要進(jìn)行如下配置2013-06-06

