Kotlin创建小吃店

时间:2018-08-22 17:18:18

标签: kotlin snackbar

我们正在尝试创建一个Snackbar。 Java应用程序中的代码已使用Android Studio中的Java到Kotlin转换器进行了转换。接下来,我们在许多不同的网站上查看了各种示例,甚至尝试实现《 Kotlin编程指南》一书中的代码。我们将在下面发布所有非工作示例。 我们的问题是如何创建适当的语法来显示Snackbar? 我们想单击一个带有onClick = onSNACK的btnSNACK来显示小吃栏

这是我们真的要使用的Java到Kotlin的转换器代码

    fun onSNACK(view: View){
    //Snackbar(view)
    //val snackbar = Snackbar(view, "Permission Granted", Snackbar.LENGTH_LONG).setAction("Action", null).show()
        snackbar.make(view, "Replace with your own action", 
        snackbar.LENGTH_LONG).setAction("Action", null).show()    
        snackbar.setActionTextColor(Color.BLUE)
        val snackbarView = snackbar.getView()
        snackbarView.setBackgroundColor(Color.LTGRAY)
        val textView = 
        snackbarView.findViewById(android.support.design.R.id.snackbar_text)
        textView.setTextColor(Color.BLUE)
        textView.setTextSize(28f)
        snackbar.show()
}

下次尝试使用此代码

    class Snackbar{
    object LENGTH_LONG {
    }
    fun show() {
    }
}

fun onSNACK(view: View){
    snackbar = Snackbar.make(this, "Welcome to Android Teachers..!!", 
    Snackbar.LENGTH_LONG)
    snackbar.show()
}

我们的布局是具有Snackbar的Activity的RelativeLayout(RL)

    class Snackbar(view: View?): Any() {
    object LENGTH_SHORT {}

fun View.snack(message: String, length: Int = Toast.LENGTH_LONG, f: Snackbar. 
() -> Unit) {
    val snack = Snackbar.make(this.findViewById(R.id.RL), message, length)
    snack.f()
    snack.show()
}

我们认为这将使第一行代码声明为顶层

    lateinit var snackbar: Snackbar//top level
fun onSNACK(){
    btnSNACK.setOnClickListener { view ->
        Snackbar.make(view, "Replace with your own action", 
        Snackbar.LENGTH_LONG)
                .setAction("Action", null).show()
    }
}

我们在带有和不带有这些各种方法的情况下使用了Snackbar类。 在大多数示例中,我们都能够删除所有红色警告 但是作品“ make”只是提供了相同的建议“更改变量名称” 从我们Kotlin新手的角度来看,这毫无意义。 我们不想使用Anko插件 我们还看不到任何引用Snackbar的导入 是的,我们有jetbrains stdlib v7依赖性,没有设计依赖性

7 个答案:

答案 0 :(得分:4)

因为小吃店是支持设计库的一部分,所以您需要在应用程序模块build.gradle中添加以下依赖项

implementation 'com.android.support:design:27.1.1'

请参阅此以获取更多详细信息https://developer.android.com/reference/android/support/design/widget/Snackbar

然后是您修改后的代码,其中将显示小吃店

fun onSNACK(view: View){
    //Snackbar(view)
    val snackbar = Snackbar.make(view, "Replace with your own action",
            Snackbar.LENGTH_LONG).setAction("Action", null)
    snackbar.setActionTextColor(Color.BLUE)
    val snackbarView = snackbar.view
    snackbarView.setBackgroundColor(Color.LTGRAY)
    val textView =
            snackbarView.findViewById(android.support.design.R.id.snackbar_text) as TextView
    textView.setTextColor(Color.BLUE)
    textView.textSize = 28f
    snackbar.show()
}

答案 1 :(得分:0)

我们对@SSB的回答感到非常满意。我们注意到我们没有动作按钮,因此下面的代码提供了一个动作按钮,以及如何样式化支持设计中的Snackbar_action在尝试提供示例代码的网站上很少或根本没有提及。单击DISMISS按钮时,我们只是在调用另一个函数。

    fun onSNACK(view: View){

    var AC:String
    AC = "DISMISS"

    val snackbar = Snackbar.make(view, "Click DISMISS to CLOSE", Snackbar.LENGTH_INDEFINITE)
            .setAction(AC,View.OnClickListener {weekDAY(null) })

    snackbar.setActionTextColor(Color.RED)
    val snackbarView = snackbar.view
    snackbarView.setBackgroundColor(Color.LTGRAY)
    val textView = snackbarView.findViewById(android.support.design.R.id.snackbar_text) as TextView
    val actionTextView = snackbarView.findViewById(android.support.design.R.id.snackbar_action)as TextView
    textView.setTextColor(Color.BLUE)
    textView.textSize = 28f
    actionTextView.textSize = 28f

    snackbar.show()
}

顶部的两行代码是一个实验,用于查看是否可以通过EditText设置Snackbar中的文本。这种设计将允许在活动中的其他函数中使用可选的

调用Snackbar。

答案 2 :(得分:0)

如果某人不需要对其进行太多自定义,则可以直接使用它,如下所示:

view.snack("Your message")

要这样做,只需定义一个扩展函数(最好在StandardLayoutType中):

fun View.snack(message: String, duration: Int = Snackbar.LENGTH_LONG) {
    Snackbar.make(this, message, duration).show()
}

答案 3 :(得分:0)

在Koltin中显示它的简单方法:

private fun showSnackBar() {
        val snack = Snackbar.make(rootView, "Sample snack bar message", Snackbar.LENGTH_INDEFINITE)
        snack.setAction("Click Me") {
            // TODO when you tap on "Click Me"
        }
        snack.show()
    }

注意:将rootView替换为布局中显示的视图ID,并在短时间内将LENGTH_INDEFINITE更改为LENGTH_SHORT或在长时期内将LENGTH_LONG更改为解雇。

答案 4 :(得分:0)

这是怎么回事,

Snackbar.make(requireView(), "Hello World", Snackbar.LENGTH_SHORT).show()

答案 5 :(得分:0)

像这样在 Kotlin 中

Snackbar.make(binding.root, "我的消息", Snackbar.LENGTH_SHORT).show()

答案 6 :(得分:0)

我有同样的问题,但我用它来解决我的问题

     val snack = Snackbar.make(View(this@MainActivity),"This is a simple Snackbar",Snackbar.LENGTH_LONG)
     snack.show()