Android Tutorial
Software Setup and Configuration
Android Studio
File Structure
Components
Core Topics
Layout
View
Button
Intent and Intent Filters
Toast
RecyclerView
Fragments
Adapters
Other UI Component
Image Loading Libraries
Date and Time
Material Design
Bars
Working with Google Maps
Chart
Animation
Database
Advance Android
Jetpack
Architecture
App Publish
App Monetization
A LoadingButton
typically indicates a process is occurring after a user action, and the UI gives feedback about this process. While there isn't a default LoadingButton
component in the Android SDK, it's fairly easy to create one. Here's a guide on how you can create a basic LoadingButton
using a Button
and a ProgressBar
.
In the layout XML, you can combine a Button
and a ProgressBar
within a FrameLayout
:
<FrameLayout android:id="@+id/loadingButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:clickable="true" android:focusable="true"> <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="match_parent" android:text="Submit" /> <ProgressBar android:id="@+id/progressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:visibility="gone" /> </FrameLayout>
In your Kotlin code, you can toggle between the loading state and the default state:
val loadingButton = findViewById<FrameLayout>(R.id.loadingButton) val button = findViewById<Button>(R.id.button) val progressBar = findViewById<ProgressBar>(R.id.progressBar) loadingButton.setOnClickListener { // Perform your asynchronous task here (e.g., network request) showLoading(true) // For demonstration, simulate a delay and then revert to the default state Handler(Looper.getMainLooper()).postDelayed({ showLoading(false) }, 3000) } fun showLoading(isLoading: Boolean) { if (isLoading) { button.visibility = View.INVISIBLE progressBar.visibility = View.VISIBLE loadingButton.isClickable = false } else { button.visibility = View.VISIBLE progressBar.visibility = View.GONE loadingButton.isClickable = true } }
This setup makes the Button
invisible and shows the ProgressBar
while loading. Once the loading completes, the Button
becomes visible again, and the ProgressBar
disappears.
You can further enhance this by adding animations, custom backgrounds, or other UI enhancements to match your app's theme and user experience requirements. There are also third-party libraries available that offer more advanced loading buttons with extended features, so depending on your needs, you might want to explore those as well.
Implementing loading state in Android button:
ProgressBar
and Button
. Toggle their visibility based on the loading state.<RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/loadingButton" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Click Me" /> <ProgressBar android:id="@+id/loadingProgressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:visibility="invisible" /> </RelativeLayout>
Button loadingButton = findViewById(R.id.loadingButton); ProgressBar loadingProgressBar = findViewById(R.id.loadingProgressBar); // Set OnClickListener to handle button click and show loading state loadingButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Show loading state loadingButton.setEnabled(false); loadingProgressBar.setVisibility(View.VISIBLE); // Perform asynchronous task // Hide loading state loadingButton.setEnabled(true); loadingProgressBar.setVisibility(View.INVISIBLE); } });
Creating a progress button in Android with example code:
AppCompatButton
and includes a ProgressBar
. Toggle their visibility to represent the loading state.public class ProgressButton extends AppCompatButton { private ProgressBar progressBar; public ProgressButton(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { progressBar = new ProgressBar(getContext(), null, android.R.attr.progressBarStyleSmall); // Set ProgressBar attributes and add it to the layout // ... // Set OnClickListener to handle button click and show loading state setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Show loading state setEnabled(false); progressBar.setVisibility(View.VISIBLE); // Perform asynchronous task // Hide loading state setEnabled(true); progressBar.setVisibility(View.INVISIBLE); } }); } }
Custom LoadingButton implementation in Android:
LoadingButton
class that encapsulates the loading state logic. This can extend AppCompatButton
and handle loading state internally.public class LoadingButton extends AppCompatButton { private ProgressBar progressBar; public LoadingButton(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { progressBar = new ProgressBar(getContext(), null, android.R.attr.progressBarStyleSmall); // Set ProgressBar attributes and add it to the layout // ... // Set OnClickListener to handle button click and show loading state setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showLoadingState(); // Perform asynchronous task hideLoadingState(); } }); } private void showLoadingState() { setEnabled(false); progressBar.setVisibility(View.VISIBLE); } private void hideLoadingState() { setEnabled(true); progressBar.setVisibility(View.INVISIBLE); } }
Loading animation for buttons in Android app development:
ProgressBar
or use custom animations.<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:fromDegrees="0" android:toDegrees="360" android:pivotX="50%" android:pivotY="50%" android:duration="1000" android:interpolator="@android:anim/linear_interpolator" />
Android LoadingButton library and usage:
Ladda
library, for implementing loading buttons in Android. Add the library dependency and follow its documentation for usage.Ladda Library GitHub Repository
Handling button state changes in Android with loading:
boolean isLoading = false; // Set OnClickListener to handle button click and show/hide loading state loadingButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!isLoading) { // Show loading state isLoading = true; loadingButton.setEnabled(false); loadingProgressBar.setVisibility(View.VISIBLE); // Perform asynchronous task // Hide loading state isLoading = false; loadingButton.setEnabled(true); loadingProgressBar.setVisibility(View.INVISIBLE); } } });
LoadingButton XML layout examples in Android:
<RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <LoadingButton android:id="@+id/loadingButton" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Click Me" /> <ProgressBar android:id="@+id/loadingProgressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:visibility="invisible" /> </RelativeLayout>