Kotlin 创建一个小吃店

Kotlin create a snackbar

我们正在尝试创建一个 Snackbar。来自 Java 应用程序的代码是使用 Java 到 Android Studio 中的 Kotlin 转换器转换的。接下来,我们查看了许多不同网站上的各种示例,甚至尝试实现 Kotlin Programming Cookbook 一书中的代码。我们将 post 下面的所有非工作示例。 我们的问题是如何创建正确的语法来显示 Snackbar? 我们想单击带有 onClick=onSNACK 的 btnSNACK 以显示 Snackbar

这是我们的 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()
    }
}

我们使用 class Snackbar 有和没有这些不同的方法。 我们能够删除大多数这些示例中的所有红色警告 但作品 "make" 只是提供了相同的建议 "change variable name" 从我们 Kotlin 新手的角度来看,这是没有意义的。 我们不想使用 Anko 插件 我们也没有看到引用 Snackbar 的导入 是的,我们有 jetbrains stdlib v7 依赖没有设计依赖

Refer this for more details

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

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(com.google.android.material.R.id.snackbar_text) as TextView
    textView.setTextColor(Color.BLUE)
    textView.textSize = 28f
    snackbar.show()
}

我们对@SSB 的回答非常满意。我们注意到我们没有 Action 按钮,所以下面的代码提供了一个 Action 按钮的添加,以及如何设置它的样式似乎支持设计中的 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 可以从 Activity 中的其他函数调用,带有可选的措辞

如果有人不需要过多自定义,可以直接使用,如下:

view.snack("Your message")

为此,只需定义一个扩展函数(最好在 separated file 中):

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

在 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 显示长时间时间和解雇。

方法如下,

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

在 Kotlin 中是这样

Snackbar.make(binding.root, "My Message", Snackbar.LENGTH_SHORT).show()

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

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