Поиск по сайту:

Кнопка Android с использованием Kotlin и XML


В этом уроке мы узнаем, как создать кнопку в приложениях для Android с помощью программирования на Kotlin.

Обзор кнопки Android

Класс Android Button расширяет TextView. Кнопка — это виджет пользовательского интерфейса, который используется для получения кликов от пользователя для запуска действия в приложении. Кнопку можно создать в макете XML, а также в классе Kotlin Activity в проекте Android Studio.

Создание кнопки в XML-макете

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Androidly Button"/>

  • android:id используется для установки уникального идентификатора кнопки.
  • Текст android:text используется для установки текста внутри кнопки. По умолчанию текст отображается заглавными буквами.
  • android:onClick используется для определения функции Kotlin, которая будет вызываться в действии при нажатии кнопки. Это прослушиватель кликов.
  • android:background используется для установки цвета фона/рисуемого на кнопке.

Совет. Чтобы запретить отображение всех букв заглавными, используйте атрибут android:textAllCaps=false.

Дополнительные сведения о том, как настроить кнопки в XML-макете, см. в Учебном руководстве по кнопкам Android.

Слушатели нажатия кнопки

Мы также можем установить прослушиватели кнопок программно. Ниже приведены два основных слушателя:

  1. setOnClickListener – срабатывает при нажатии кнопки.
  2. setOnLongClickListner — срабатывает, когда кнопка нажимается дольше.

В следующих фрагментах кода setOnClickListener установлен над кнопкой.

button.setOnClickListener(object : View.OnClickListener {
            override fun onClick(v: View?) {
                //your implementation goes here
            }
        })

Приведенный выше код можно преобразовать в лямбда-выражение, чтобы сделать его коротким.

button.setOnClickListener {   
      textView.text = "Androidly Buttons"
    }

Точно так же setOnLongClickListener можно определить следующим образом.

button.setOnLongClickListener {
        textView.text = "Androidly Button Long click"
        true
    }

//or
button.setOnLongClickListener {
        textView.text = "Androidly Button Long click"
        false
    }

В приведенном выше коде последним оператором в каждом из выражений является оператор возврата.

  • Если setOnLongClickListener возвращает значение true, это означает, что setOnClickListener не будет активирован.
  • Если setOnLongClickListener возвращает false, это означает, что setOnClickListener будет активирован.

Это известно как потребление событий. Первый случай потребляет событие.

Кнопка Android с использованием Kotlin

Мы будем разрабатывать приложение, которое увеличивает счетчик TextView при нажатии кнопки. Мы будем использовать Kotlin для создания кнопки. Мы также узнаем о различных обработчиках нажатия кнопок.

1. Структура проекта

2. Код кнопки Котлин

Файл activity_main.layout выглядит следующим образом.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
        android:id="@+id/txtCounter"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/number_zero"
        android:textAppearance="@style/TextAppearance.AppCompat.Display2"
        android:textColor="#000" />


    <Button
        android:id="@+id/btnIncrementByOne"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="addOne"
        android:text="@string/increment_by_one" />

</LinearLayout>
package net.androidly.androidlybuttons

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v4.content.ContextCompat
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.LinearLayout
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity(), View.OnClickListener {
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var androidlyButton = Button(this)
        androidlyButton.apply {
            layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
            text = "Double the value"
            setAllCaps(false)
            textSize = 20f
            id = R.id.btnDouble
        }

        androidlyButton.setOnClickListener(this)
        linearLayout.addView(androidlyButton)

        androidlyButton = Button(this)
        androidlyButton.apply {
            layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
            text = "RESET"
            textSize = 20f
            setTextColor(ContextCompat.getColor(this@MainActivity, R.color.colorPrimaryDark))
            id = R.id.btnReset
            setOnLongClickListener {
                txtCounter.text = 0.toString()
                true
            }
        }
        androidlyButton.setOnClickListener(this)
        linearLayout.addView(androidlyButton)

    }

    override fun onClick(v: View?) {
        when (v?.id) {
            R.id.btnDouble -> {
                txtCounter.text = (txtCounter.text.toString().toInt() * 2).toString()
            }
            R.id.btnReset -> {
                txtCounter.text = (-100).toString()
            }
            else -> {
            }
        }
    }

    fun addOne(view: View) {
        txtCounter.text = (txtCounter.text.toString().toInt() + 1).toString()
    }
}

Важные моменты:

Скачать проект: AndroidlyButtons