From 2b45cd3d6931f48ad7bfbfbba82bb03db199059b Mon Sep 17 00:00:00 2001 From: hall9zeha Date: Thu, 27 Jan 2022 14:13:52 -0500 Subject: [PATCH] =?UTF-8?q?Terminada=20la=20construcci=C3=B3n=20de=20la=20?= =?UTF-8?q?app=20de=20postres,=20necesaria=20para=20comprender=20mejor=20l?= =?UTF-8?q?a=20nueva=20implementaci=C3=B3n=20de=20navigation=20en=20androi?= =?UTF-8?q?d,=20las=20transiciones,=20y=20animaciones=20aplicadas=20con=20?= =?UTF-8?q?navcontroler=20y=20el=20paso=20de=20argumentos=20a=20trav=C3=A9?= =?UTF-8?q?s=20del=20mismo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.idea/gradle.xml | 1 + .../.idea/misc.xml | 6 +- .../app/build.gradle | 2 + .../com/barryzeha/mdpostres/CarAdapter.java | 47 +++++++++++ .../com/barryzeha/mdpostres/CarFragment.java | 84 ++++++++++--------- .../mdpostres/ConfirmationFragment.java | 54 ++++++++++++ .../com/barryzeha/mdpostres/MainActivity.java | 58 ++++++++++++- .../barryzeha/mdpostres/ProductFragment.java | 40 ++++++++- .../app/src/main/res/anim/slide_in.xml | 11 +++ .../app/src/main/res/anim/slide_out.xml | 11 +++ .../app/src/main/res/drawable/ic_back.xml | 11 +++ .../app/src/main/res/drawable/ic_check.xml | 5 ++ .../src/main/res/drawable/ic_check_normal.xml | 10 +++ .../app/src/main/res/drawable/ic_close.xml | 10 +++ .../app/src/main/res/drawable/ic_payment.xml | 10 +++ .../app/src/main/res/layout/activity_main.xml | 4 +- .../src/main/res/layout/bottom_sheet_exit.xml | 56 +++++++++++++ .../app/src/main/res/layout/fragment_car.xml | 69 +++++++++++++-- .../main/res/layout/fragment_confirmation.xml | 59 +++++++++++++ .../app/src/main/res/layout/item_car.xml | 3 +- .../app/src/main/res/menu/main_menu.xml | 12 +++ .../app/src/main/res/navigation/nav_graph.xml | 45 +++++++++- .../app/src/main/res/values/dimens.xml | 4 + .../app/src/main/res/values/strings.xml | 15 +++- .../build.gradle | 3 +- 25 files changed, 572 insertions(+), 58 deletions(-) create mode 100644 Material_Components_App_Navigation/app/src/main/java/com/barryzeha/mdpostres/CarAdapter.java create mode 100644 Material_Components_App_Navigation/app/src/main/java/com/barryzeha/mdpostres/ConfirmationFragment.java create mode 100644 Material_Components_App_Navigation/app/src/main/res/anim/slide_in.xml create mode 100644 Material_Components_App_Navigation/app/src/main/res/anim/slide_out.xml create mode 100644 Material_Components_App_Navigation/app/src/main/res/drawable/ic_back.xml create mode 100644 Material_Components_App_Navigation/app/src/main/res/drawable/ic_check.xml create mode 100644 Material_Components_App_Navigation/app/src/main/res/drawable/ic_check_normal.xml create mode 100644 Material_Components_App_Navigation/app/src/main/res/drawable/ic_close.xml create mode 100644 Material_Components_App_Navigation/app/src/main/res/drawable/ic_payment.xml create mode 100644 Material_Components_App_Navigation/app/src/main/res/layout/bottom_sheet_exit.xml create mode 100644 Material_Components_App_Navigation/app/src/main/res/layout/fragment_confirmation.xml create mode 100644 Material_Components_App_Navigation/app/src/main/res/menu/main_menu.xml diff --git a/Material_Components_App_Navigation/.idea/gradle.xml b/Material_Components_App_Navigation/.idea/gradle.xml index 4e3844e..526b4c2 100644 --- a/Material_Components_App_Navigation/.idea/gradle.xml +++ b/Material_Components_App_Navigation/.idea/gradle.xml @@ -1,5 +1,6 @@ + diff --git a/Material_Components_App_Navigation/app/build.gradle b/Material_Components_App_Navigation/app/build.gradle index 976bcfe..d435fb9 100644 --- a/Material_Components_App_Navigation/app/build.gradle +++ b/Material_Components_App_Navigation/app/build.gradle @@ -1,5 +1,6 @@ plugins { id 'com.android.application' + id 'androidx.navigation.safeargs' } android { @@ -37,6 +38,7 @@ dependencies { implementation 'androidx.constraintlayout:constraintlayout:2.1.3' implementation 'androidx.navigation:navigation-fragment:2.3.5' implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'androidx.navigation:navigation-ui:2.3.5' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' diff --git a/Material_Components_App_Navigation/app/src/main/java/com/barryzeha/mdpostres/CarAdapter.java b/Material_Components_App_Navigation/app/src/main/java/com/barryzeha/mdpostres/CarAdapter.java new file mode 100644 index 0000000..bbeb48c --- /dev/null +++ b/Material_Components_App_Navigation/app/src/main/java/com/barryzeha/mdpostres/CarAdapter.java @@ -0,0 +1,47 @@ +package com.barryzeha.mdpostres; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.barryzeha.mdpostres.databinding.ItemCarBinding; + +public class CarAdapter extends RecyclerView.Adapter { + private String[] products; + + public CarAdapter(String[] products) { + this.products = products; + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + ItemCarBinding bind=ItemCarBinding.inflate(LayoutInflater.from(parent.getContext()),parent,false); + + return new ViewHolder(bind); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + holder.bind(products[position]); + } + + @Override + public int getItemCount() { + return products.length; + } + + public class ViewHolder extends RecyclerView.ViewHolder { + private ItemCarBinding bind; + public ViewHolder(@NonNull ItemCarBinding itemView) { + super(itemView.getRoot()); + bind=itemView; + } + protected void bind(String product){ + bind.tvName.setText(product); + } + } +} diff --git a/Material_Components_App_Navigation/app/src/main/java/com/barryzeha/mdpostres/CarFragment.java b/Material_Components_App_Navigation/app/src/main/java/com/barryzeha/mdpostres/CarFragment.java index c2a0a6f..14f357c 100644 --- a/Material_Components_App_Navigation/app/src/main/java/com/barryzeha/mdpostres/CarFragment.java +++ b/Material_Components_App_Navigation/app/src/main/java/com/barryzeha/mdpostres/CarFragment.java @@ -2,63 +2,69 @@ import android.os.Bundle; +import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; +import androidx.navigation.fragment.NavHostFragment; +import androidx.recyclerview.widget.LinearLayoutManager; import android.view.LayoutInflater; +import android.view.Menu; import android.view.View; import android.view.ViewGroup; -/** - * A simple {@link Fragment} subclass. - * Use the {@link CarFragment#newInstance} factory method to - * create an instance of this fragment. - */ -public class CarFragment extends Fragment { - - // TODO: Rename parameter arguments, choose names that match - // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER - private static final String ARG_PARAM1 = "param1"; - private static final String ARG_PARAM2 = "param2"; +import com.barryzeha.mdpostres.databinding.FragmentCarBinding; +import com.google.android.material.transition.MaterialSharedAxis; - // TODO: Rename and change types of parameters - private String mParam1; - private String mParam2; - public CarFragment() { - // Required empty public constructor - } +public class CarFragment extends Fragment { - /** - * Use this factory method to create a new instance of - * this fragment using the provided parameters. - * - * @param param1 Parameter 1. - * @param param2 Parameter 2. - * @return A new instance of fragment CarFragment. - */ - // TODO: Rename and change types and number of parameters - public static CarFragment newInstance(String param1, String param2) { - CarFragment fragment = new CarFragment(); - Bundle args = new Bundle(); - args.putString(ARG_PARAM1, param1); - args.putString(ARG_PARAM2, param2); - fragment.setArguments(args); - return fragment; - } + private FragmentCarBinding bind; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (getArguments() != null) { - mParam1 = getArguments().getString(ARG_PARAM1); - mParam2 = getArguments().getString(ARG_PARAM2); - } + + setHasOptionsMenu(true); + setEnterTransition(new MaterialSharedAxis(MaterialSharedAxis.X, true)); + setReturnTransition(new MaterialSharedAxis(MaterialSharedAxis.X, false)); + } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_car, container, false); + bind=FragmentCarBinding.inflate(inflater, container, false); + + //Cargamos el adapter car con los argumentos enviados a través del navigation + CarAdapter adapter=new CarAdapter(CarFragmentArgs.fromBundle(getArguments()).getProductsArgs()); + bind.recyclerViewCar.setLayoutManager(new LinearLayoutManager(getContext())); + bind.recyclerViewCar.setAdapter(adapter); + bind.tvSum.setText(getString(R.string.car_sum, (float)adapter.getItemCount())); + + /* + * Para navegar con el navHostNavigation controler puede usarse como id de navigate el id del fragmento de destino asi como + * el id de la acción creada + * */ + bind.btnBack.setOnClickListener(v->{ + NavHostFragment.findNavController(this) + //.navigate(R.id.productFragment); 1ra opción solo el fragmento de destino + .navigate(R.id.action_car_to_product); // segunda opción id de acción + }); + + bind.btnPay.setOnClickListener(v->{ + NavHostFragment.findNavController(this) + //.navigate(R.id.productFragment); 1ra opción solo el fragmento de destino + .navigate(R.id.action_car_to_confirmation); // segunda opción id de acción + }); + + + return bind.getRoot(); + } + + @Override + public void onPrepareOptionsMenu(@NonNull Menu menu) { + menu.clear(); + super.onPrepareOptionsMenu(menu); } } \ No newline at end of file diff --git a/Material_Components_App_Navigation/app/src/main/java/com/barryzeha/mdpostres/ConfirmationFragment.java b/Material_Components_App_Navigation/app/src/main/java/com/barryzeha/mdpostres/ConfirmationFragment.java new file mode 100644 index 0000000..57f6cdf --- /dev/null +++ b/Material_Components_App_Navigation/app/src/main/java/com/barryzeha/mdpostres/ConfirmationFragment.java @@ -0,0 +1,54 @@ +package com.barryzeha.mdpostres; + +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.navigation.fragment.NavHostFragment; + +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.View; +import android.view.ViewGroup; + +import com.barryzeha.mdpostres.databinding.FragmentConfirmationBinding; +import com.google.android.material.transition.MaterialFadeThrough; +import com.google.android.material.transition.MaterialSharedAxis; + +public class ConfirmationFragment extends Fragment { + + + private FragmentConfirmationBinding bind; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setHasOptionsMenu(true); + setEnterTransition(new MaterialSharedAxis(MaterialSharedAxis.X, true)); + setReturnTransition(new MaterialSharedAxis(MaterialSharedAxis.X, false)); + setExitTransition(new MaterialFadeThrough()); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + bind=FragmentConfirmationBinding.inflate(inflater, container, false); + return bind.getRoot(); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + bind.btnDone.setOnClickListener(v->{ + NavHostFragment.findNavController(this).navigate(R.id.action_confirmation_to_product); + }); + } + + @Override + public void onPrepareOptionsMenu(@NonNull Menu menu) { + menu.clear(); + super.onPrepareOptionsMenu(menu); + } +} \ No newline at end of file diff --git a/Material_Components_App_Navigation/app/src/main/java/com/barryzeha/mdpostres/MainActivity.java b/Material_Components_App_Navigation/app/src/main/java/com/barryzeha/mdpostres/MainActivity.java index 88cc4c9..cf99317 100644 --- a/Material_Components_App_Navigation/app/src/main/java/com/barryzeha/mdpostres/MainActivity.java +++ b/Material_Components_App_Navigation/app/src/main/java/com/barryzeha/mdpostres/MainActivity.java @@ -1,14 +1,68 @@ package com.barryzeha.mdpostres; +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.navigation.NavController; +import androidx.navigation.Navigation; +import androidx.navigation.ui.AppBarConfiguration; +import androidx.navigation.ui.NavigationUI; import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; -public class MainActivity extends AppCompatActivity { +import com.barryzeha.mdpostres.databinding.ActivityMainBinding; +import com.google.android.material.bottomsheet.BottomSheetBehavior; +public class MainActivity extends AppCompatActivity { + private ActivityMainBinding bind; + private NavController navController; + private BottomSheetBehavior bottomSheetBehavior; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); + bind = ActivityMainBinding.inflate(getLayoutInflater()); + setContentView(bind.getRoot()); + + setSupportActionBar(bind.toolbar); + navController= Navigation.findNavController(this, R.id.nav_host_fragment); + + AppBarConfiguration appBarConfiguration= new AppBarConfiguration.Builder(navController.getGraph()).build(); + NavigationUI.setupWithNavController(bind.toolbar, navController, appBarConfiguration); + //para quitar el ícono de back del toolbar por medio de navigation hacemos lo siguiente + + navController.addOnDestinationChangedListener((controller, destination, arguments) -> { + //mantenemos el título del toolbar + bind.toolbar.setTitle(destination.getLabel()); + //quitamos el bobon de regresar + bind.toolbar.setNavigationIcon(null); + }); + bottomSheetBehavior=BottomSheetBehavior.from(bind.bottomSheet.bottomSheet); + bottomSheetBehavior.setState(bottomSheetBehavior.STATE_HIDDEN); + bind.bottomSheet.ivClose.setOnClickListener(v-> bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN)); + bind.bottomSheet.btnExit.setOnClickListener(v-> finish()); + + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.main_menu, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + /* if(item.getItemId()==R.id.itemConfirmation){ + navController.navigate(R.id.action_global_confirmation); + } + return super.onOptionsItemSelected(item);*/ + //Ahora haremos navegación por id + return NavigationUI.onNavDestinationSelected(item, navController)|| + super.onOptionsItemSelected(item); + } + + @Override + public void onBackPressed() { + bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); } } \ No newline at end of file diff --git a/Material_Components_App_Navigation/app/src/main/java/com/barryzeha/mdpostres/ProductFragment.java b/Material_Components_App_Navigation/app/src/main/java/com/barryzeha/mdpostres/ProductFragment.java index e2feebe..3e11599 100644 --- a/Material_Components_App_Navigation/app/src/main/java/com/barryzeha/mdpostres/ProductFragment.java +++ b/Material_Components_App_Navigation/app/src/main/java/com/barryzeha/mdpostres/ProductFragment.java @@ -5,6 +5,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; +import androidx.navigation.fragment.NavHostFragment; import androidx.recyclerview.widget.GridLayoutManager; import android.view.LayoutInflater; @@ -13,6 +14,8 @@ import android.widget.Toast; import com.barryzeha.mdpostres.databinding.FragmentProductBinding; +import com.google.android.material.transition.MaterialFadeThrough; +import com.google.android.material.transition.MaterialSharedAxis; import java.util.ArrayList; import java.util.List; @@ -24,6 +27,9 @@ public class ProductFragment extends Fragment implements onClickProduct { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + setReenterTransition(new MaterialSharedAxis(MaterialSharedAxis.X, false)); + setExitTransition(new MaterialSharedAxis(MaterialSharedAxis.X, true)); + setEnterTransition(new MaterialFadeThrough()); } @@ -39,10 +45,25 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - ProductAdapter adapter= new ProductAdapter(getProducts(), this); + ProductAdapter adapter = new ProductAdapter(getProducts(), this); bind.recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2)); bind.recyclerView.setHasFixedSize(true); bind.recyclerView.setAdapter(adapter); + + /* + * Ahora usaremos la acción creada en el modo grafico del navigation para ir del product fragment + * al carFragment con navigation + * */ + bind.btnAddCar.setOnClickListener(v -> { + /* NavHostFragment.findNavController(this) + .navigate(R.id.action_product_to_car));*/ + //usaremos una librería de navigation de google para habilitar el pase de parámetros entre fragmentos + //a través del navHost + ProductFragmentDirections.ActionProductToCar action = ProductFragmentDirections.actionProductToCar(); + action.setProductsArgs(getProductsStr()); + NavHostFragment.findNavController(this).navigate(action); + + }); } private List getProducts() { @@ -64,9 +85,24 @@ private List getProducts() { return products; } + private String[] getProductsStr(){ + String[] productsStr= new String[selectedProduct.size()]; + int index=0; + for(Product product : selectedProduct){ + productsStr[index]=product.getName(); + index++; + + } + return productsStr; + } @Override public void onclick(Product product) { - + if(product.isSelected()){ + selectedProduct.add(product); + } + else{ + selectedProduct.remove(product); + } } } \ No newline at end of file diff --git a/Material_Components_App_Navigation/app/src/main/res/anim/slide_in.xml b/Material_Components_App_Navigation/app/src/main/res/anim/slide_in.xml new file mode 100644 index 0000000..76673c6 --- /dev/null +++ b/Material_Components_App_Navigation/app/src/main/res/anim/slide_in.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/Material_Components_App_Navigation/app/src/main/res/anim/slide_out.xml b/Material_Components_App_Navigation/app/src/main/res/anim/slide_out.xml new file mode 100644 index 0000000..0b15f66 --- /dev/null +++ b/Material_Components_App_Navigation/app/src/main/res/anim/slide_out.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/Material_Components_App_Navigation/app/src/main/res/drawable/ic_back.xml b/Material_Components_App_Navigation/app/src/main/res/drawable/ic_back.xml new file mode 100644 index 0000000..6d14799 --- /dev/null +++ b/Material_Components_App_Navigation/app/src/main/res/drawable/ic_back.xml @@ -0,0 +1,11 @@ + + + diff --git a/Material_Components_App_Navigation/app/src/main/res/drawable/ic_check.xml b/Material_Components_App_Navigation/app/src/main/res/drawable/ic_check.xml new file mode 100644 index 0000000..9e086a6 --- /dev/null +++ b/Material_Components_App_Navigation/app/src/main/res/drawable/ic_check.xml @@ -0,0 +1,5 @@ + + + diff --git a/Material_Components_App_Navigation/app/src/main/res/drawable/ic_check_normal.xml b/Material_Components_App_Navigation/app/src/main/res/drawable/ic_check_normal.xml new file mode 100644 index 0000000..0432fa6 --- /dev/null +++ b/Material_Components_App_Navigation/app/src/main/res/drawable/ic_check_normal.xml @@ -0,0 +1,10 @@ + + + diff --git a/Material_Components_App_Navigation/app/src/main/res/drawable/ic_close.xml b/Material_Components_App_Navigation/app/src/main/res/drawable/ic_close.xml new file mode 100644 index 0000000..16d6d37 --- /dev/null +++ b/Material_Components_App_Navigation/app/src/main/res/drawable/ic_close.xml @@ -0,0 +1,10 @@ + + + diff --git a/Material_Components_App_Navigation/app/src/main/res/drawable/ic_payment.xml b/Material_Components_App_Navigation/app/src/main/res/drawable/ic_payment.xml new file mode 100644 index 0000000..9c0fb1f --- /dev/null +++ b/Material_Components_App_Navigation/app/src/main/res/drawable/ic_payment.xml @@ -0,0 +1,10 @@ + + + diff --git a/Material_Components_App_Navigation/app/src/main/res/layout/activity_main.xml b/Material_Components_App_Navigation/app/src/main/res/layout/activity_main.xml index 451df9f..c25a142 100644 --- a/Material_Components_App_Navigation/app/src/main/res/layout/activity_main.xml +++ b/Material_Components_App_Navigation/app/src/main/res/layout/activity_main.xml @@ -21,5 +21,7 @@ - + \ No newline at end of file diff --git a/Material_Components_App_Navigation/app/src/main/res/layout/bottom_sheet_exit.xml b/Material_Components_App_Navigation/app/src/main/res/layout/bottom_sheet_exit.xml new file mode 100644 index 0000000..286a68d --- /dev/null +++ b/Material_Components_App_Navigation/app/src/main/res/layout/bottom_sheet_exit.xml @@ -0,0 +1,56 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Material_Components_App_Navigation/app/src/main/res/layout/fragment_car.xml b/Material_Components_App_Navigation/app/src/main/res/layout/fragment_car.xml index 52ec3eb..45d4ea4 100644 --- a/Material_Components_App_Navigation/app/src/main/res/layout/fragment_car.xml +++ b/Material_Components_App_Navigation/app/src/main/res/layout/fragment_car.xml @@ -1,14 +1,71 @@ - - + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:id="@+id/tvCheck" + android:text="@string/product_list" + android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6" + android:layout_margin="@dimen/common_padding_default" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"/> + + + + + + - \ No newline at end of file + \ No newline at end of file diff --git a/Material_Components_App_Navigation/app/src/main/res/layout/fragment_confirmation.xml b/Material_Components_App_Navigation/app/src/main/res/layout/fragment_confirmation.xml new file mode 100644 index 0000000..fd43087 --- /dev/null +++ b/Material_Components_App_Navigation/app/src/main/res/layout/fragment_confirmation.xml @@ -0,0 +1,59 @@ + + + + + + + + + \ No newline at end of file diff --git a/Material_Components_App_Navigation/app/src/main/res/layout/item_car.xml b/Material_Components_App_Navigation/app/src/main/res/layout/item_car.xml index 479278e..892fe8d 100644 --- a/Material_Components_App_Navigation/app/src/main/res/layout/item_car.xml +++ b/Material_Components_App_Navigation/app/src/main/res/layout/item_car.xml @@ -10,7 +10,8 @@ android:id="@+id/tvPrice" android:textAppearance="@style/TextAppearance.MaterialComponents.Subtitle1" android:textStyle="bold" - android:hint="S/1.00" + + android:text="S/1.00" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"/> diff --git a/Material_Components_App_Navigation/app/src/main/res/menu/main_menu.xml b/Material_Components_App_Navigation/app/src/main/res/menu/main_menu.xml new file mode 100644 index 0000000..b23082f --- /dev/null +++ b/Material_Components_App_Navigation/app/src/main/res/menu/main_menu.xml @@ -0,0 +1,12 @@ + + + + + \ No newline at end of file diff --git a/Material_Components_App_Navigation/app/src/main/res/navigation/nav_graph.xml b/Material_Components_App_Navigation/app/src/main/res/navigation/nav_graph.xml index 246a268..c763544 100644 --- a/Material_Components_App_Navigation/app/src/main/res/navigation/nav_graph.xml +++ b/Material_Components_App_Navigation/app/src/main/res/navigation/nav_graph.xml @@ -8,11 +8,48 @@ + android:label="@string/app_name" + tools:layout="@layout/fragment_product" > + + + + android:label="@string/car_title" + tools:layout="@layout/fragment_car" > + + + + + + + + + \ No newline at end of file diff --git a/Material_Components_App_Navigation/app/src/main/res/values/dimens.xml b/Material_Components_App_Navigation/app/src/main/res/values/dimens.xml index dc59c43..570757e 100644 --- a/Material_Components_App_Navigation/app/src/main/res/values/dimens.xml +++ b/Material_Components_App_Navigation/app/src/main/res/values/dimens.xml @@ -4,4 +4,8 @@ 180dp 16dp 8dp + 24dp + 144dp + 0dp + 64dp \ No newline at end of file diff --git a/Material_Components_App_Navigation/app/src/main/res/values/strings.xml b/Material_Components_App_Navigation/app/src/main/res/values/strings.xml index 06b8341..e6c0b87 100644 --- a/Material_Components_App_Navigation/app/src/main/res/values/strings.xml +++ b/Material_Components_App_Navigation/app/src/main/res/values/strings.xml @@ -2,9 +2,22 @@ MD Postres Hello blank fragment - Productos Imagen del producto Nombre del producto Añadir Nombre del producto + Atrás + Total = S/%1$.2f + Supedido llegará pronto, gracias por su compra + !Pago exitoso¡ + + Pagar + Pago + Carrito de compras + Pedido: + Productos + Listo + Pago(by id) + ¿Salir de la aplicación? + Salir \ No newline at end of file diff --git a/Material_Components_App_Navigation/build.gradle b/Material_Components_App_Navigation/build.gradle index 9eb1ea6..80d72b4 100644 --- a/Material_Components_App_Navigation/build.gradle +++ b/Material_Components_App_Navigation/build.gradle @@ -6,7 +6,8 @@ buildscript { } dependencies { classpath "com.android.tools.build:gradle:7.0.1" - + def nav_version = "2.3.5" + classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }