Skip to content

Instantly share code, notes, and snippets.

@Khazbs
Created October 14, 2024 14:54
Show Gist options
  • Save Khazbs/5a2d263af761ad006c13f8702c571601 to your computer and use it in GitHub Desktop.
Save Khazbs/5a2d263af761ad006c13f8702c571601 to your computer and use it in GitHub Desktop.
Filled Icon Button Colors With Alpha
package ru.shindei.testapp
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.consumeWindowInsets
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.ThumbUp
import androidx.compose.material3.FilledIconButton
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButtonColors
import androidx.compose.material3.IconButtonDefaults
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Slider
import androidx.compose.material3.contentColorFor
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import ru.shindei.testapp.ui.theme.TestAppTheme
@Composable
private fun IconButtonDefaults.filledIconButtonColorsWithAlpha(
containerAlpha: Float = 1f,
contentAlpha: Float = 1f,
disabledContainerAlpha: Float = 0.12f,
disabledContentAlpha: Float = 0.38f,
containerColor: Color = MaterialTheme.colorScheme.primary
.copy(alpha = containerAlpha),
contentColor: Color = contentColorFor(containerColor)
.copy(alpha = contentAlpha),
disabledContainerColor: Color = MaterialTheme.colorScheme.onSurface
.copy(alpha = disabledContainerAlpha),
disabledContentColor: Color = MaterialTheme.colorScheme.onSurface
.copy(alpha = disabledContentAlpha),
) =
IconButtonColors(
containerColor = containerColor,
contentColor = contentColor,
disabledContainerColor = disabledContainerColor,
disabledContentColor = disabledContentColor,
)
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
TestAppTheme {
var alpha by rememberSaveable { mutableFloatStateOf(1f) }
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
LazyColumn(
modifier = Modifier
.consumeWindowInsets(innerPadding)
.fillMaxSize()
.imePadding(),
contentPadding = innerPadding,
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally,
content = {
item {
Slider(
value = alpha,
modifier = Modifier.padding(all = 16.dp),
onValueChange = { alpha = it },
)
}
item {
val animatedAlpha by animateFloatAsState(alpha, label = "alpha")
FilledIconButton(
onClick = {},
colors = IconButtonDefaults.filledIconButtonColorsWithAlpha(
containerAlpha = animatedAlpha,
),
content = {
Icon(
imageVector = Icons.Outlined.ThumbUp,
contentDescription = stringResource(R.string.like),
)
}
)
}
},
)
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment