Hi, Guys Welcome to Proto Coders Point, In this android studio tutorial article we will build a material component i.e custom bottom navigation bar android.
Bottom Navigation bar is a material component that help user to switch between screen or pages.
Here is how our final BottomNavigationView looks
Video Tutorial on Custom Navigation Bar android
So now let’s begin Implementing the same.
Custom Bottom Navigation Bar android with Fab Button at center
Step 1: Create a new Android Project
Ofcourse you need to create a new Android Project or Open your existing Android Project where you want to add Bottom Navigation View.
In your Android Studio IDE go to, File > New > New Project ( a window will open select Empty Activity Next) > Give a name & package to your Android application & Finish (Android project will get created).
In your Android IDE Project section look for Gradle Script> build.gradle (app level) open it and add below 3 dependencies under the dependencies section if they don’t exist.
A Dropdown in Flutter helps app user to select an item from a drop-down menu item. This widget will show the selected item on drop-down button and icon to indicate user it has a list of item to select.
A Flutter Drop Down Button is a generic type flutter widget which means you can pass any datatype as per your requirement, In flutter drop down menu list item string are been used most of the time.
Create a list of items to show them in Drop down spinner in flutter
Snippet Code
The Flutter DropDownButton contain several properties that you can use to create a customized dropdown list.
Here i above snippet code screenshot, i am using only 4 properties
value: A selected value from the drop-down will be shown in the drop-down button.
icon: to show a drop icon next to the button.
onChanged: when the user selects an option from the drop-down, the value on dropdownbutton changed.
items: where you need to pass your list of items that you want to show in DropDownMenuItem.
Then, I have used a map function that simply iterates to a list of items (items – Array list), so the map function in the first iteration will set item[0] to the drop-down, then in the second iteration, the second item will be set and so on up to the end of the array string.
android floating action button animation menu example
Hi Guys, Welcome to Proto Coders Point, In this Android Tutorial Article, we will learn How to Implement the Floating action button with an animation pop-up menu example.
What is Floating Action Button ?
The floating action button is a speical and different as compared to normal button. They are in circle or round button in android that will be floating above the UI. This Floating Button is known as primary action used by users to perform main task.
For Example: Using Floating Button a user can perform action like adding a new item to an existing list.
So in this article, we will learn how to implement Floating Action Button in android with menu pop-up animation example.
NOTE: we are going to implement this project using kotlin android language.
then let’s begin with the tutorial.
Steps for Creating Extended Floating Action Button with Animation
Step 1: Create new Project
Just Create a new Android Project in your android studio IDE
Step 2: check for material design dependencies
If you are using latest version of android studio IDE (4.1.1) then material design dependencies will automatically been added in your project while creating new project. To check that, open build.gradle(Module:app) under dependencies section check if material dependencies is there if not then add it.
// material design
implementation 'com.google.android.material:material:1.3.0'
After adding any new dependencies, a button/text “Sync Now” will appear on the top right corner of your android Studio IDE just click on it.
Make user you are connected to Internet before hiting Sync Now button. It will download all the files of the depencencies into your project.
We need Material dependencies because FloatingActionButton library exist in it.
Step 3 : Create Vector Images Icon
Now In Drawable folder create some vector Icon Image, to display icons on fab buttons.
To create new vector images in the project right-click on the drawable folder -> New -> Vector Asset.
A new pop window will be opened and choose any vector you want by clicking on the Clip Art button.
Please refer below images.
click on clip art to select vector image icons.
Step 4: Create fab animation files
Here is How my animation xml file structure looks.
So as you can see in above screenshot, you need to create 4 animation files.
firstly under res folder create Android Resource directory(anim), res(right click) > New > Android Resource Directory > a dialog open’s under resource type select anim.
Then, anim directory is been created, now under anim folder create 4 android resource files.
res > anim(right click) > New > Animation Resources File
Kindly refer the comment in below xml code for easy understanding
<?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=".MainActivity">
<!--This is a parent Floating Action Button-->
<!-- When this FAB Button is been pressed/clicked the following two button will get pop-up with animation -->
<!-- the Functionality is been done in MainActivity.java file -->
<!-- The other two FAB button is been set to InVisible so when user click on this button those 2 will get visible-->
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/add_f"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="24dp"
android:layout_marginRight="24dp"
android:layout_marginBottom="24dp"
android:clickable="true"
android:focusable="true"
android:tint="@android:color/white"
android:backgroundTint="#0038FF"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:srcCompat="@drawable/ic_android"
tools:ignore="VectorDrawableCompat" />
<!--This act a child Floating Action Button-->
<!-- The visibility is been set to INVISIBLE -->
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/edit_f"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:clickable="true"
android:visibility="invisible"
android:focusable="true"
android:tint="@color/white"
app:layout_constraintBottom_toTopOf="@+id/add_f"
app:layout_constraintEnd_toEndOf="@+id/add_f"
app:srcCompat="@drawable/ic_edit_24" />
<!--This act a child Floating Action Button-->
<!-- The visibility is been set to INVISIBLE -->
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/setting_f"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:clickable="true"
android:focusable="true"
android:visibility="invisible"
android:tint="@color/white"
app:layout_constraintBottom_toTopOf="@+id/edit_f"
app:layout_constraintEnd_toEndOf="@+id/edit_f"
app:srcCompat="@drawable/ic_settings_24" />
</androidx.constraintlayout.widget.ConstraintLayout>
In you want to change floating action button color then you can user
android:backgroundTint="@color/white"
and you easily change floating action button icon size then use
app:maxImageSize="45dp"
Step 6: Handling Floating Action Button Animation in MainActivity.java
package com.example.expandablefloatingactionbutton
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.view.animation.Animation
import android.view.animation.AnimationUtils
import android.widget.Toast
import com.example.expandablefloatingactionbutton.R
import com.google.android.material.floatingactionbutton.FloatingActionButton
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
// creating variable that handles Animations loading
// and initializing it with animation files that we have created
private val rotateOpen : Animation by lazy { AnimationUtils.loadAnimation(this,R.anim.rotate_open_anim) }
private val rotateClose : Animation by lazy { AnimationUtils.loadAnimation(this,R.anim.rotate_close_anim) }
private val fromBottom: Animation by lazy { AnimationUtils.loadAnimation(this,R.anim.from_bottom_anim) }
private val toBottom : Animation by lazy { AnimationUtils.loadAnimation(this,R.anim.to_bottom_anim) }
//used to check if fab menu are opened or closed
private var closed = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//add fab button
add_f.setOnClickListener {
OnAddButtonClick()
}
//edit fab button on click
edit_f.setOnClickListener {
Toast.makeText(this,"Edit",Toast.LENGTH_SHORT).show();
}
//setting fab button on click
setting_f.setOnClickListener {
Toast.makeText(this,"Search",Toast.LENGTH_SHORT).show();
}
}
private fun OnAddButtonClick() {
setVisibility(closed)
setAnimation(closed)
closed = !closed;
}
// A Function used to set the Animation effect
private fun setAnimation(closed:Boolean) {
if(!closed){
edit_f.startAnimation(fromBottom)
setting_f.startAnimation(fromBottom)
add_f.startAnimation(rotateOpen)
}else{
edit_f.startAnimation(toBottom)
setting_f.startAnimation(toBottom)
add_f.startAnimation(rotateClose)
}
}
// used to set visibility to VISIBLE / INVISIBLE
private fun setVisibility(closed:Boolean) {
if(!closed)
{
edit_f.visibility = View.VISIBLE
setting_f.visibility = View.VISIBLE
}else{
edit_f.visibility = View.INVISIBLE
setting_f.visibility = View.INVISIBLE
}
}
}
So you are here to know the best flutter package/plugins, That means you might be having a great and awesome cross-platform project idea in your mind using flutter? am I right? then you are in the right place to make research on the best plugins for a flutter app development.
Bro, Don’t miss this is simple yet easy-to-use and awesome flutter packages to include in your project that makes app development much faster and easier.
//Easy Navigation to Flutter Pages
Get.to(Page2());
// Display Snackbar messages
Get.snackbar("Hi", "message");
//Easy to display a dialog pop
Get.defaultDialog(title: "THIS IS DIALOG BOX USING FLUTTER GET X ",middleText: "GET x made Easy");
And much more Event is easily possible using Flutter GetX.
Using Equatable you can compare between objects, and thus save lots of time in writing boiler plate codes.
Equatable easily override == & hashcode with flutter equatable there is no need to generate code, you can keep your focus of writing amazing flutter application. To learn more visit official sire here
Snippet Code Flutter Equatable Example
import 'package:equatable/equatable.dart';
class Fruits extends Equatable{
final String FruitName;
Fruits(this.FruitName);
@override
// TODO: implement props
List<Object> get props => throw UnimplementedError();
}
// inside main or class
Fruits fruits1 = Fruits("Apple");
Fruits fruits2 = Fruits("Banana");
print(fruit1 == fruit2); //return false
Fruits fruits3=Fruits("Banana");
print(fruit1 == fruit2); //return true
This Flutter storage package will work the same as SHARED PREFERENCES but in a secured form, This flutter storage plugin will store data in a secured way with AES Encryption.
So, Once your flutter project is ready to be distributed publicly, then it’s time to add-on an awesome functionality, such as share, where your app user can easily share flutter app URL with his friends & family to download your awesome flutter application.
What is Flutter Share plugin?
The flutter share plugin is very useful when the user wants to share contents from the flutter app with any of his friends via the platform share dialog box.
This plugin is wraped with ACTION_VIEW INTENT as in android and UIActivityViewController as on iOS devices.
whenever the flutter app user wants to share any contents he can just click on the share button which simply pop-up a share dialog using which he/she can easily share contents.
snippet code flutter share
//on share button pressed
onPressed: () {
Share.share(
'check out my website https://protocoderspoint.com/');
},
Recyclerview user entered – array list send to database
Ok So let’s begin,
Database Setup
My database is hosted with my website hosting protocoderspoint.com, so in my hosting i have created a new database special for this tutorial.
Create a new table in your phpmyadmin database
How a look at database, it has a table by name : ‘ExpenseTable’ which has 3 column
id : type int auto Increment.
ExpenseName : type varchar(50).
ExpenseAmt : type varchar(50).
command to create table in your database
CREATE TABLE `ExpenseTable` (
`id` int(11) NOT NULL,
`ExpenseName` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`ExpenseAmt` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
So now we are done with create the database table now let’s go with php code that helps us in getting connected with database and store the array list data into the table.
Php code – connect database – storing array list to data table
Here are 2 php files/code
connect.php: Help us in getting connected with our database.
save_expense.php: Helps us in storing/inserting data into our database.
The connect.php is a common php code that help in getting connected with our database, I have created connect.php file separate so that in my other php code i can simply include connect.php code that’s it, whenever i hit or call other php code where connet.php is included it automatically get connected to out database.
Here the PHP code is receiving ArrayList in the form of JSON ARRAY, that is been decoded using the json_decode function.
After that we are using for loop to iterate the total number of data present in the array list using count($expname) this will return a number, for example, suppose your array is [‘0’, ‘1’, ‘2’, ‘3’] then count will return 4, so the for loop will run for 4 times. Then in for loop, we have a SQL query then will insert the data into our database using mysqli_query.
Ok so now we are done with our php script that will insert data into our database, now let’s go to android coding.
Android Coding –
Recyclerview EditText Entered data store in an array and send to database
android project structure
Have a look at my android project structure for easy understanding of the android tutorial on Recyclerview with editText Field.
So as we are making internet call to send data to our database, we need to specify which domain or IP we are using to send/receive data, so for that, you need to create a networksecurityconfig.xml file in res>xml>
create a directory “XML” inside res then create an XML resource file networksecurityconfig.xml under that directory and copy-paste the below code.
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">protocoderspoint.com</domain> // Here replace with your domain/IP
</domain-config>
</network-security-config>
Then go to your AndroidManifest.xml and add the network SecurityConfig file under <application> tag
Hi Guys, Welcome to Proto Coders Point, In this tutorial we will build a app that has a recyclerview with a list of view items and each list item in adapter has a Expense name (TextView) and a EditText field where user can enter the expense he spent for that expense. Check out below screenshot
Have a look at my android project structure for easy understanding of the android tutorial on Recyclerview with editText Field.
Android Project Structure
So as you can see in above project structure, i have created 2 folder one for Recyclerview Adapter and a Data model that hold our dataSet that will be displayed in androidx Recyclerview.
Java Class
Adapter.java: That will help to inflate view in recyclerview.
ItemDatamodel.java: That holded list of data’s.
XML Layout
activity_main.xml : Where list of data will be displayed.
card_prod_list.xml : Eiew that will be shown to display particular list of items.
Recyclerview android example with edittext (source code)
UI XML Source Code below
card_prod_list.xml
Cardview that get generated when list of passed from activity to recyclerview adapter
that all in xml layout you need to add. now let’s jump to java source : android recyclerview adapter and datamodel.
Java source : android recyclerview adapter and datamodel.
ItemDatamodel.java
Our DataModel class holder 2 kinds of datatype i.e integer and a string. interger to hold Expense Id and String that holds ExpenseName.
package com.example.recyclerview_image_pick.datamodel;
public class ItemDatamodel {
int ExpenseId;
String ExpenseName;
public ItemDatamodel(int expenseId, String expenseName) {
ExpenseId = expenseId;
ExpenseName = expenseName;
}
public int getExpenseId() {
return ExpenseId;
}
public String getExpenseName() {
return ExpenseName;
}
}
Adapter.java
Check out the comment in code to under the Android Recyclerview Adapter code.
package com.example.recyclerview_image_pick.Adapter;
import android.app.Activity;
import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.recyclerview_image_pick.R;
import com.example.recyclerview_image_pick.datamodel.ItemDatamodel;
import java.util.ArrayList;
public class Adapter extends RecyclerView.Adapter<Adapter.MyViewHolder> {
View rootView;
Context context;
private ArrayList<ItemDatamodel> dataSet;
// Usered Entered Expense amt will be stored in ExpAmtArray
ArrayList<String> ExpAmtArray = new ArrayList<String>();
boolean isOnTextChanged = false;
int ExpenseFinalTotal = 0;
TextView textviewTotalExpense;
//constructor with dataSet passed from MainActivity when Adapter is called
public Adapter(ArrayList<ItemDatamodel> dataSet) {
this.dataSet = dataSet;
}
//Recyclerview ViewHolder
public static class MyViewHolder extends RecyclerView.ViewHolder {
TextView expensesName;
EditText expHeld;
Button imageButton;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
// finding view by view id.
expensesName = (TextView) itemView.findViewById(R.id.textViewExpName);
expHeld = (EditText) itemView.findViewById(R.id.ExpHeld);
imageButton = (Button) itemView.findViewById(R.id.ExpBimageSelect);
}
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
// Initialize view for recyclerview
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_prod_list, parent, false);
context = parent.getContext();
rootView = ((Activity) context).getWindow().getDecorView().findViewById(android.R.id.content);
textviewTotalExpense = (TextView) rootView.findViewById(R.id.totalExpense);
//attach view to MyViewHolder
MyViewHolder myViewHolder = new MyViewHolder(view);
return myViewHolder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
//initialize the view with view holder
TextView expensesName = holder.expensesName;
EditText expHeld = holder.expHeld;
Button imageButton = holder.imageButton;
expensesName.setText(dataSet.get(position).getExpenseName());
// EditText with TextWatcher Listens each time when user enter value in edittext in recyclerview
expHeld.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//using this boolean because sometime when user enter value in edittxt
//afterTextchanged runs twice to prevent this, i m making use of this variable.
isOnTextChanged = true;
}
@Override
public void afterTextChanged(Editable editable) {
//so this will trigger each time user enter value in editText box
ExpenseFinalTotal = 0;
if (isOnTextChanged) {
isOnTextChanged = false;
try {
ExpenseFinalTotal = 0;
for (int i = 0; i <= position; i++) {
int inposition1 = position;
if (i != position) {
//store 0 where user select position in not equal/
ExpAmtArray.add("0");
}else {
// store user entered value to Array list (ExpAmtArray) at particular position
ExpAmtArray.add("0");
ExpAmtArray.set(inposition1,editable.toString());
break;
}
}
// for statement to loop to the array, to calculate the Expense total.
for (int i = 0; i <= ExpAmtArray.size() - 1; i++) {
int tempTotalExpenase = Integer.parseInt(ExpAmtArray.get(i));
ExpenseFinalTotal = ExpenseFinalTotal + tempTotalExpenase;
}
textviewTotalExpense.setText("Total Expenses: ₹ "+String.valueOf(ExpenseFinalTotal));
}catch (NumberFormatException e)
{
// catch is used because, when used enter value in editText and remove the value it
// it will trigger NumberFormatException, so to prevent it and remove data value from array ExpAmtArray
//then
// re-perform loop total expense calculation and display the total.
ExpenseFinalTotal = 0;
for (int i = 0; i <= position; i++) {
Log.d("TimesRemoved", " : " + i);
int newposition = position;
if (i == newposition) {
ExpAmtArray.set(newposition,"0");
}
}
for (int i = 0; i <= ExpAmtArray.size() - 1; i++) {
int tempTotalExpenase = Integer.parseInt(ExpAmtArray.get(i));
ExpenseFinalTotal = ExpenseFinalTotal + tempTotalExpenase;
}
textviewTotalExpense.setText("Total Expenses: ₹ "+String.valueOf(ExpenseFinalTotal));
}
}
}
});
}
@Override
public int getItemCount() {
return dataSet.size();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
}
MainActivity.java
package com.example.recyclerview_image_pick;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.util.Log;
import com.example.recyclerview_image_pick.Adapter.Adapter;
import com.example.recyclerview_image_pick.datamodel.ItemDatamodel;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private static ArrayList<ItemDatamodel> data;
ItemDatamodel itemDatamodel;
// list of Expensesname
String[] Expensesname = {"Rent","Coffee","Lunch","Dinner","Transport","Other"};
private static RecyclerView.Adapter adapter;
private RecyclerView.LayoutManager layoutManager;
private static RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view_expenses);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
data = new ArrayList<>();
// generate ArrayList and store in data model
for(int i =0;i<Expensesname.length;i++){
itemDatamodel = new ItemDatamodel(
i,
Expensesname[i]
);
data.add(itemDatamodel);
}
// call Adapter class by passing ArrayList data
adapter = new Adapter(data);
// set adapter to recyclerview
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
#video Tutorial will be uploaded soon on my youtube channel.