---
title: Графический интерфейс пользователя
seo:
  title: Графический интерфейс пользователя — Kotlin Developer
  description: Тема «Графический интерфейс пользователя» для собеседования Kotlin Developer. Через какой метод вызывается перерисовка? Через какой метод вызывается перерисовка с высчитыванием размера?
---

[Все темы Kotlin Developer](/kotlin-developer)

## <strong>Через какой метод вызывается перерисовка?</strong> [#q-14bee738d69b81e8912acea330349423]

В Android View перерисовку запрашивают методом invalidate() на UI-потоке. Он планирует обновление на следующем проходе отрисовки. Из другого потока можно использовать postInvalidate().

:::note[Ссылки для изучения]

1. [Построение простого пользовательского интерфейса](https://www.fandroid.info/postroenie-prostogo-polzovatelskogo-interfejsa/)
   :::

---

## <strong>Через какой метод вызывается перерисовка с высчитыванием размера?</strong> [#q-14bee738d69b8126932fe92630925f78]

В Android View вызов requestLayout() запрашивает повторное измерение и размещение. Если изменилось и содержимое, которое рисует View, вызовите также invalidate().

:::note[Ссылки для изучения]

1. [Построение простого пользовательского интерфейса](https://www.fandroid.info/postroenie-prostogo-polzovatelskogo-interfejsa/)
   :::

---

## <strong>Как создавать пользовательские интерфейсы в</strong> <code>Android</code> <strong>с использованием Kotlin?</strong> [#q-14bee738d69b8179916cfc186cb1cbc8]

Для создания пользовательских интерфейсов в Android с использованием Kotlin используется комбинация XML-разметки и кода на Kotlin.

1. <strong>XML-разметка</strong>&#58; Определение интерфейса.

   ```xml
   <!-- res/layout/activity_main.xml -->
   <LinearLayout
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:orientation="vertical">

       <TextView
           android:id="@+id/textView"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="Hello, World!" />

       <Button
           android:id="@+id/button"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="Click Me" />
   </LinearLayout>
   ```

1. <strong>Код на Kotlin</strong>&#58; Работа с элементами интерфейса.

   ```kotlin
   // MainActivity.kt
   import android.os.Bundle
   import androidx.appcompat.app.AppCompatActivity
   import android.widget.Button
   import android.widget.TextView

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

           val button = findViewById<Button>(R.id.button)
           val textView = findViewById<TextView>(R.id.textView)
           button.setOnClickListener {
               textView.text = "Button Clicked!"
           }
       }
   }
   ```

:::note[Ссылки для изучения]

1. [Построение простого пользовательского интерфейса](https://www.fandroid.info/postroenie-prostogo-polzovatelskogo-interfejsa/)
   :::

---

## <strong>Объясните разницу между</strong> <code>View</code> <strong>и</strong> <code>ViewGroup</code> <strong>в Android.</strong> [#q-14bee738d69b81ce9daad786a99f7da0]

Разница между <code>View</code> и <code>ViewGroup</code>&#58;

- <code>View</code>&#58; Базовый класс для всех компонентов интерфейса
  (например, TextView, Button). Представляет собой отдельный элемент интерфейса.

- <code>ViewGroup</code>&#58; Наследует от View и является контейнером для
  других View и ViewGroup. Примеры&#58; LinearLayout, RelativeLayout,
  ConstraintLayout.

:::note[Ссылки для изучения]

1. [Построение простого пользовательского интерфейса](https://www.fandroid.info/postroenie-prostogo-polzovatelskogo-interfejsa/)
   :::

---

## <strong>Как работать с</strong> <code>XML</code><strong>-разметкой в Kotlin?</strong> [#q-14bee738d69b81b7981ae9b14baf919d]

XML-разметка используется для определения структуры пользовательского интерфейса. Элементы, определенные в XML, связываются с кодом на Kotlin с помощью их идентификаторов.

Пример&#58;

```xml
<!-- res/layout/activity_main.xml -->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello, World!" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click Me" />
</LinearLayout>
```

```kotlin
// MainActivity.kt
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import android.widget.Button
import android.widget.TextView

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

        val button = findViewById<Button>(R.id.button)
        val textView = findViewById<TextView>(R.id.textView)
        button.setOnClickListener {
            textView.text = "Button Clicked!"
        }
    }
}
```

Также рекомендуется использовать <code>View Binding</code> для связывания элементов интерфейса с кодом на Kotlin.

:::note[Ссылки для изучения]

1. [Построение простого пользовательского интерфейса](https://www.fandroid.info/postroenie-prostogo-polzovatelskogo-interfejsa/)
   :::

---

## <strong>Какие библиотеки вы используете для работы с графическим интерфейсом и почему?</strong> [#q-14bee738d69b8132ad08e3a3b5ac027d]

Библиотеки для работы с <code>GUI</code>&#58;

1. <code>Jetpack Compose</code>&#58; Современный инструмент для создания UI на
   Kotlin. Позволяет создавать интерфейсы декларативным способом.

1. <code>Material Components</code>&#58; Для реализации Material Design в
   приложениях.

1. <code>Glide&#47;Picasso</code>&#58; Для загрузки и отображения изображений.

1. <code>Lottie</code>&#58; Для анимаций в формате JSON.

Эти библиотеки упрощают работу с UI, предоставляют готовые компоненты и обеспечивают высокую производительность.

:::note[Ссылки для изучения]

1. [Построение простого пользовательского интерфейса](https://www.fandroid.info/postroenie-prostogo-polzovatelskogo-interfejsa/)
   :::
