Загрузка данных


package com.example.myapplication  // замените на свой пакет

import android.os.Bundle
import android.view.ViewGroup
import android.widget.Button
import android.widget.EditText
import android.widget.LinearLayout
import android.widget.ScrollView
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 1. Создаём ScrollView (корневой контейнер)
        val scrollView = ScrollView(this)
        // Параметры для ScrollView: вся ширина и вся высота
        scrollView.layoutParams = ViewGroup.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT
        )

        // 2. Создаём LinearLayout, который будет внутри ScrollView
        val linearLayout = LinearLayout(this)
        // Параметры для LinearLayout внутри ScrollView
        linearLayout.layoutParams = ScrollView.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT
        )
        linearLayout.orientation = LinearLayout.VERTICAL
        // Отступы (в пикселях, 32px ≈ 8-10dp в зависимости от плотности)
        linearLayout.setPadding(64, 64, 64, 64)

        // 3. Элементы интерфейса
        val title = TextView(this)
        title.text = "Калькулятор ИМТ"
        title.textSize = 28f
        title.setTypeface(null, android.graphics.Typeface.BOLD)
        title.gravity = android.view.Gravity.CENTER
        title.setPadding(0, 0, 0, 40)
        // Для TextView внутри LinearLayout можно не задавать LayoutParams,
        // LinearLayout сам подстроится, но лучше задать:
        title.layoutParams = LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT
        )

        val weightInput = EditText(this)
        weightInput.hint = "Вес (кг)"
        weightInput.inputType = android.text.InputType.TYPE_CLASS_NUMBER or android.text.InputType.TYPE_NUMBER_FLAG_DECIMAL
        weightInput.setPadding(20, 20, 20, 20)
        weightInput.layoutParams = LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT
        )

        val heightInput = EditText(this)
        heightInput.hint = "Рост (м) — например, 1.75"
        heightInput.inputType = android.text.InputType.TYPE_CLASS_NUMBER or android.text.InputType.TYPE_NUMBER_FLAG_DECIMAL
        heightInput.setPadding(20, 20, 20, 20)
        heightInput.layoutParams = LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT
        )

        val button = Button(this)
        button.text = "Рассчитать ИМТ"
        button.setPadding(0, 30, 0, 30)
        button.layoutParams = LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT
        )

        val resultText = TextView(this)
        resultText.text = ""
        resultText.textSize = 18f
        resultText.gravity = android.view.Gravity.CENTER
        resultText.setPadding(0, 40, 0, 0)
        resultText.layoutParams = LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT
        )

        // Добавляем элементы в LinearLayout
        linearLayout.addView(title)
        linearLayout.addView(weightInput)
        linearLayout.addView(heightInput)
        linearLayout.addView(button)
        linearLayout.addView(resultText)

        // Добавляем LinearLayout в ScrollView
        scrollView.addView(linearLayout)

        // Устанавливаем ScrollView как содержимое экрана
        setContentView(scrollView)

        // Логика кнопки (та же, что была)
        button.setOnClickListener {
            val weightStr = weightInput.text.toString().trim()
            val heightStr = heightInput.text.toString().trim()

            if (weightStr.isEmpty() || heightStr.isEmpty()) {
                resultText.text = "Ошибка: заполните оба поля"
                return@setOnClickListener
            }

            val weight = weightStr.toDoubleOrNull()
            val height = heightStr.toDoubleOrNull()

            if (weight == null || height == null) {
                resultText.text = "Ошибка: введите числа (используйте точку)"
                return@setOnClickListener
            }

            if (weight <= 0 || height <= 0) {
                resultText.text = "Ошибка: вес и рост должны быть больше нуля"
                return@setOnClickListener
            }

            val bmi = weight / (height * height)
            val bmiFormatted = String.format("%.1f", bmi)

            val category = when {
                bmi < 18.5 -> "Дефицит массы тела"
                bmi < 25.0 -> "Нормальная масса тела"
                bmi < 30.0 -> "Избыточная масса тела (предожирение)"
                else -> "Ожирение"
            }

            resultText.text = "Ваш ИМТ: $bmiFormatted\n($category)"
        }
    }
}