- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
也许有人可以告诉我如何在 Switch() 中设置 Track Width、Track StrokeWidth、Thumb Diameter 的大小
Switch(
modifier = Modifier
.padding(end=16.dp),
checked = auto.mainAuto.value,
onCheckedChange = { auto.mainAuto.value = it },
colors = SwitchDefaults.colors(
checkedThumbColor = white_white,
checkedTrackColor = Accent_Blue,
uncheckedThumbColor = white_white,
uncheckedTrackColor = Disabled_Text,
),
)
最佳答案
从 Jetpack Compose 1.0.4 开始,您无法更改它们。但是,好消息是您可以使用 Canvas API 轻松创建任何类型的开关。
例如:
这是代码:
喜欢的话我做了一些UI designs with Jetpack Compose .请随时查看它们。
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.gestures.detectTapGestures
import androidx.compose.foundation.layout.*
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.scale
import androidx.compose.ui.geometry.CornerRadius
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
/*
For more designs with source code, visit: https://semicolonspace.com/jetpack-compose-samples/
*/
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
BlogPostsTheme(darkTheme = false) {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colors.background
) {
Column(
modifier = Modifier.fillMaxSize(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Switch2()
}
}
}
}
}
}
@Composable
fun Switch2(
scale: Float = 2f,
width: Dp = 36.dp,
height: Dp = 20.dp,
strokeWidth: Dp = 2.dp,
checkedTrackColor: Color = Color(0xFF35898F),
uncheckedTrackColor: Color = Color(0xFFe0e0e0),
gapBetweenThumbAndTrackEdge: Dp = 4.dp
) {
val switchON = remember {
mutableStateOf(true) // Initially the switch is ON
}
val thumbRadius = (height / 2) - gapBetweenThumbAndTrackEdge
// To move thumb, we need to calculate the position (along x axis)
val animatePosition = animateFloatAsState(
targetValue = if (switchON.value)
with(LocalDensity.current) { (width - thumbRadius - gapBetweenThumbAndTrackEdge).toPx() }
else
with(LocalDensity.current) { (thumbRadius + gapBetweenThumbAndTrackEdge).toPx() }
)
Canvas(
modifier = Modifier
.size(width = width, height = height)
.scale(scale = scale)
.pointerInput(Unit) {
detectTapGestures(
onTap = {
// This is called when the user taps on the canvas
switchON.value = !switchON.value
}
)
}
) {
// Track
drawRoundRect(
color = if (switchON.value) checkedTrackColor else uncheckedTrackColor,
cornerRadius = CornerRadius(x = 10.dp.toPx(), y = 10.dp.toPx()),
style = Stroke(width = strokeWidth.toPx())
)
// Thumb
drawCircle(
color = if (switchON.value) checkedTrackColor else uncheckedTrackColor,
radius = thumbRadius.toPx(),
center = Offset(
x = animatePosition.value,
y = size.height / 2
)
)
}
Spacer(modifier = Modifier.height(18.dp))
Text(text = if (switchON.value) "ON" else "OFF")
}
除了 Canvas
,您还可以使用 Box
。 See this example .
关于android-jetpack-compose - Jetpack compose Switch() Track Width、Track StrokeWidth、Thumb Diameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67640056/
当您在 Kinetic 中使用 strokeWidth 时,它会在实际点的每一侧增加宽度。因此,换句话说,笔画以通常为 1px 的线为中心,并且该线的宽度从中心向外增长。 因此,例如在下图“A”中,您
我尝试了一些方法,但似乎找不到合适的方法, 我如何向这一层添加样式: var line_1 = new OpenLayers.Layer.Vector("Line nr 1", {
您好,我正在研究 fabricjs 库,但遇到了一个错误。 我正在绘制一组 Text 和 Rect,然后重新调整其大小。但我看到 @borders 组的大小随着 re-sizing 的增加而增加。但我
我想给 strokeStyle 和 strokewidth 属性。 我正在尝试来自 http://fabricjs.com/fabric-intro-part-2/#text 的示例,但我无法在屏幕上
我刚刚将支持库从 27 更新到 28,但它没有成功构建并出现以下错误: Android resource compilation failed Output: /AndroidProjects/Br
注意:我已经引用了SO question , 但它对我的情况没有用,因为 1) 我试图保持以前的边界,但截至目前它在缩放时重新计算边界。 我添加了下面的代码以在缩放对象时停止自动增加边框。现在的问题是
这个问题在这里已经有了答案: how to set a border around circle image view like instagram? (1 个回答) 去年关闭。 今天刚试了Shape
我正在编写代码以在 Fabricjs 中的所有对象中保持相同的 strokeWidth。 我能够成功地维护普通对象的 strokeWidth ,让它成为矩形或椭圆形(我编写代码来维护两者)。但是当我使
我已经动态添加了一个 CSS 类,如下所示: var style = document.createElement('style'); style.id = "highlightSegment"; v
我在 iOS 14 上遇到了笔画颜色问题。 let attributes: [NSAttributedString.Key: Any] = [ .foregroundColor: UIColo
对于以下自定义 View :如果笔划宽度为 0.01,则在 Android M 和 pre-M 设备中(例如: Lollipop ) 但是,如果笔划宽度为 0.0f,则在 Android M 和 pr
我环顾了互联网但一无所获,我查看了其他 KineticJS 示例,这些示例在其矩形上使用 strokeWidth 为 1,它们似乎都有一条半透明的 2 像素线而不是漂亮的锐利 1px不透明的黑线。 现
我想我遇到了一个讨厌的错误。问题是几乎是水平线具有轻微的渐变并使用 StrokeWidth = 1 的 Paint 不是绘制,例如: public class MyControl extends Vi
试图在 cardView 周围做一些边框(androidx.cardview.widget.CardView) 这是代码: 结果: 还尝试使用自定义形状作为背景( fix_border.xml )
也许有人可以告诉我如何在 Switch() 中设置 Track Width、Track StrokeWidth、Thumb Diameter 的大小 Switch(
我是一名优秀的程序员,十分优秀!