добавление упражнений для тренировки, отображение на форме

This commit is contained in:
Надежда Емцова 2025-05-12 17:25:07 +03:00
parent 0745430fad
commit a00d3b34b0
15 changed files with 392 additions and 33 deletions

View File

@ -1,6 +1,7 @@
plugins { plugins {
alias(libs.plugins.android.application) alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.android)
id("kotlin-kapt")
} }
android { android {
@ -45,4 +46,13 @@ dependencies {
testImplementation(libs.junit) testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(libs.androidx.espresso.core)
implementation("androidx.room:room-runtime:2.7.1")
implementation("androidx.room:room-ktx:2.7.1")
kapt ("androidx.room:room-compiler:2.7.1")
implementation ("androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0")
implementation ("androidx.lifecycle:lifecycle-livedata-ktx:2.7.0")
} }

View File

@ -1,36 +1,78 @@
package com.example.timert package com.example.timert
import android.app.Activity
import android.app.AlertDialog import android.app.AlertDialog
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.text.TextUtils
import android.widget.Button import android.widget.Button
import android.widget.EditText import android.widget.EditText
import android.widget.ImageView import android.widget.ImageView
import android.widget.Toast
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.ViewModelProvider
import com.example.timert.data.entity.Exercise
import com.example.timert.data.viewModel.ExerciseViewModel
class AllTraining : AppCompatActivity() { class AllTraining : AppCompatActivity() {
private var isSave = false private var isSave = false
private lateinit var editExerciseView: EditText
private lateinit var numExerciseView: EditText
private lateinit var numRestExerciseView: EditText
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
val exerciseViewModel = ViewModelProvider(
this,
ViewModelProvider.AndroidViewModelFactory.getInstance(application)
)[ExerciseViewModel::class.java]
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
enableEdgeToEdge() enableEdgeToEdge()
setContentView(R.layout.activity_all_training) setContentView(R.layout.activity_all_training)
editExerciseView = findViewById(R.id.name_training)
numExerciseView = findViewById(R.id.time_work)
numRestExerciseView = findViewById(R.id.rest_workout)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets insets
} }
val buttonSaveAll: Button = findViewById(R.id.btn_save_all_vse) val buttonSaveAll: Button = findViewById(R.id.btn_save_all_vse)
buttonSaveAll.setOnClickListener { buttonSaveAll.setOnClickListener {
val intent = Intent(this, CreatingTraining::class.java) val exerciseName = editExerciseView.text.toString()
startActivity(intent) val numSetsText = numExerciseView.text.toString()
isSave = true val restSetsText = numRestExerciseView.text.toString()
if (exerciseName.isBlank() || numSetsText.isBlank() || restSetsText.isBlank()) {
Toast.makeText(this, "Заполните все поля", Toast.LENGTH_SHORT).show()
} else {
val numSets = numSetsText.toIntOrNull()
val restSets = restSetsText.toIntOrNull()
if (numSets == null || restSets == null) {
Toast.makeText(this, "Неверный формат чисел", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
val newExercise = Exercise(
name_exercise = exerciseName,
num_sets = numSets,
rest_of_sets = restSets
)
exerciseViewModel.insert(newExercise)
Toast.makeText(this, "Упражнение сохранено", Toast.LENGTH_SHORT).show()
isSave = true
finish()
}
} }
val button_on_main_all: Button = findViewById(R.id.btn_on_main_all_vse) val button_on_main_all: Button = findViewById(R.id.btn_on_main_all_vse)
button_on_main_all.setOnClickListener { button_on_main_all.setOnClickListener {
if (isSave == false) { if (isSave == false) {
@ -41,6 +83,7 @@ class AllTraining : AppCompatActivity() {
val intent = Intent(this, MainActivity::class.java) val intent = Intent(this, MainActivity::class.java)
startActivity(intent) startActivity(intent)
finish()
} }
.setNegativeButton("Нет") { dialog, _ -> .setNegativeButton("Нет") { dialog, _ ->
dialog.dismiss() dialog.dismiss()
@ -63,6 +106,12 @@ class AllTraining : AppCompatActivity() {
setupPlusMinus(timeInputRest, btnPlusTime, btnMinusTime, minValue = 5, maxValue = 600) setupPlusMinus(timeInputRest, btnPlusTime, btnMinusTime, minValue = 5, maxValue = 600)
setupPlusMinus(setsInput, btnPlusSets, btnMinusSets, minValue = 5, maxValue = 600) setupPlusMinus(setsInput, btnPlusSets, btnMinusSets, minValue = 5, maxValue = 600)
} }
companion object {
const val EXTRA_REPLY = "com.example.android.wordlistsql.REPLY"
}
fun setupPlusMinus( fun setupPlusMinus(
editText: EditText, editText: EditText,
plus: ImageView, plus: ImageView,

View File

@ -11,13 +11,45 @@ import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.timert.data.adapter.ExerciseAdapter
import com.example.timert.data.viewModel.ExerciseViewModel
class CreatingTraining : AppCompatActivity() { class CreatingTraining : AppCompatActivity() {
private lateinit var viewModel: ExerciseViewModel
private var isSave = false private var isSave = false
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
enableEdgeToEdge() enableEdgeToEdge()
setContentView(R.layout.activity_creating_training) setContentView(R.layout.activity_creating_training)
viewModel = ViewModelProvider(
this,
ViewModelProvider.AndroidViewModelFactory.getInstance(application)
)[ExerciseViewModel::class.java]
val adapter = ExerciseAdapter { id ->
viewModel.deleteExerciseById(id)
}
// adapter = ExerciseAdapter(this)
val recyclerView = findViewById<RecyclerView>(R.id.exercise)
recyclerView.adapter = adapter
recyclerView.layoutManager = LinearLayoutManager(this)
viewModel.allExercise.observe(this) { exercises ->
exercises?.let {
adapter.setExercises(it)
}
}
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)

View File

@ -7,12 +7,18 @@ import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.timert.data.adapter.ExerciseAdapter
import com.example.timert.data.viewModel.ExerciseViewModel
class History : AppCompatActivity() { class History : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
enableEdgeToEdge() enableEdgeToEdge()
setContentView(R.layout.activity_history)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)

View File

@ -0,0 +1,55 @@
package com.example.timert.data.adapter
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.ImageButton
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.example.timert.R
import com.example.timert.data.entity.Exercise
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
//class ExerciseAdapter internal constructor(context: Context):RecyclerView.Adapter<ExerciseAdapter.ExerciseViewHolder>(){
class ExerciseAdapter(
private val onDeleteClick: (Int) -> Unit
) : RecyclerView.Adapter<ExerciseAdapter.ExerciseViewHolder>() {
private var exerciseList: List<Exercise> = emptyList()
inner class ExerciseViewHolder(itemView: View):RecyclerView.ViewHolder(itemView){
val textViewExercise: TextView = itemView.findViewById(R.id.textView13)
val deleteButton: ImageButton = itemView.findViewById(R.id.deleteButton)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ExerciseViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.resyclerview_item, parent, false)
return ExerciseViewHolder(view)
}
override fun onBindViewHolder(holder: ExerciseViewHolder, position: Int) {
val exercise = exerciseList[position]
holder.textViewExercise.text =
"${exercise.name_exercise} — работа: ${exercise.num_sets} сек, отдых: ${exercise.rest_of_sets} сек"
holder.deleteButton.setOnClickListener {
onDeleteClick(exercise.id)
}
}
override fun getItemCount() = exerciseList.size
fun setExercises(exercises: List<Exercise>) {
this.exerciseList = exercises
notifyDataSetChanged()
}
}

View File

@ -0,0 +1,26 @@
package com.example.timert.data.dao
import androidx.lifecycle.LiveData
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import com.example.timert.data.entity.Exercise
@Dao
interface ExerciseDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(exercise: Exercise)
@Query("SELECT * FROM exercise_table")
fun getExercise(): LiveData<List<Exercise>>
//@Delete
// suspend fun delete(exercise: Exercise)
@Query("DELETE FROM exercise_table WHERE id = :id")
suspend fun deleteById(id: Int)
}

View File

@ -0,0 +1,61 @@
package com.example.timert.data.database
import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import androidx.sqlite.db.SupportSQLiteDatabase
import com.example.timert.data.dao.ExerciseDao
import com.example.timert.data.entity.Exercise
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
@Database(entities = [Exercise::class], version = 1, exportSchema = false)
abstract class ExerciseDatabase:RoomDatabase(){
abstract fun exerciseDao():ExerciseDao
// private class ExerciseDatabaseCallback (private val scope: CoroutineScope) : RoomDatabase.Callback(){
//override fun onOpen(db: SupportSQLiteDatabase) {
// super.onOpen(db)
// INSTANCE?.let { database ->
// scope.launch {
// populateDatabase(database.exerciseDao())
// }
// }
// }
//suspend fun populateDatabase(exerciseDao: ExerciseDao) {
// Delete all content here.
//exerciseDao.deleteAll()
// Add sample words.
//var exercise = Exercise(0, "training", 10, 45 )
// exerciseDao.insert(exercise)
// TODO: Add your own words!
// }
//}
companion object {
@Volatile
private var INSTANCE: ExerciseDatabase? = null
fun getDatabase(context: Context,
scope: CoroutineScope
): ExerciseDatabase {
val tempInstance = INSTANCE
if (tempInstance != null) {
return tempInstance
}
synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
ExerciseDatabase::class.java,
"exercise_database"
)
//.addCallback(ExerciseDatabaseCallback(scope))
.build()
INSTANCE = instance
return instance
}
}
}
}

View File

@ -0,0 +1,11 @@
package com.example.timert.data.entity
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "exercise_table")
data class Exercise(@PrimaryKey(autoGenerate = true) val id: Int = 0,
val name_exercise: String,
val num_sets: Int,
val rest_of_sets: Int)

View File

@ -0,0 +1,17 @@
package com.example.timert.data.repository
import androidx.lifecycle.LiveData
import com.example.timert.data.dao.ExerciseDao
import com.example.timert.data.entity.Exercise
class ExerciseRepository(private val exerciseDao:ExerciseDao){
val allExercise: LiveData<List<Exercise>> = exerciseDao.getExercise()
suspend fun insert(training: Exercise) {
exerciseDao.insert(training)
}
suspend fun deleteExerciseById(id: Int) {
exerciseDao.deleteById(id)
}
}

View File

@ -0,0 +1,28 @@
package com.example.timert.data.viewModel
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.viewModelScope
import com.example.timert.data.database.ExerciseDatabase
import com.example.timert.data.entity.Exercise
import com.example.timert.data.repository.ExerciseRepository
import kotlinx.coroutines.launch
class ExerciseViewModel(application: Application):AndroidViewModel(application){
private val repository: ExerciseRepository
val allExercise: LiveData<List<Exercise>>
init{
val exercisesDao = ExerciseDatabase.getDatabase(application, viewModelScope).exerciseDao()
repository = ExerciseRepository(exercisesDao)
allExercise = repository.allExercise
}
fun insert(exercise: Exercise) = viewModelScope.launch {
repository.insert(exercise)
}
fun deleteExerciseById(id: Int) = viewModelScope.launch {
repository.deleteExerciseById(id)
}
}

View File

@ -11,7 +11,7 @@
<LinearLayout <LinearLayout
android:id="@+id/linearLayout" android:id="@+id/linearLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="130dp" android:layout_height="wrap_content"
android:layout_marginTop="25dp" android:layout_marginTop="25dp"
android:orientation="vertical" android:orientation="vertical"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent">
@ -31,7 +31,7 @@
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
android:ems="10" android:ems="10"
android:inputType="text" android:inputType="text"
android:text="Упражнение 1" android:text="Упражнение"
android:textAlignment="center" android:textAlignment="center"
android:textSize="20sp" /> android:textSize="20sp" />
@ -40,8 +40,8 @@
<LinearLayout <LinearLayout
android:id="@+id/setting_training" android:id="@+id/setting_training"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="250dp" android:layout_height="wrap_content"
android:layout_marginTop="37dp" android:layout_marginTop="5dp"
android:orientation="vertical" android:orientation="vertical"
app:layout_constraintTop_toBottomOf="@+id/linearLayout" app:layout_constraintTop_toBottomOf="@+id/linearLayout"
tools:layout_editor_absoluteX="16dp"> tools:layout_editor_absoluteX="16dp">
@ -50,7 +50,7 @@
android:id="@+id/textView3" android:id="@+id/textView3"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Время работы" android:text="Время работы, сек"
android:textAlignment="center" android:textAlignment="center"
android:textSize="24sp" /> android:textSize="24sp" />
@ -93,13 +93,13 @@
android:id="@+id/textView8_all" android:id="@+id/textView8_all"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="Отдых между упражнениями" android:text="Отдых между упражнениями, сек"
android:textAlignment="center" android:textAlignment="center"
android:textSize="24sp" /> android:textSize="24sp" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="95dp" android:layout_height="wrap_content"
android:orientation="horizontal"> android:orientation="horizontal">
<ImageView <ImageView

View File

@ -11,7 +11,7 @@
<LinearLayout <LinearLayout
android:id="@+id/linearLayout" android:id="@+id/linearLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="130dp" android:layout_height="wrap_content"
android:layout_marginTop="25dp" android:layout_marginTop="25dp"
android:orientation="vertical" android:orientation="vertical"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent">
@ -28,10 +28,9 @@
android:id="@+id/name_training" android:id="@+id/name_training"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:ems="10" android:ems="10"
android:inputType="text" android:inputType="text"
android:text="Тренировка 1" android:text="Моя тренировка"
android:textAlignment="center" android:textAlignment="center"
android:textSize="20sp" /> android:textSize="20sp" />
@ -40,11 +39,12 @@
<LinearLayout <LinearLayout
android:id="@+id/setting_training" android:id="@+id/setting_training"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="220dp" android:layout_height="wrap_content"
android:layout_marginTop="37dp"
android:orientation="vertical" android:orientation="vertical"
app:layout_constraintTop_toBottomOf="@+id/linearLayout" app:layout_constraintBottom_toTopOf="@+id/exercise"
tools:layout_editor_absoluteX="16dp"> app:layout_constraintTop_toBottomOf="@+id/linearLayout">
<TextView <TextView
android:id="@+id/textView5" android:id="@+id/textView5"
@ -57,7 +57,7 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="20dp" android:layout_marginBottom="8dp"
android:orientation="horizontal"> android:orientation="horizontal">
<ImageView <ImageView
@ -89,6 +89,7 @@
app:srcCompat="@drawable/ic_add_24px" /> app:srcCompat="@drawable/ic_add_24px" />
</LinearLayout> </LinearLayout>
<TextView <TextView
android:id="@+id/textView8" android:id="@+id/textView8"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -100,6 +101,7 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:orientation="horizontal"> android:orientation="horizontal">
<ImageView <ImageView
@ -131,20 +133,41 @@
app:srcCompat="@drawable/ic_add_24px" /> app:srcCompat="@drawable/ic_add_24px" />
</LinearLayout> </LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" />
</LinearLayout> </LinearLayout>
<FrameLayout
android:layout_width="match_parent" <androidx.recyclerview.widget.RecyclerView
android:layout_height="60dp" android:id="@+id/exercise"
android:layout_marginTop="19dp" android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/frameLayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.373"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/setting_training" app:layout_constraintTop_toBottomOf="@+id/setting_training"
tools:layout_editor_absoluteX="0dp"> app:layout_constraintVertical_bias="0.178" />
<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@+id/linearLayout2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent">
<Button <Button
android:id="@+id/add_workout" android:id="@+id/add_workout"
android:layout_width="176dp" android:layout_width="176dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:background="@drawable/green_rectangle" android:background="@drawable/green_rectangle"
android:gravity="center" android:gravity="center"
android:text="+ упражнение" android:text="+ упражнение"
@ -154,12 +177,13 @@
</FrameLayout> </FrameLayout>
<LinearLayout <LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="60dp" android:layout_height="wrap_content"
android:layout_marginBottom="35dp"
android:orientation="horizontal" android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"> app:layout_constraintStart_toStartOf="parent">
<Button <Button
@ -167,8 +191,8 @@
android:layout_width="150dp" android:layout_width="150dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginLeft="20dp" android:layout_marginLeft="8dp"
android:layout_marginRight="20dp" android:layout_marginRight="8dp"
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/gradient_purpure" android:background="@drawable/gradient_purpure"
android:text="на главную" android:text="на главную"
@ -180,8 +204,8 @@
android:layout_width="150dp" android:layout_width="150dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_marginLeft="20dp" android:layout_marginLeft="8dp"
android:layout_marginRight="20dp" android:layout_marginRight="8dp"
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/gradient_purpure" android:background="@drawable/gradient_purpure"
android:text="Сохранить" android:text="Сохранить"

View File

@ -72,7 +72,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@android:color/transparent" android:background="@android:color/transparent"
android:text="Редактировать тренировку" android:text="Создать новую тренировку"
android:textColor="@android:color/white" /> android:textColor="@android:color/white" />
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>

View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp">
<LinearLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#410F3FED"
android:orientation="horizontal"
android:paddingTop="8dp"
android:paddingBottom="8dp">
<TextView
android:id="@+id/textView13"
android:layout_width="353dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:text="Название упражнения"
android:textColor="#000000"
android:textSize="18sp" />
<ImageButton
android:id="@+id/deleteButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="#00FFFFFF"
app:srcCompat="@android:drawable/ic_menu_delete" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -21,3 +21,4 @@ kotlin.code.style=official
# resources declared in the library itself and none from the library's dependencies, # resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library # thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true android.nonTransitiveRClass=true
kapt.compiler.jvmtarget=11