Modifier
.paddingFromBaseline(top = 24.dp, bottom = 16.dp)
2021年4月2日金曜日
2021年3月29日月曜日
改行を入力させない EditText 用 InputFilter
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val editText = findViewById<EditText>(R.id.editText)
editText.filters = editText.filters + MyInputFilter()
}
}
class MyInputFilter : InputFilter {
override fun filter(
source: CharSequence,
start: Int,
end: Int,
dest: Spanned,
dstart: Int,
dend: Int
): CharSequence? {
var i: Int = start
while (i < end) {
if (source[i] == '\n') {
break
}
i++
}
if (i == end) {
return null
}
val filtered = SpannableStringBuilder(source, start, end)
val start2 = i - start
val end2 = end - start
for (j in end2 - 1 downTo start2) {
if (source[j] == '\n') {
filtered.delete(j, j + 1)
}
}
return filtered
}
}
2021年3月23日火曜日
Kotlin Serialization は sealed class も対応していて便利
Kotlin Serialization
plugins {
...
id "org.jetbrains.kotlin.plugin.serialization" version "1.4.31"
}
dependencies {
...
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.1.0"
}
@Serializable
data class Dog(val name: String, val age: Int, val sex: Sex, val kind: Kind)
enum class Sex {
MALE,
FEMALE
}
@Serializable
sealed class Kind {
@Serializable
object Hybrid : Kind()
@Serializable
data class PureBlood(val name: String) : Kind()
}
class DogTest {
@Test
fun list() {
val dogs = listOf(
Dog("White", 10, Sex.MALE, Kind.Hybrid),
Dog("Black", 20, Sex.FEMALE, Kind.PureBlood("Husky"))
)
val json = Json.encodeToString(dogs)
println(json)
// [{"name":"White","age":10,"sex":"MALE","kind":{"type":"net.yanzm.serialize.Kind.Hybrid"}},{"name":"Black","age":20,"sex":"FEMALE","kind":{"type":"net.yanzm.serialize.Kind.PureBlood","name":"Husky"}}]
val decoded = Json.decodeFromString<List<Dog>>(json)
assertThat(decoded).isEqualTo(dogs)
}
}
登録:
投稿 (Atom)