Давайте напишем генератор паролей для Android на Kotlin😁
1. Создание проекта в Android Studio.
- Запусти Android Studio.
- Выбери New Project → Empty Activity.
- Укажи:
- Name: Password Generator
- Package name: com.example.passwordgenerator
- Language: Kotlin
- Minimum SDK: API 21 (Android 5.0)
2. Файл манифеста (AndroidManifest.xml).
//----------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.passwordgenerator">
<!-- Разрешение на доступ к буферу обмена -->
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.PasswordGenerator">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
//----------------------------------------------
3. Разметка активности (res/layout/activity_main.xml).
//----------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
tools:context=".MainActivity">
<!-- Поле для ввода длины пароля -->
<EditText
android:id="@+id/lengthInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp"
android:hint="Длина пароля"
android:inputType="number"/>
<!-- Чекбоксы для выбора символов -->
<CheckBox
android:id="@+id/uppercaseCheckbox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Верхний регистр (A-Z)"/>
<CheckBox
android:id="@+id/symbolsCheckbox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Спецсимволы (!@#)"/>
<!-- Кнопка генерации -->
<Button
android:id="@+id/generateButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Сгенерировать"/>
<!-- Поле для вывода результата -->
<TextView
android:id="@+id/passwordOutput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:paddingTop="16dp"/>
</LinearLayout>
//----------------------------------------------
4. Код активности (MainActivity.kt).
//----------------------------------------------
package com.example.passwordgenerator
import android.os.Bundle
import android.widget.Button
import android.widget.CheckBox
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Инициализация элементов интерфейса
val lengthInput = findViewById<EditText>(R.id.lengthInput)
val uppercaseCheckbox = findViewById<CheckBox>(R.id.uppercaseCheckbox)
val symbolsCheckbox = findViewById<CheckBox>(R.id.symbolsCheckbox)
val generateButton = findViewById<Button>(R.id.generateButton)
val passwordOutput = findViewById<TextView>(R.id.passwordOutput)
// Обработчик нажатия на кнопку
generateButton.setOnClickListener {
try {
// Получаем длину пароля
val length = lengthInput.text.toString().toInt()
// Проверка минимальной длины
if(length < 4) {
Toast.makeText(this, "Минимальная длина - 4 символа!", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
// Генерируем пароль
val password = generatePassword(
length = length,
useUppercase = uppercaseCheckbox.isChecked,
useSymbols = symbolsCheckbox.isChecked
)
// Выводим результат
passwordOutput.text = "Ваш пароль:\n$password"
} catch (e: NumberFormatException) {
// Обработка ошибки ввода
Toast.makeText(this, "Введите корректную длину!", Toast.LENGTH_SHORT).show()
}
}
}
// Функция генерации пароля
private fun generatePassword(
length: Int,
useUppercase: Boolean,
useSymbols: Boolean
): String {
// Базовые наборы символов
val lowercase = "abcdefghijklmnopqrstuvwxyz"
val uppercase = if(useUppercase) "ABCDEFGHIJKLMNOPQRSTUVWXYZ" else ""
val symbols = if(useSymbols) "!@#$%^&*()_+" else ""
val numbers = "0123456789"
// Собираем все доступные символы
val allCharacters = "$lowercase$uppercase$symbols$numbers"
// Проверка, что хотя бы один набор выбран
if(allCharacters.isEmpty()) {
return "Выберите параметры!"
}
// Генерируем случайные символы
return List(length) {
allCharacters.random()
}.joinToString("")
}
}
//----------------------------------------------
Пояснение кода:
- Инициализация элементов:
- findViewById связывает XML-элементы с переменными в коде.
- Каждый элемент получает свой ID из разметки. - Обработчик кнопки:
- setOnClickListener отслеживает нажатия.
- Проверка введенной длины и вывод ошибок через Toast.
- Вызов функции генерации с параметрами. - Функция generatePassword:
- Собирает доступные символы на основе чекбоксов.
- List(length) создает список нужной длины.
- .random() выбирает случайный символ.
- joinToString("") объединяет символы в строку.
Советы для улучшения:
- Добавить кнопку копирования в буфер обмена.
- Валидация максимальной длины пароля.
- Добавить слайдер для выбора длины.
- Реализовать оценку сложности пароля.
- Добавить историю сгенерированных паролей.
Этот пример покрывает базовые концепции:
- Работа с разметкой.
- Обработка пользовательского ввода.
- Основы Kotlin (функции, обработка исключений).
- Взаимодействие элементов UI.