Inicio Bottom navigation menu

This commit is contained in:
AngelSuarez03 2024-05-08 07:29:21 -06:00
parent 6ee43fc790
commit 71a2c91ec9
25 changed files with 426 additions and 29 deletions

View File

@ -3,20 +3,7 @@
<component name="deploymentTargetDropDown"> <component name="deploymentTargetDropDown">
<value> <value>
<entry key="app"> <entry key="app">
<State> <State />
<runningDeviceTargetSelectedWithDropDown>
<Target>
<type value="RUNNING_DEVICE_TARGET" />
<deviceKey>
<Key>
<type value="VIRTUAL_DEVICE_PATH" />
<value value="C:\Users\USER\.android\avd\Pixel_3a_API_34_extension_level_7_x86_64.avd" />
</Key>
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2024-05-02T15:23:11.192908200Z" />
</State>
</entry> </entry>
</value> </value>
</component> </component>

View File

@ -36,6 +36,9 @@ android {
viewBinding { viewBinding {
enable = true enable = true
} }
buildFeatures {
viewBinding = true
}
} }
dependencies { dependencies {
@ -45,6 +48,10 @@ dependencies {
implementation("com.google.android.material:material:1.11.0") implementation("com.google.android.material:material:1.11.0")
implementation("androidx.constraintlayout:constraintlayout:2.1.4") implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("androidx.activity:activity:1.8.0") implementation("androidx.activity:activity:1.8.0")
implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.1")
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1")
implementation("androidx.navigation:navigation-fragment-ktx:2.6.0")
implementation("androidx.navigation:navigation-ui-ktx:2.6.0")
testImplementation("junit:junit:4.13.2") testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")

View File

@ -4,7 +4,7 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
¿
<application <application
android:allowBackup="true" android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules" android:dataExtractionRules="@xml/data_extraction_rules"
@ -15,6 +15,10 @@
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/Theme.MedicalHealth" android:theme="@style/Theme.MedicalHealth"
tools:targetApi="31"> tools:targetApi="31">
<activity
android:name=".PrincipalActivity"
android:exported="false"
android:label="@string/title_activity_principal" />
<activity <activity
android:name=".RecetaActivity" android:name=".RecetaActivity"
android:exported="false" /> android:exported="false" />

View File

@ -23,7 +23,7 @@ class MainActivity : AppCompatActivity() {
var res=db.validarDatos(binding.tvUsuario.text.toString(),binding.tvContrasena.text.toString()) var res=db.validarDatos(binding.tvUsuario.text.toString(),binding.tvContrasena.text.toString())
if(res==true){ if(res==true){
Toast.makeText(this@MainActivity,"VALIDADO",Toast.LENGTH_LONG).show() Toast.makeText(this@MainActivity,"VALIDADO",Toast.LENGTH_LONG).show()
val intent = Intent(this@MainActivity, AgregarActivity::class.java) val intent = Intent(this@MainActivity, PrincipalActivity::class.java)
startActivity(intent) startActivity(intent)
}else{ }else{
Toast.makeText(this@MainActivity," NO VALIDADO",Toast.LENGTH_LONG).show() Toast.makeText(this@MainActivity," NO VALIDADO",Toast.LENGTH_LONG).show()

View File

@ -0,0 +1,35 @@
package com.terratenientes.medicalhealth
import android.os.Bundle
import com.google.android.material.bottomnavigation.BottomNavigationView
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import com.terratenientes.medicalhealth.databinding.ActivityPrincipalBinding
class PrincipalActivity : AppCompatActivity() {
private lateinit var binding: ActivityPrincipalBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityPrincipalBinding.inflate(layoutInflater)
setContentView(binding.root)
val navView: BottomNavigationView = binding.navView
val navController = findNavController(R.id.nav_host_fragment_activity_principal)
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications
)
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
}
}

View File

@ -30,5 +30,6 @@ class RegistrarDActivity : AppCompatActivity() {
val usuario= Doctor(cedula,nombre,apellido,telefono,domicilio.toInt()) val usuario= Doctor(cedula,nombre,apellido,telefono,domicilio.toInt())
db.agregarDoctores(usuario,contrasena) db.agregarDoctores(usuario,contrasena)
Toast.makeText(this@RegistrarDActivity,"USUARIO AGREGADO",Toast.LENGTH_LONG).show() Toast.makeText(this@RegistrarDActivity,"USUARIO AGREGADO",Toast.LENGTH_LONG).show()
finish()
} }
} }

View File

@ -0,0 +1,42 @@
package com.terratenientes.medicalhealth.ui.dashboard
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.terratenientes.medicalhealth.databinding.FragmentDashboardBinding
class DashboardFragment : Fragment() {
private var _binding: FragmentDashboardBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val dashboardViewModel =
ViewModelProvider(this).get(DashboardViewModel::class.java)
_binding = FragmentDashboardBinding.inflate(inflater, container, false)
val root: View = binding.root
val textView: TextView = binding.textDashboard
dashboardViewModel.text.observe(viewLifecycleOwner) {
textView.text = it
}
return root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@ -0,0 +1,13 @@
package com.terratenientes.medicalhealth.ui.dashboard
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class DashboardViewModel : ViewModel() {
private val _text = MutableLiveData<String>().apply {
value = "This is dashboard Fragment"
}
val text: LiveData<String> = _text
}

View File

@ -0,0 +1,42 @@
package com.terratenientes.medicalhealth.ui.home
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.terratenientes.medicalhealth.databinding.FragmentHomeBinding
class HomeFragment : Fragment() {
private var _binding: FragmentHomeBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val homeViewModel =
ViewModelProvider(this).get(HomeViewModel::class.java)
_binding = FragmentHomeBinding.inflate(inflater, container, false)
val root: View = binding.root
val textView: TextView = binding.textHome
homeViewModel.text.observe(viewLifecycleOwner) {
textView.text = it
}
return root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@ -0,0 +1,13 @@
package com.terratenientes.medicalhealth.ui.home
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class HomeViewModel : ViewModel() {
private val _text = MutableLiveData<String>().apply {
value = "This is home Fragment"
}
val text: LiveData<String> = _text
}

View File

@ -0,0 +1,42 @@
package com.terratenientes.medicalhealth.ui.notifications
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.terratenientes.medicalhealth.databinding.FragmentNotificationsBinding
class NotificationsFragment : Fragment() {
private var _binding: FragmentNotificationsBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val notificationsViewModel =
ViewModelProvider(this).get(NotificationsViewModel::class.java)
_binding = FragmentNotificationsBinding.inflate(inflater, container, false)
val root: View = binding.root
val textView: TextView = binding.textNotifications
notificationsViewModel.text.observe(viewLifecycleOwner) {
textView.text = it
}
return root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}

View File

@ -0,0 +1,13 @@
package com.terratenientes.medicalhealth.ui.notifications
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
class NotificationsViewModel : ViewModel() {
private val _text = MutableLiveData<String>().apply {
value = "This is notifications Fragment"
}
val text: LiveData<String> = _text
}

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z" />
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z" />
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z" />
</vector>

View File

@ -51,13 +51,14 @@
android:id="@+id/et_nombre" android:id="@+id/et_nombre"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="50sp" android:layout_height="50sp"
android:layout_marginTop="40dp"
android:layout_marginStart="40dp" android:layout_marginStart="40dp"
android:layout_marginTop="40dp"
android:layout_marginEnd="40dp" android:layout_marginEnd="40dp"
android:paddingStart="10dp"
android:background="@drawable/radius_tv" android:background="@drawable/radius_tv"
android:textColor="#212121" android:hint="@string/ht_nombre"
android:hint="@string/ht_nombre"/> android:paddingStart="10dp"
android:textColor="#212121" />
<EditText <EditText
android:id="@+id/et_apellido_paterno" android:id="@+id/et_apellido_paterno"
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@ -0,0 +1,33 @@
<?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"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="?attr/actionBarSize">
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/nav_view"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:background="?android:attr/windowBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/bottom_nav_menu" />
<fragment
android:id="@+id/nav_host_fragment_activity_principal"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@id/nav_view"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/mobile_navigation" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -23,18 +23,24 @@
android:layout_marginTop="30dp" android:layout_marginTop="30dp"
android:layout_width="300dp" android:layout_width="300dp"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:layout_height="wrap_content" android:layout_height="50sp"
android:hint="@string/et_cedula_registrar" android:hint="@string/et_cedula_registrar"
android:id="@+id/et_cedela_registro" android:id="@+id/et_cedela_registro"
android:paddingStart="10dp"
android:layout_marginBottom="20dp"
android:background="@drawable/radius_tv"
android:textColorHint="@color/black" android:textColorHint="@color/black"
/> />
<EditText <EditText
android:layout_width="300dp" android:layout_width="300dp"
android:layout_height="wrap_content" android:layout_height="50sp"
android:hint="@string/et_nombre_registrar" android:hint="@string/et_nombre_registrar"
android:id="@+id/et_nombre_registro" android:id="@+id/et_nombre_registro"
android:textColorHint="@color/black" android:textColorHint="@color/black"
android:paddingStart="10dp"
android:layout_marginBottom="20dp"
android:background="@drawable/radius_tv"
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
/> />
@ -43,9 +49,12 @@
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:layout_width="300dp" android:layout_width="300dp"
android:layout_height="wrap_content" android:layout_height="50sp"
android:hint="@string/et_apellido_registrar" android:hint="@string/et_apellido_registrar"
android:id="@+id/et_apellido_registro" android:id="@+id/et_apellido_registro"
android:paddingStart="10dp"
android:layout_marginBottom="20dp"
android:background="@drawable/radius_tv"
android:textColorHint="@color/black" android:textColorHint="@color/black"
/> />
@ -53,18 +62,24 @@
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:layout_width="300dp" android:layout_width="300dp"
android:layout_height="wrap_content" android:layout_height="50sp"
android:hint="@string/et_telefono_registrar" android:hint="@string/et_telefono_registrar"
android:id="@+id/et_telefono_registo" android:id="@+id/et_telefono_registo"
android:paddingStart="10dp"
android:layout_marginBottom="20dp"
android:background="@drawable/radius_tv"
android:textColorHint="@color/black" android:textColorHint="@color/black"
/> />
<EditText <EditText
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:layout_width="300dp" android:layout_width="300dp"
android:layout_height="wrap_content" android:layout_height="50sp"
android:hint="@string/et_domicilio_registrar" android:hint="@string/et_domicilio_registrar"
android:id="@+id/et_domicilio" android:id="@+id/et_domicilio"
android:textColorHint="@color/black" android:textColorHint="@color/black"
android:paddingStart="10dp"
android:layout_marginBottom="20dp"
android:background="@drawable/radius_tv"
android:inputType="number" android:inputType="number"
android:maxLength="2" android:maxLength="2"
/> />
@ -73,9 +88,12 @@
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:id="@+id/et_contrasena_registro" android:id="@+id/et_contrasena_registro"
android:layout_width="300dp" android:layout_width="300dp"
android:layout_height="wrap_content" android:layout_height="50sp"
android:ems="10" android:ems="10"
android:inputType="textPassword" android:inputType="textPassword"
android:paddingStart="10dp"
android:layout_marginBottom="20dp"
android:background="@drawable/radius_tv"
android:hint="@string/et_contrasena_registrar" android:hint="@string/et_contrasena_registrar"
android:textColorHint="@color/black" android:textColorHint="@color/black"
/> />
@ -84,7 +102,7 @@
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:layout_width="300dp" android:layout_width="300dp"
android:id="@+id/btn_registrar_" android:id="@+id/btn_registrar_"
android:layout_height="wrap_content" android:layout_height="50sp"
android:text="@string/btn_registrar_activity" android:text="@string/btn_registrar_activity"
android:backgroundTint="@color/primaryColor" android:backgroundTint="@color/primaryColor"

View File

@ -0,0 +1,22 @@
<?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="match_parent"
tools:context=".ui.dashboard.DashboardFragment">
<TextView
android:id="@+id/text_dashboard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:textAlignment="center"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,22 @@
<?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="match_parent"
tools:context=".ui.home.HomeFragment">
<TextView
android:id="@+id/text_home"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:textAlignment="center"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,22 @@
<?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="match_parent"
tools:context=".ui.notifications.NotificationsFragment">
<TextView
android:id="@+id/text_notifications"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:textAlignment="center"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/navigation_home"
android:icon="@drawable/ic_home_black_24dp"
android:title="@string/title_home" />
<item
android:id="@+id/navigation_dashboard"
android:icon="@drawable/ic_dashboard_black_24dp"
android:title="@string/title_dashboard" />
<item
android:id="@+id/navigation_notifications"
android:icon="@drawable/ic_notifications_black_24dp"
android:title="@string/title_notifications" />
</menu>

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<navigation 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:id="@+id/mobile_navigation"
app:startDestination="@+id/navigation_home">
<fragment
android:id="@+id/navigation_home"
android:name="com.terratenientes.medicalhealth.ui.home.HomeFragment"
android:label="@string/title_home"
tools:layout="@layout/fragment_home" />
<fragment
android:id="@+id/navigation_dashboard"
android:name="com.terratenientes.medicalhealth.ui.dashboard.DashboardFragment"
android:label="@string/title_dashboard"
tools:layout="@layout/fragment_dashboard" />
<fragment
android:id="@+id/navigation_notifications"
android:name="com.terratenientes.medicalhealth.ui.notifications.NotificationsFragment"
android:label="@string/title_notifications"
tools:layout="@layout/fragment_notifications" />
</navigation>

View File

@ -0,0 +1,5 @@
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
</resources>

View File

@ -47,5 +47,9 @@
<string name="receta_peso">Peso del paciente KG</string> <string name="receta_peso">Peso del paciente KG</string>
<string name="btn_agregar_receta">Agregar Receta</string> <string name="btn_agregar_receta">Agregar Receta</string>
<string name="btn_ayuda_receta">Ayuda</string> <string name="btn_ayuda_receta">Ayuda</string>
<string name="title_activity_principal">PrincipalActivity</string>
<string name="title_home">Home</string>
<string name="title_dashboard">Dashboard</string>
<string name="title_notifications">Notifications</string>
</resources> </resources>