добавление упражнений для тренировки, отображение на форме
This commit is contained in:
parent
0745430fad
commit
a00d3b34b0
@ -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")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -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,
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
26
app/src/main/java/com/example/timert/data/dao/ExerciseDao.kt
Normal file
26
app/src/main/java/com/example/timert/data/dao/ExerciseDao.kt
Normal 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)
|
||||||
|
}
|
@ -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
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
app/src/main/java/com/example/timert/data/entity/Exercise.kt
Normal file
11
app/src/main/java/com/example/timert/data/entity/Exercise.kt
Normal 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)
|
@ -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)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
@ -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
|
||||||
|
@ -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="Сохранить"
|
||||||
|
@ -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>
|
||||||
|
|
||||||
|
39
app/src/main/res/layout/resyclerview_item.xml
Normal file
39
app/src/main/res/layout/resyclerview_item.xml
Normal 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>
|
@ -20,4 +20,5 @@ kotlin.code.style=official
|
|||||||
# Enables namespacing of each library's R class so that its R class includes only the
|
# Enables namespacing of each library's R class so that its R class includes only the
|
||||||
# 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
|
Loading…
Reference in New Issue
Block a user