嗨,大家好我是Android / Kotlin / Anko的新手,我有一个关于如何访问Anko内部的颜色(也可能是其他)资源的问题。 我知道有一些像textResource这样的textResource ,只需传递R.string.my_color来简化设置资源字符串的过程,但是如何使用View类的Resources实例访问颜色呢? 假设您有Button的子类,并且想要更改文本颜色。 如果你使用textResource它会改变文本字符串而不是颜色,如果你使用textColor那么你必须使用resources.getColor(R.color.my_color, null)来指定真实的资源ID resources.getColor(R.color.my_color, null)这将不会如此讨厌你不必传递可选的主题参数(这里是null ) 在这里创建Resources扩展有用吗? fun Int.fromResources(resources: Resources): Int { return resources.getColor(this, null) } 什么是推荐的方式? 编辑 我改变了textColor值的扩展,做到这一点,我发现最干净的事情,除了我不知道这是否真的是Android友好 var android.widget.TextView.textColor: Int get() = throw AnkoException(“‘android.widget.TextView.textColor’ property does not have a getter”) set(v) = setTextColor(resources.getColor(v, null))
有没有像在shell脚本中一样在adb shell中运行kotlin脚本的方法? 这甚至可能吗?
我是Kotlin新手。 我想写一个保存数据的类。 我想要两个构造函数。 我想要的是这样的 class InstituteSearchDetails (var centerId: String) { lateinit var centerId: String; lateinit var instituteName: String; lateinit var city: String; init { this.centerId=centerId } constructor( instituteName: String, city: String) { this.instituteName=instituteName; this.city=city; } } 但在次要的构造函数行上说,主构造函数是必需的。 我知道一些代表团是必需的,在那里调用主构造器的forms。 我不能从这里调用主构造函数。 如果我正在做一些愚蠢的错误,我很抱歉。 我对这件事很陌生
为什么”b23c77126dd924bf”.toLong(16)产生java.lang.NumberFormatException ? 截至官方文档 ,Long表示一个64位有符号整数 而0xb23c77126dd924bf适合64位,十进制-5603472915319675713
正如https://cloud.google.com/appengine/docs/standard/java/tools/gradle-reference中所述,AppEngine Gradle插件提供的配置如下所示: appengine { // App Engine tasks configuration run { // local (dev_appserver) configuration (standard environments only) port = 8080 // default } deploy { // deploy configuration stopPreviousVersion = true // default – stop the current version promote = true // default – & make this the current version } } 如何使用build.gradlke.kts这样的配置看起来像? 我正在查看AppEngine任务,但不明白将此连接到适当的Kotlin […]
如果我这样在Kotlin中声明扩展函数或扩展属性 var View.newPosition: Int get():Int { return newPosition } set(value) { this.newPosition=value Log.e(“test”,”newPosition”+newPosition) } fun View.setPosition(value:Int ){ Log.e(“test”, “Position” + value) } 然后我想通过这样的Javareflection来获取它们 Class stuClass = null; try { stuClass = Class.forName(“android.view.View”); } catch (Exception e) { Log.e(“test”, e.toString()); } Field f = null; try { f = stuClass.getField(“newPosition”); } catch (Exception e) { Log.e(“test”, […]
kotlin.reflect.jvm.internal.KotlinReflectionInternalError:反思本地函数,lambdas,匿名函数和局部variables在Kotlinreflection中还没有完全支持 这个exception来自数据类的toString() 。 数据类包含一个lambda。 我不能在我的环境中重现它。 我是否需要重写toString()来排除lambda? 或者lambda在数据类中是不允许的? data class PersistJob( private val id: Int, private val delay: Long = 10_000L, private val maxDelay: Long = 60_000L, private val iteration: Int = 0, private val block: suspend (Int) -> Boolean) { fun getDelay() = minOf(delay, maxDelay) fun withDelayIncreased() = copy( delay = minOf(delay * 2, maxDelay), […]
所以,虽然这是一个特定于Gradle的问题的kotlin-dsl,但我认为它总体上适用于kotlin语言本身,所以我不打算使用该标记。 在gradle API中,类Action被定义为: @HasImplicitReceiver public interface Action { /** * Performs this action against the given object. * * @param t The object to perform the action on. */ void execute(T t); } 所以理想情况下,这应该在kotlin中工作(因为它是一个带有SAM的类): val x : Action = { println(“>> ${it.trim(0)}”) Unit } 但是我得到以下两个错误: Unresolved reference it Expected Action but found () -> Unit […]
我使用的是基于IntelliJ 14.1 EAP的Android Studio 1.2 Preview,最近更新到Kotlin M11。 对于某种方法,IDE报告它是未使用的。 我习惯于有一个意图,说:“禁止元素/方法/类的警告”,但现在似乎已经消失。 我怎样才能压制警告,至少手动?
我试图在Kotlin上编写简单的堆栈,但是所有的数据容器总是抛出ArrayIndexOutOfBoundsExceptionexception。 我找不出可能导致这个问题的原因: class StackX(size: Int) { private var maxSize: Int = size private var stackArray: Array = arrayOf(maxSize.toLong()) private var top = -1 fun push(data: Long) { stackArray[++top] = data } fun pop() : Long { return stackArray[top–] } fun peek() : Long { return stackArray[top] } fun isEmpty() : Boolean { return (top == […]