Skip to content

Instantly share code, notes, and snippets.

@cicerohellmann
Created April 29, 2021 12:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cicerohellmann/c4a40618c4045be116b9b14f9953b4df to your computer and use it in GitHub Desktop.
Save cicerohellmann/c4a40618c4045be116b9b14f9953b4df to your computer and use it in GitHub Desktop.
Custom button that has two presentation modes within
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.*
import androidx.compose.material.Button
import androidx.compose.material.ButtonDefaults
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.your.project.R
import com.your.project.resources.*
@Preview(showBackground = true)
@Composable
fun ButtonPreview() {
Column {
Spacer(modifier = Modifier.height(Dimens.buttonHeight))
Button(
Modifier.padding(
start = DimensUroletics.generalPaddingStart,
end = Dimens.generalPaddingEnd
),
"Test String",
{ println("test") },
true,
painterResource(R.drawable.ic_sample)
)
Spacer(modifier = Modifier.height(Dimens.buttonHeight))
Button(
Modifier.padding(
start = Dimens.generalPaddingStart,
end = Dimens.generalPaddingEnd
),
"Test String",
{ println("test") },
false,
painterResource(R.drawable.ic_sample)
)
Spacer(modifier = Modifier.height(Dimens.buttonHeight))
}
}
@Composable
fun Button(
modifier: Modifier,
text: String,
action: () -> Unit,
isEmptyStyle: Boolean,
icon: Painter? = null
) {
Button(
modifier = modifier
.fillMaxWidth(),
colors = if (!isEmptyStyle) ButtonDefaults.buttonColors(backgroundColor = Color.buttonBackground)
else ButtonDefaults.buttonColors(backgroundColor = Color.buttonBackgroundSecondary),
onClick = { action },
border = BorderStroke(1.dp, Color.buttonBorder),
elevation = ButtonDefaults.elevation(0.dp)
) {
if (icon != null) {
Image(
painter = icon,
contentDescription = null,
contentScale = ContentScale.Fit,
colorFilter = if (!isEmptyStyle) ColorFilter.tint(Color.buttonIcon) else ColorFilter.tint(Color.buttonIconSecondary)
)
}
Spacer(
modifier = Modifier
.width(Dimens.buttonSpaceBetweenIcon)
.height(Dimens.buttonHeight)
)
TextMedium(
text = text.capitalize(),
color = if (!isEmptyStyle) Color.buttonText else Color.buttonTextSecondary,
fontSize = FontSize.button,
letterSpacing = LetterSpacing.button,
lineHeight = LineHeight.button
)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment