web-dev-qa-db-ja.com

Kotlinはスナックバーを作成します

スナックバーを作成しようとしています。 Javaアプリからのコードは、Java Android StudioのKotlinコンバーターを使用して変換されました。次に、さまざまな多くの異なるウェブサイトでの例や、Kotlinプログラミングクックブックのコードを実装することも試みました。以下の機能しない例をすべて掲載します。質問は、Snackbarを表示する適切な構文を作成する方法ですか?btnSNACKをクリックしますスナックバーを表示するonClick = onSNACK

これは私たちの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()
}

私たちのレイアウトは、スナックバーを持つアクティビティの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を参照するインポートもありません。そうです。jetbrainsstdlib v7依存関係があります。デザイン依存関係はありません。

5
Vector

誰かがあまりカスタマイズする必要がない場合は、次のように直接使用できます。

view.snack("Your message")

これを行うには、拡張関数を定義します(できれば 分離されたファイル ):

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