11

我们正在尝试创建一个 Snackbar。Java 应用程序的代码是使用 Android Studio 中的 Java 到 Kotlin 转换器进行转换的。接下来,我们查看了许多不同网站上的各种示例,甚至尝试实现 Kotlin Programming Cookbook 中的代码。我们将在下面发布所有非工作示例。我们的问题是如何创建正确的语法来显示 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()
    }
}

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

4

7 回答 7

23

有关更多详细信息,请参阅此

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

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()
}
于 2018-08-22T17:31:26.530 回答
3

在 Kotlin 中像这样

Snackbar.make(binding.root, "My Message", Snackbar.LENGTH_SHORT).show()
于 2021-02-25T11:06:12.190 回答
2

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

     val snack = Snackbar.make(View(this@MainActivity),"This is a simple Snackbar",Snackbar.LENGTH_LONG)
     snack.show()
于 2021-04-09T05:33:39.483 回答
2

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

view.snack("Your message")

为此,只需定义一个扩展函数(最好在单独的文件中):

fun View.snack(message: String, duration: Int = Snackbar.LENGTH_LONG) {
    Snackbar.make(this, message, duration).show()
}
于 2019-12-17T21:07:45.470 回答
1

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

于 2018-08-22T22:18:12.140 回答
1

在 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_INDEFINITELENGTH_SHORT短时间或LENGTH_LONG长时间显示并关闭。

于 2020-07-23T08:39:17.720 回答
0

这里是如何,

Snackbar.make(requireView(), "Hello World", Snackbar.LENGTH_SHORT).show()
于 2020-12-15T20:47:08.987 回答