[Include 50 more] Library Awesome #Android ,#Kotlin ,#Flutter Libraries 2020–2021 of Years Android Developer Library GitHub

Ponglang Petrung
46 min readDec 31, 2020
cr : https://mlsdev.com/blog/171-mobile-app-ui-design-tools

Happy New Years 2021

Hi Everyone

To read Or never read This is also the time of the entry of the blog. Has come to write again, has collected Libraries again, which would like to say that throughout the library has been collected for years since the first article “[{Ep. 1} Include 50 more] Libraries All Awesome Android Developer Libraries in GitHub V.1 “The love story of Andoid rew.” At that time, it was said that the era in which Boom had a lot to write at that time. Because of the change from Java language to Kotlin because at that time the developers had to adapt in time With a world that must change Speaking when he first entered this industry, hehe

8 Best Things for Android Development in 2020

#1 View Binding

#2 StateFlow and SharedFlow

#3 MotionLayout

#4 Hilt

#5 Jetpack Datastore

#6 Jetpack Compose

#7 Kotlin Multiplatform

#8 Android 11

The State of Native Android Development, December 2020

As 2020 comes to an end, it’s time to take a look at what’s going on in Android development ecosystem. Therefore, in this article, I’ll summarize my opinions, gut feelings and predictions for the future.

Thanks Please follower link old blog ^^

Part 1: [Great] Interesting Android Library — April 2017 for Android GitHub Developer Library
Part 2: [Popular] Android library May — September ( cobeisfresh ) 2017 for Android GitHub Developer Library
Part 3: Lovely Android Library May — September ( cobeisfresh ) 2017 for Android GitHub Developer Library
Part 3: [Top 40] Featured Android Library — September 2017 For Android Developers GitHub
Part 5: [50Top] Awesome Android Libraries — February March April 2018 Android Developer Library GitHub
Part 6: [Include 61 Libraries All for 2018 ] Awesome Android Libraries — 2018 October — December Android Developer Library GitHub

61 : PowerPermission

62:KeyboardStateEvents

63 : DragView

64 : CustomDateTimePicker

and more

1.AXMemojiView

AXMemojiView is a new page for AXEmojiView which shows memoji just like stickers

Table of Contents

2 AutocompleteLocationAndroid

Cute library to implement PlaceAutocomplete in android based in jotaramirez90 AutocompleteLocation library.

Add the AutocompleteLocation into the layout:

<com.jesualex.autocompletelocation.AutocompleteLocation
android:id="@+id/autocomplete_location"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

Set the listeners(All are optional for more comfort):

public class MainActivity extends FragmentActivity
implements AutocompleteLocation.AutocompleteLocationListener {
@Override protected void onCreate(Bundle savedInstanceState) {
...
AutocompleteLocation autoCompleteLocation =
(AutocompleteLocation) findViewById(R.id.autocomplete_location);
autoCompleteLocation.setAutoCompleteTextListener(this);
autoCompleteLocation.setOnSearchListener(this);
}
}

3. Ratifier

Ratifier is a form validation library for Android.

Some Regex examples:

Mobile Number: /^(+\d{1,3}[- ]?)?\d{10}$/

Email Address: /^([a-z0–9_.-]+)@([\da-z.-]+).([a-z.]{2,6})$/

URL: /^(https?://)?([\da-z.-]+).([a-z.]{2,6})([/\w .-])/?$/

IP Address:/^(?:(?:25[0–5]|2[0–4][0–9]|[01]?[0–9][0–9]?).){3}(?:25[0–5]|2[0–4][0–9]|[01]?[0–9][0–9]?)$/

etc

Values can be set from activity by:

ratifierEditText.setEmptyMessage("Filed is empty");
ratifierEditText.setInvalidMessage("Password should be greater than 4 characters");
ratifierEditText.setRegex("/^(\+\d{1,3}[- ]?)?\d{10}$/"); // Regex for valid mobile number
ratifierEditText.setMinCharacters(4);

Remember to give regex from Strings.xml

4 AppRater-Dialog

An Android library providing the possibility to show a dialog, which asks the user to rate the app.

Here is an example of how to create a customized dialog:

public class MainActivity extends AppCompatActivity {@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new AppRater.StarBuilder(this, "com.kila.addnotification.lars")
.showDefault()
.minimumNumberOfStars(4)
.email("myemail@nodomain.abc")
.appLaunched();
setContentView(R.layout.activity_main);
}
}

5. WeDialog

A simple, support customView dialog library based on DialogFragment

A simple, support customView dialog library based on DialogFragment. We can use it to show dialog more simply.

中文版说明

Feature

  • Easier to use
  • Show dialog on a anchor view
  • Plenty of properties to setup for custom view
  • Global configs
  • Orientation Rotate with data and view-event maintaining

6.GlowButton

Beautify your layouts with glowing buttons. Support with a ⭐️ Contributions are welcome! 🙌

7. VideoLayout

To play video on layout background (textureview videoview for layout designs)

Why this project exists

The normal videoview on Android is very costly in terms of performance. Also, due to the video resolution ratio and apk size, most developers don’t want to include videos in the project. With this library, developers will have a performance-friendly video background with a few lines of code.

Features and Usage

Easy implementation

frameLayout = findViewById(R.id.frameLayout)
videoLayout = VideoLayout(this)
videoLayout.setGravity(VideoLayout.VGravity.centerCrop)
videoLayout.setIsLoop(true)
videoLayout.setPathOrUrl("loginvideotype3.mp4") // could be any video url
frameLayout.addView(videoLayout)
<egolabsapps.basicodemine.videolayout.VideoLayout
android:id="@+id/videoLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
app:video_gravity="centerCrop"
app:path_or_url="loginvideotype3.mp4"
app:loop="true"/>

8 Geolocator

Location tracking & geofencing the easy way. Supports background, killed app, rebooted device different update intervals.

Convience library to receive user location updates and geofence events with minimal effort.

Features:

  • supports Android-Q
  • receive updates on background
  • receive updates if app got killed
  • geofence updates (dwell, enter, exit)
  • location updates
  • configurable update intervals

9. RecyclerviewListeners

Show how to use extension function to handle recyclerView item and subItem listeners.

There are different ways to handle recyclerView item click listener, today I am going to use kotlin extension function to handle the item click listener and different listeners for sub view in the recycleView cell.

* Using Extenstion fun

  • Row (item) click listener
  • SubView click listener
  • CompoundButton onCheckedChanged listener Code

10: MediaSliderView

Pure java based, highly customizable media slider gallery supporting both images and videos for android.

Sliding Gallery View supporting both images and videos, for android applications.(Androidx support enabled).

Capabilities and Functionalities

MediaSliderView is a compact library for having a slideable/swipeable gallery view inside your android application, which supports both images and videos. MediaSliderView uses Glide (https://github.com/bumptech/glide) for images and exoplayer (https://github.com/google/ExoPlayer) for videos, under the hood, to render images and videos inside custom views which are handled by a viewpager to render a swipeable gallery with on demand view creation, updation and destruction. The library itself is highly customizable and the images in the gallery support pinch, zoom and panning capabilities and play/pause/restart support for videos.

What’s Included ?

  • Swipe left and right to navigate the gallery.
  • Fast and efficient image loading with Glide.
  • Exoplyer support for playing videos inside the gallery.
  • Supports Url’s as well as local file paths.
    (Note: android uri’s are not supported, only absolute file paths can be used).
  • Progress indicators for resource load progress.
  • Launch your gallery from a particular position.
  • Title for gallery view.
  • Navigation buttons on either sides to navigate through the gallery smoothly.
  • Item count view(current/total).

11:SmartAlertDialog

To install the library just add this line to your gradle:

implementation 'com.github.TecOrb-Developers:SmartAlertDialog:v1.0'

And add this where you want:

new SmartDialogBuilder(context)
.setTitle("Smart Dialog")
.setSubTitle("This is the alert dialog to showing alert to user")
.setCancalable(false)
.setTitleFont(titleFont) //set title font
.setSubTitleFont(subTitleFont) //set sub title font
.setNegativeButtonHide(true) //hide cancel button
.setPositiveButton("OK", new SmartDialogClickListener() {
@Override
public void onClick(SmartDialog smartDialog) {
Toast.makeText(context,"Ok button Click",Toast.LENGTH_SHORT).show();
smartDialog.dismiss();
}
}).setNegativeButton("Cancel", new SmartDialogClickListener() {
@Override
public void onClick(SmartDialog smartDialog) {
Toast.makeText(context,"Cancel button Click",Toast.LENGTH_SHORT).show();
smartDialog.dismiss();
}
}).build().show();

12:HRCarMarkerAnimation

This android library is helpful for google map marker animation with Smooth turn and movement.

Pass the Marker to animate, googlemap, Location of current position and Old Location of the marker of the user, duration of the animation & UpdateLocationCallBack Callback interface.

java
private Location mLastLocation;
private Location oldLocation;

new HRMarkerAnimation(googleMap,1000, new UpdateLocationCallBack() {
@Override
public void onUpdatedLocation(Location updatedLocation) {
oldLocation = updatedLocation;
}
}).animateMarker(mLastLocation, oldLocation, marker);

Here marker, googlemap,mLastLocation refers to the position of marker,oldLocation position refers to the position of the maker for calculating the slop of marker. These four fields are mandatory.

Duration refers to the animation time. By default it will take 1000. callback is the interface of Googlemap UpdatedLoation Callback return Old location. It requires when the user wants to animate the next animation after the first has finished.

The isMarkerVisible method return true or false if marker is visible on user device screen then it return false whenever the marker is not visible means outside the screen then it automatically animate to center of the screen

13: AndExAlertDialog

Usage

new AndExAlertDialog.Builder(context)
.setTitle(title)
.setMessage(message)
.setPositiveBtnText(positiveText)
.setNegativeBtnText(negativeText)
.setCancelableOnTouchOutside(boolean)
.setFont(Font.IRAN_SANS)
.setImage(image, imagePercent)
.setEditText(true, false, hintText, InputType.TEXT_MULTI_LINE)
.OnPositiveClicked(positiveClickListener)
.OnNegativeClicked(negativeClickListener)
.setTitleTextColor(color)
.setMessageTextColor(color)
.setButtonTextColor(color)
.build();

14: Funny-Crash

A simple Crash detector for Android apps that allows you to receive crashes from different devices or permit user to send a bug or feedback with screenshot when he shake his device.

Setup the listener to receive crashes or reports in your mainActivity or mainViewModel

FunnyCrash.reportListener = object : FunnyCrashReportListener {
override fun onReceiveReport(reportModel: ReportModel) {
Toast.makeText(this@MainActivity, reportModel.info, Toast.LENGTH_SHORT).show()
if (reportModel.reportType == FunnyCrashConstants.REPORT)
screenShot_imageView.setImageBitmap(BitmapFactory.decodeFile(reportModel.file?.absolutePath))
}
}

15: QuantityPickerView

A View capable of increasing or decreasing a unit value with a toggle animation.

Example:

com.github.guilhe.views.QuantityPickerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:textLabelFont="@font/permanentmarker_regular"
app:textLabelFormatter="%s units."
app:textLabelSize="14sp"/>

16: Gligar

Gliger is an Easy, lightweight and high performance image picker library for Android!Gliger load images using Android content resolver with the help of coroutines to lazy load the images and improve the performance!Gliger handle permission requests, support camera capture, and limit for the max number of images to pick.

How to used

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode != Activity.RESULT_OK) {
return
}

when (requestCode) {
PICKER_REQUEST_CODE -> {
val imagesList = data?.extras?.getStringArray(GligarPicker.IMAGES_RESULT)// return list of selected images paths.
if (!imagesList.isNullOrEmpty()) {
imagesCount.text = "Number of selected Images: ${imagesList.size}"
}
}
}
}

17:RateBottomSheet

This an Android library to help to promote your Android App by prompting users to rate your app in the Google Play Store with a material design friendly BottomSheet.

How to used :

RateBottomSheetManager(this)
.setInstallDays(1) // 3 by default
.setLaunchTimes(2) // 5 by default
.setRemindInterval(1) // 2 by default
.setShowAskBottomSheet(false) // True by default
.setShowLaterButton(false) // True by default
.setShowCloseButtonIcon(false) // True by default
.monitor()

// Show bottom sheet if meets conditions
// With AppCompatActivity or Fragment
RateBottomSheet.showRateBottomSheetIfMeetsConditions(this)

18: CPicker (CalendarPicker)

📆 A simple vertical date picker for Android, written in kotlin 🇮🇩

Usage

1. Add CalendarPicker to your XML file

<com.andrewjapar.rangedatepicker.CalendarPicker
android:id="@+id/calendar_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:scrollbarStyle="outsideOverlay"
app:picker_type="range" />

2. You can customize the picker range (by default current date + 1 year)

val startDate = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault())
val endDate = Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault())
endDate.add(Calendar.MONTH, 6) // Add 6 months ahead from current date

calendar_view.apply {
showDayOfWeekTitle(false) // If you want to disable day of the week title, just make it false
setMode(SelectionMode.RANGE) // You can set it via XML
setRangeDate(startDate.time, endDate.time)
setSelectionDate(startDate.time, endDate.time)
}

19:ColorPicker

🎨Color Picker Library for Android

Built with ❤︎ by Dhaval Patel and contributors

Yet another Color Picker Library for Android. It is highly customizable and easy to use. Pick the color from wheel or select Material Colors from dialog. The original ColorPickerView was written by Hong Duan.

🐱‍🏍Features:

  • Color Picker View
  • Color Picker Dialog with Recent Color Option
  • Material Color Picker Alert Dialog
  • Material Color Picker BottomSheet Dialog

20: LiveAdapter

LiveAdapter

Don’t write a RecyclerView adapter again. Not even a ViewHolder!

  • Based on Android Data Binding
  • Written in Kotlin
  • Supports LiveData
  • No need to write the adapter
  • No need to write the ViewHolders
  • No need to modify your model classes
  • No need to notify the adapter when data set changes
  • Supports multiple item view types
  • Optional Callbacks/Listeners
  • Very fast — no reflection
  • Super easy API
  • Minimum Android SDK: 19
// Kotlin sample
LiveAdapter(
data = liveListOfItems,
lifecycleOwner = this@MainActivity,
variable = BR.item )
.map<Header, ItemHeaderBinding>(R.layout.item_header) {
areContentsTheSame { old: Header, new: Header ->
return@areContentsTheSame old.text == new.text
}
}
.map<Point, ItemPointBinding>(R.layout.item_point) {
areContentsTheSame { old: Point, new: Point ->
return@areContentsTheSame old.id == new.id
}
}
.into(recyclerview)

21:SimpleAndroidBarChart

📢 SimpleAndroidBarChart is an Open Source Android library, that allows you to display a proposal of barchart. This is a simple example, for more customizations, you can download source code and custom it for your requirements.

Usage

Basic Example (Kotlin)

Firstly, you need to add this custom text view to the layout of the class

<com.boyzdroizy.simpleandroidbarchart.SimpleBarChart
android:id="@+id/simpleBarChart"
android:layout_width="match_parent"
android:layout_height="match_parent" />

In your class, using the ‘id’ from layout, call ‘setChartData’ method to give values for populate the chart.

val chartData = (12 downTo 1).map { Random.nextInt(10, 100) }.toMutableList()
val intervalData = (12 downTo 1).map { it }.toMutableList()
simpleBarChart.setChartData(chartData, intervalData)
simpleBarChart.setMaxValue(max)
simpleBarChart.setMinValue(0)

22:ImagePicker

Easy to use and configurable library to Pick an image from the Gallery or Capture image using Camera. It also allows to Crop and Compresses the Image based on Aspect Ratio, Resolution and Image Size.

‍🏍Features

  • Pick Gallery Image
  • Pick Image from Google Drive
  • Capture Camera Image
  • Crop Image(Crop image based on provided aspect ratio or let user choose one)
  • Compress Image(Compress image based on provided resolution and size)
  • Retrive Image Result as File, File Path as String or Uri object
  • Handle Runtime Permission for Camera and Storage

23:frogo-recycler-view

About This Project

  • RecyclerView No Adapter (Adapter Has Been Handled)
  • RecyclerView Multi-View-Type (only 2 type, still bug on java — beta version)
  • Elegant call using injector()
  • ViewBinding (Generic Type) *On Development
  • Shimmer Effect

24:AdvancedBiometricPromptCompat

What is BiometricPrompt API?

This is a new API that declares that the system takes care of a unified way to use different biometric identification methods — fingerprint, face, iris, etc., as well as a unified way to display the UI on all devices.

To learn more, read BiometricPrompt Reference in Android Developers site.

Unfortunately, this simplification hides a number of problems.

  • On Android 9, there is no way to simply get information about whether there is available biometric hardware and whether biometric data is enrolled. Android 10 provides BiometricManager that partially solves this problem.
  • Some manufacturers have removed/do not display the biometric UI
  • Biometric Auth solutions like Samsung Pass SDK or Meizu Fingerprint need to implement separately
  • No way to identify what types of biometric auth available on the device.

25 : AppUpdate

android app update library

26: floating-layout-android

27: CiceroneFlows

FlowCicerone provides different instances of Cicerone wherever an independent navigation flow is necessary: activity, flow fragments and flow fragment container.

FlowRouter provides several additional methods for working with subnavigation:

  1. Use standart methods for current flow navigation (for example router.navigateTo(screen)).
  2. Use overloaded methods for navigation on a specific flow (for example router.navigateTo("Tab1", screen)).
  3. Use overloaded methods with empty tag for navigation in activity stack (for example router.navigateTo("", screen)).
  4. Use switch command for switch current flow router.switch("Tab2").

Check out sample app

28:AXPowerView

Usage

add the AXPowerView to your layout:

<com.aghajari.powerview.AXPowerView
android:id="@+id/powerView"
android:layout_width="184dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
app:autoStart="true"
app:color="#55A4F1"
app:innerColor="@android:color/white"
app:state="POWER" />

That’s all you need! If you don’t want the AXPowerView to automatically start animating, omit the app:autoStart option and start it manually yourself:

AXPowerView powerView = findViewById(R.id.powerView);
powerView.setState(AXPowerView.State.POWER);

States : HIDDEN | POWER | LOADING | SUCCED

29:fingerprint-android

fingerprint android

Lightweight library for device identification and fingerprinting.

Fully written in Kotlin. 100% Crash-free.

Creates a device identifier from all available platform signals.

The identifier is fully stateless and will remain the same after reinstalling or clearing application data.

Table of Contents

  1. Quick start
  2. Usage
  3. Advanced usage
  4. Playground App

30:circle-menu

This is a view group in which you can pass list of menu items and those items will be drawn under circular path.

Code

<com.akki.circlemenu.CircleMenu
android:id="@+id/circle_menu"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:menu_background_color="@array/menu_back_colors"
app:menu_close_duration="300"
app:menu_icons="@array/menus"
app:menu_open_duration="400"
app:menu_orientation="circle"
app:menu_radius="100dp">

Attributes that you can use to customize this view group

app:menu_icons = arrays of vector/png menu items
app:menu_background_color = array of background tint for those menus
app:menu_open_duration = open animation duration of circle
app:menu_close_duration = close animation duration of circle
app:menu_radius= radius of circle
app:menu_orientation="circle|vertical|half_circle|arc_left|arc_right"

31 : PlaceHolderRecyclerView

A RecyclerView that can switch between items and placeholders.
This libs doesn’t force a placehoder type, the developer is responsible for creating one, checkout the sample module and see how simple it is.

You can use the best beloved Shimmer-Android, a Lottie animation or even Property Animation. Use your imagination, it’s your placeholder 😊

Installation

PlaceHolderRecyclerView is distributed through Maven Central, Jcenter and Jitpack.

implementation 'com.github.guilhe:placeholder-recyclerview:${LATEST_VERSION}'

Usage

<com.github.guilhe.views.PlaceHolderRecyclerView
android:id="@+id/my_RecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
class MyItemsPlaceHolderAdapter : ..., PlaceHolderAdapter { ... }private val itemsAdapter = MyItemsAdapter()
...
with(binding.myRecyclerView) {
adapter = itemsAdapter
holdersAdapter = MyItemsPlaceHolderAdapter()
holdersItemDecoration = MyItemsDecoration() //if needed
}
...
viewModel.items.observe(this, { itemsAdapter.update(it) })
viewModel.isLoading.observe(this, { isLoading -> binding.myRecyclerView.toggleHoldersAdapter(isLoading) })

32: sms-confirmation-view

A custom Android’s View implementing all the necessary UI for a typical "enter SMS / PIN code" flow. Can be used for verification of any digit-based codes (SMS verification, PIN verification, etc.).

Supports automatic code retrieval from incoming SMS messages. This feature is implemented using the Consent API.

Here’s the list of available XML attributes:

  • scv_codeLength: expected confirmation code length. Default value = 4
  • scv_symbolsSpacing: gap between individual symbol subviews. Default value = 8dp
  • scv_symbolWidth: width of each individual symbol cell. Default value = 42dp
  • scv_symbolHeight: height of each individual symbol cell. Default value = 48dp
  • scv_symbolTextColor: text color used to draw text within symbol subviews. Default value = ?attr/colorOnSurface or Color.BLACK if such attribute is not defined in your app's theme.
  • scv_symbolTextSize: text size used within symbol subviews. Default value = 22sp
  • scv_symbolBackgroundColor: filler color for symbol subviews. Default value = ?attr/colorSurface or Color.BLACK if such attribute is not defined in your app's theme.
  • scv_symbolBorderColor: color to use for symbol subview's stroke outline. Default value = ?attr/colorSurface or Color.BLACK if such attribute is not defined in your app's theme.
  • scv_symbolBorderWidth: thickness of the stroke used to draw symbol subview's border. Default value = 2dp
  • scv_symbolBorderCornerRadius: corner radius for symbol subview's border. Default value = 2dp

All of these attributes can also be changed programatically (XML customization is the preferred way though), check out the list of available extensions here.

33:RecyclerPickerDialog

A FragmentDialog implemented with RecyclerView that can accept Single or Multiple selections

Installation

RecyclerPickerDialog is distributed through Maven Central, Jcenter and Jitpack.

implementation 'com.github.guilhe:recycler-picker-dialog:${LATEST_VERSION}'

34:Bundler

🎁 Android Intent & Bundle extensions that insert and retrieve values elegantly.

Usage

Intent

intentOf is an expression for creating an Intent using Kotlin DSL style and we can put extras using the putExtra method. Also, we can put extras using the + keyword in front of a key/value pair.

val intent = intentOf {
putExtra("posterId", poster.id) // put a Long type 'posterId' value.
putExtra("posterName" to poster.name) // put a String type 'posterName' value.
putExtra("poster", poster) // put a Parcelable type 'poster' value.
+("id" to userInfo.id) // put a Long type 'id' value.
+("name" to userInfo.nickname) // put a String type 'name' value.

-"name" // remove a String type 'name' value.
}

35: iiVisu

A player/ recorder visualizer with the swipe to seek functionality.

  • maxAmp: Maximum amp that you expected to receive from the mic. Amps with higher than maxAmp are shown as a full height bar. This is calculated automatically in the PlayerVisualizer.
  • barWidth: Width of each bar.
  • spaceBetweenBar: Space between each bar.
  • approximateBarDuration: Defines approximate duration of each bar. The exact duration of each bar is calculated and stored in the barDuration variable.
  • loadedBarPrimeColor: Defines loaded bar color.
  • backgroundBarPrimeColor: Defines background (unloaded) bar color.
  • ampNormalizer: Receives a lambda method for normalizing amps. (for better visualization)
  • addAmp: Used for adding an amp to RecorderVisualizer and its bar gets drawn Immediately.
  • updateTime: Used for updating PlayerVisualizer timeline to specified location. isPlaying param is used for defining behaviour of onFinishedSeeking callback.
  • onStartSeeking : Receives a callback for the action needed to happen when seeking starts.
  • onSeeking : Receives a callback for the action needed to happen during the seeking process and contains current time position of the visualizer.
  • onFinishedSeeking: Receives a callback for the action needed to happen after the seeking finishes and contains time position of the visualizer and a variable for deciding whether you need to resume player after seeking or not.
  • seekOver(amount): Moves visualizer's cursor amount ahead/back and notifies using onAnimateToPositionFinished callback.
  • seekTo(position): Moves visualizer's cursor to position and notifies using onAnimateToPositionFinished callback.
  • onAnimateToPositionFinished: Receives a callback for the action needed to happen after the moving to position finishes and contains time position of the visualizer and a variable for deciding whether you need to resume player after seeking or not.

36: PDFCreatorAndroid

Concept

  • Android has capability to print documents to PDF, this library simplifies those API’s to generate PDF easily.
  • At basic level, API renders Views to PDF. To create A PDF with pages we need to submit views exactly height of one page, any view larges then that that will be trimmed.
  • This library creates pages by adding views to a parent view unitil the next view is about to exceed current page. If next view exceeds current page, that view will be added to new page.

Implementation

  1. PDF creater uses views which can be rendered, So we need to exted an activity in order to create activity.
  2. Create a Empty Activity without any layout and extend it with PDFCreatorActivity. Do not set use setContentView(int resourceId) inside your created activity.
  3. There are 3 abstract methods you have to override.
  4. getHeaderView()
  • This will be header for PDF and will be added to each page. (Use PDFHeaderView if )
  1. getBodyViews()
  • This will return a PDFBody which consist of list of views which can be broken between pages.
  1. onNextClicked()
  • This is a handler method to get callback when user taps on Next.
  1. In onCreate of you activity, you have to call createPDF(String fileName, PDFUtilListener listener). It will generate PDF and give you a PDF file in callback (if success). After receiving callback you can close activity and do whatever you need to do with PDF.
  2. This library also provides PDFUtil.pdfToBitmap(File pdfFile) method to get image preview of all pages of sepcified PDF file.

37: CodeView

Android Library to make it easy to create your CodeEditor or IDE for any programming language even for your programming language, just config the view with your language keywords and other attributes and you can change the CodeView theme in the runtime so it’s made it easy to support any number of themes, and CodeView has AutoComplete and you can customize it with different keywords and tokenizers.

Main Features:

  • Can support any programming language you want
  • Can support AutoComplete and customize it with different tokenizers and design
  • Can support any theme you want and change it in the runtime
  • Syntax Highlighter depend on your patterns so you can support any features like TODO comment
  • Can support errors and warns with different colors and remove them in the runtime
  • Can change highlighter update delay time

38: Spotlight

Overview

A great way to add tutorials to your Android application. Simple to use and highly customizable.

Why use this library over others?

I know there are many libraries available to do achieve a similiar goal. The reason I developed this library was because all the libraries I have used in the past were very limited in feature set and expandibility.

39:Orchestra

🎺 Jetpack Compose compatible libraries using Balloon, ColorPickerView, PowerSpinner.

Usage

BalloonAnchor composable can be used in ConstraintLayout and it receives a constraint reference. In the below, BalloonAnchor references image composable. When clicked the image composable, balloon popup will be shown.

40: Landscapist

Usecase

You can see the use cases of this library in the below repositories.

  • DisneyCompose — 🧸 A demo Disney app using Jetpack Compose and Hilt based on modern Android tech-stacks and MVVM architecture.

Usage

We can request and load images simply using a GlideImage composable function.

GlideImage(
imageModel = imageUrl,
// Crop, Fit, Inside, FillHeight, FillWidth, None
contentScale = ContentScale.Crop,
// shows an image with a circular revealed animation.
circularRevealedEnabled = true,
// shows a placeholder imageAsset when loading.
placeHolder = imageResource(R.drawable.placeholder),
// shows an error imageAsset when the request failed.
error = imageResource(R.drawable.error)
)

Code example

Settle the ToothyProgress somewhere in your XML like this:

<com.goodayapps.widget.ToothyProgress
android:id="@+id/toothyProgress"
android:layout_width="match_parent"
android:layout_height="80dp"
app:progress=".5"
app:progressColor="#ffffff"
app:progressBackgroundColor="#959595"
app:progressWidth="3dp"
app:trackWidth="3dp"
app:trackColor="#959595"
app:strokeLineCapProgress="round"
app:strokeLineCapProgressBackground="square"
app:strokeLineCapTrack="square"
app:progressBackgroundWidth="3dp"
/>

Seekbar-like listener:

toothyProgress.setListener(object : ToothyProgress.Listener {
override fun onProgressChanged(progress: Float, fromUser: Boolean) {
// invokes every time the progress's been changed
}
override fun onStartTrackingTouch(progress: Float) {
// invokes when user touches the view
}
override fun onStopTrackingTouch(progress: Float) {
// invokes when user releases the touch
}
})

42: ClickablePieChart

Usage

val pieChart = PieChart(
slices = provideSlices(), clickListener = null, sliceStartPoint = 0f, sliceWidth = 80f
).build()
chart.setPieChart(pieChart)

Also you can use Kotlin DSL for building your chart.

val pieChartDSL = buildChart {
slices { provideSlices() }
sliceWidth { 80f }
sliceStartPoint { 0f }
clickListener { angle, index ->
// ...
}
}
chart.setPieChart(pieChartDSL)

43: textinputedittext

Usage

XML

<com.thekundankamal.textinputlibrary.TextInputEditText
android:layout_margin="10dp"
android:id="@+id/input_data"
custome:titleText="Title"
custome:hintText="Enter your value"
custome:titleTextSize="4sp"
custome:textSize="6sp"
custome:borderColor="@color/strokeColor"
custome:titleColor="@color/colorPrimaryDark"
custome:hintColor="@color/colorAccent"
custome:textColor="@color/colorPrimary"
custome:borderWidth="10"
android:layout_width="wrap_content"

44: Android-XML-to-PDF-Generator

XML to PDF Generator For Android

Automatically generate PDF file from XML file or Java’s View object in Android

Make PDF from Android layout resources (e.g — R.layout.myLayout,R.id.viewID), Java’s view ids or directly views objects

  • Simple: Extremely simple to use. For using Step Builder Design Patten undernath,here IDE greatly helps developers to complete the steps for creating a PDF from XMLs.
  • Powerful: Customize almost everything.
  • Transparent: It shows logs,success-responses, failure-responses , that’s why developer will nofity any event inside the process.

📖 Table of Contents

➤ Installation

Step 1. Add the JitPack repository to your root build.gradle at the end of repositories

allprojects {
repositories {
// ...
maven { url 'https://jitpack.io' }
}
}

Step 2. Add the dependency

dependencies {
implementation 'com.github.Gkemon:XML-to-PDF-generator:1.0'
}

➤ Getting Started

You can generate PDF from many sources.

  • Layout resources (i.e: R.layout.myLayout)
  • View ids (i.e: R.id.viewID)
  • Java view objects (i.e View,TextView,LinearLayout)

45:material-prefs

⭐ Features

  • Convenient and extensible DSL
  • Flexible appearance settings
  • Unified view on Lollipop and Pre-Lollipop
  • Ability to use custom storage
  • Default prefs values
  • Light and dark themes

🔥 Usage

To start using the library you need to do 3 simple steps:

  1. Add MaterialPreferencesView in your layout
  2. Provide preferences storage:
    3.1 Default storage — DefaultPreferencesStorage
    3.1 Any custom storage which implements the PreferencesStorage interface
  3. Build prefs screen via MaterialPrefs DSL

If you want to use DefaultPreferencesStorage you have to provide initial values through DefaultValuesContainer.

46:Ionalert

A beautiful design Android Alert Dialog, alternative of Sweet Alert Dialog based on KAlertDialog using MaterialComponent

Usage

A basic message:

new IonAlert(this)
.setTitleText("Here's a message!")
.show();

47:CornerCutLinearLayout

Usage

For simple quick usage that covers most use cases, see Basics section below.
For more complex usage section Advanced might be useful.

Basics

Declaration in XML

All widget attributes start with ccll_ prefix. Children's layout attributes starts with layout_ccll_ prefix, respectively. There are plenty of attributes. In order to facilitate their usage, they separated into few categories with start prefix:

  • ccll_ or ccll_corner_cut - global widget attributes
  • ccll_child_ - global child cut attributes
  • ccll_custom_shadow - custom shadow attributes
  • ccll_custom_divider - custom divider attributes

48:magic-modules

What is this?

Read more in the blog post

For large Android projects hosted in mono repos, management for module names might be a real pain, specially when we have lots of moving parts under a structure driven by nested Gradle subprojects.

This experimental plugin attemps to solve that. It parses a project tree like this

This library is inspired by the instagram video button having the same animation, look and feel.

49:SnapTimePicker

Another Material Time Picker for developer who do not like default Material Time Picker that difficult to use for most users

50 : PulseCountDownView

51 : drawroute

DrawRoute wraps Google Directions API (https://developers.google.com/maps/documentation/directions/) using RxJava for Android so developers can download, parse and draw path on the map in very fast and flexible way. Note: You need to generate an API key at Google cloud platform also don’t forget to enable Directions API. Enjoy!

The library contains two main parts.

  • RouteAPI is responsible for sending request to Google’s Direction API and handling the response
  • DrawerAPI is responsible for drawing the path on the map

read more on medium

52 : BottomNavWatson

An Android library that allows, when using the BottomNavigationBar, to consume the multiple back stack workaround provided on Google Samples with one single navigation graph per application.

When to use this library?

When using the BottomNavigationBar, the Navigation component, multiple back stack workaround and one single nav graph per app.

Why would I want to use one single navigation graph per app?

You may don’t want to, but based on our experience, when using Navigation component in conjunction with Safe Args plugin, using nested graphs will make you repeat yourself like a parrot.

53 : AXrLottie

AXrLottie Renders animations
and vectors exported in the bodymovin JSON format
GitHubReleases

54: NetworkX

An easy & handy library to monitor device internet connection status

Features

  • The real-time update on internet connection status changed
  • Lightweight
  • Provide both regular data or Live Data to observe from a fragment or an activity
  • Thread Safe
  • Cancel monitoring Internet connection status any time

How does it work?

Once you start observing internet connection status by calling from your Application class onCreate() method, NetworkX will start monitor internet connection status immediately under a CoroutineScope in a IO Thread for the thread safe purpose. NetworkX provide both traditional data which is Boolean or MutableLiveData so that you can observe the status in a fragment or an activity.

Usages

Start observing internet connection status from your Application class.

To Start observing network status using NetworkX call NetworkX.startObserving from application onCreate method. Otherwise, when try to check if device is connected to the internet or not it will throw an Exception Provide Application reference & NetworkXObservingStrategy to NetworkX .

NetworkXObservingStrategy represent delay time in internet connection status checking Sates are:

  • NetworkXObservingStrategy.LOW
  • NetworkXObservingStrategy.MEDIUM
  • NetworkXObservingStrategy.HIGH
  • NetworkXObservingStrategy.REALTIME

55 AXEmojiView

AXEmojiView is an advanced Android Library
which adds emoji,sticker,… support to your Android application
DemoAPKReleases

Changelogs

1.3.0 :

  • AXEmojiSearchView added!
  • Emoji Database added for emoji search (has 5800+ words).
  • Popup Animation added to AXEmojiPopupLayout.
  • AXEmojiPopupLayout improved
  • Now you can set the Min/Max PopupLayout height.
  • OnViewHeightChanged (int height) added to PopupListener
  • AXEmojiPopup deprecated, use AXEmojiPopupLayout instead. (AXEmojiPopupLayout is more customizable, faster and also it has a better performance)
  • Now AXEmojiView is faster and it has better performance ;)
  • Sample Application Updated.
  • Some improvements & Bugs fixed

56: blitz

blitz is a very lightweight Android library that allows you to set a self-updating string with relative time in TextView in just one line of code.

DOESN’T require using custom TextView.

It will not overheadly update your TextView: e.g. if your relative time is 5 minutes ago then blitz will send update only after one minute, not every second. The same with others time units: hours updates once an hour, etc.

Don’t be scared to use it in your ViewHolders, 'cause blitz won't let anything leak and will take care of the system resources.

Briefly usage:

val myTextView: TextView = ...
val eventTime: Long = ...
// just one line of code and that is it!
myTextView.setTimeAgo(eventTime)

57: LakuePagingButton

LakuePagingButton make it easy to page through when loading a lot of data.

  • When you select a button, you simply get the page you selected and call it.
  • You can customize it for ease of use.

58: sectioned-recycler-view

Sectioned RecyclerView with pinnable (floating/sticky) headers

This library allows you to divide items in your RecyclerView into groups called sections. Each section is represented by an adapter and can have a header. SectionAdapter is similar to Android’s RecyclerView.Adapter, which creates and binds ViewHolders. The header can be pinned, which means, that it will be displayed at the top of the RecyclerView above the corresponding section items. Pinned headers change automatically while scrolling or after dataset changes. You can also customize item swiping behavior for each section individually.

59:android-form-validation

Yet another UI form validation library for Android. It is highly customizable and easy to use. This library will works with TextView, EditText, AppCompatEditText, TextInputEditText, TextInputLayout and CheckBox. This library is designed in such a way that Its easy to add support for new widgets and add new rules.

Gradle dependency:

implementation 'com.github.dhaval2404:android-form-validation:1.0'

60: viewpagerindicator

Use case of ViewPagerIndicator

Various Indicator Styles and various Indicator Slide mode was supported now.It’s also support drawable indicator and custom indicator.

61 : PowerPermission

Introducation

PowerPermission is a library to simplify process of demanding RuntimePermission.

You find an example application in this Repo or downloading directly here. Here are some different points compare with other libraries:

  • support asking permissions in AppCompatActivity and Fragment(include ChildFragment)
  • support custom rational view after user refuse permission
  • support ability to choose permissions to display rational views
  • support different interface (RxJava2,RxJava3,Coroutines,LiveData)

62:KeyboardStateEvents

Get notified through LiveData when Keyboard is open or closed

Installation

KeyboardStateEvents is distributed through Maven Central, Jcenter and Jitpack.

implementation 'com.github.guilhe:keyboard-state-events:${LATEST_VERSION}'

63 : DragView

64 : CustomDateTimePicker

CustomDateTimePicker

CustomDateTimePicker is a A simple Android library for displaying a DateAndTimePicker with From and To ranges as a custom dialog. This custom picker allow user to pick both date and time in same dialog at same time.

65:Flat-Dialog-Android

📱Android Library to implement beautiful dialogs in android apps easily

How to use

final FlatDialog flatDialog = new FlatDialog(ExempleActivity.this);
flatDialog.setTitle("Login")
.setSubtitle("write your profile info here")
.setFirstTextFieldHint("email")
.setSecondTextFieldHint("password")
.setFirstButtonText("CONNECT")
.setSecondButtonText("CANCEL")
.withFirstButtonListner(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(ExempleActivity.this, flatDialog.getFirstTextField(), Toast.LENGTH_SHORT).show();
}
})
.withSecondButtonListner(new View.OnClickListener() {
@Override
public void onClick(View view) {
flatDialog.dismiss();
}
})
.show();

66:ActivityCircularReveal

A library for starting & finishing Android activities with a circular reveal animation

A library for starting & finishing Android activities with a circular animation.

Code based on & modified from this article: https://android.jlelse.eu/a-little-thing-that-matter-how-to-reveal-an-activity-with-circular-revelation-d94f9bfcae28

Usable in Lollipop 5.0+ projects. Circular reveal only working in Lollipop 5.1+.

Usage

In the activity you are starting another one from:

Kotlin

CircularReveal.presentActivity(CircularReveal.Builder(
this,
viewClicked,
Intent(this, OtherActivity::class.java),
1000
))

67:ElegantDialog

A beautiful, customizable and interactive dialog for Android written in Kotlin/Java 😍

Features

Here are some fancy stuff:

  • Top background customization
  • Bottom background customization
  • Custom layout(RecyclerView etc)
  • Custom icons(buttons and title)
  • Color customizations (Icons and Text)
  • Text customizations (Buttons, title and content)
  • Custom fonts (title and content)
  • Image loading using Glide or Picasso

68:BottomDrawer

BottomSheet with animations https://medium.com/@heyalex/bottom-sh…

You can make your own HandleView and implement TranslationUpdater interface for getting callbacks. Or you can use defined handle views by library like PlainHandleView or PullHandleView (check sample app).

After customizing theme and choosing handle view, you need to override configureBottomDrawer method and pass theme, handle view to BottomDrawerFragment.

So the following example will make Google Tasks fragment like on main preview:

class GoogleTaskExampleDialog : BottomDrawerFragment() {override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.your_layout, container, false)
}
override fun configureBottomDrawer(): BottomDrawerDialog {
return BottomDrawerDialog.build(context!!) {
theme = R.style.Plain
//configure handle view
handleView = PlainHandleView(context).apply {
val widthHandle =
resources.getDimensionPixelSize(R.dimen.bottom_sheet_handle_width)
val heightHandle =
resources.getDimensionPixelSize(R.dimen.bottom_sheet_handle_height)
val params =
FrameLayout.LayoutParams(widthHandle, heightHandle, Gravity.CENTER_HORIZONTAL)
params.topMargin =
resources.getDimensionPixelSize(R.dimen.bottom_sheet_handle_top_margin)
layoutParams = params
}
}
}
}

69:sonloader-library

📱 Android library to open JSON from assets

Usage

Put the json file in the assets package on the android project (src / main / assets / filename.json). For more information, see Where do I place the ‘assets’ folder in Android Studio?

Get JSON as a string:

JSONLoader.with(getApplicationContext())
.fileName("filename.json")
.get(new StringLoaderListener() {
@Override
public void onResponse(String response) {
// response as String
}
@Override
public void onFailure(IOException error) {
// error
}
});

Get JSON as JSON Object:

JSONLoader.with(getApplicationContext())
.fileName("filename.json")
.getAsJSONObject(new JSONObjectLoaderListener() {
@Override
public void onResponse(JSONObject response) {
// response as JSONObject
}
@Override
public void onFailure(Exception error) {
// error
}
});

Get JSON as JSON Array:

JSONLoader.with(getApplicationContext())
.fileName("filename.json")
.getAsJSONArray(new JSONArrayLoaderListener() {
@Override
public void onResponse(JSONArray response) {
// response ad JSONArray
}
@Override
public void onFailure(Exception error) {
// error
}
});

70:View404

🍀 Easy way to implement 404 not found screens for android.

Use Simple Custom Layout

View404 supports Custom Layout Class for More Simple!

If you want to dismiss ‘not found’ View on your ViewGroup,

if(view404 != null) {
view404?.dismiss(R.anim.view404_fade_out_default)
view404 = null
}

71:android-color-wheel

ColorWheel

ColorWheel is a library for Android that provides HSV Color Wheel and Linear Gradient Seek Bar UI elements that can be used to pick ARGB color.

Requirements

The minimal required Android API version is 19 (Android 4.4).

Getting Started

To start using the views just add ColorWheel or GradientSeekBar to your xml layout file:

<com.apandroid.colorwheel.ColorWheel
android:id="@+id/colorWheel"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.apandroid.colorwheel.gradientseekbar.GradientSeekBar
android:id="@+id/gradientSeekBar"
android:layout_width="match_parent"
android:layout_height="match_parent" />

72:WrapContentViewPager

Wrap Content View Pager Library For Android. By using this, your view pager will be automatically wrap it’s height according to the current page.

WrapContentViewPager Details

By using this your viewpager can be wraped according to the current selected Fragment’s view. You don’t need to write extra code. Just follow the sample app steps and enjoy :)

73:earthquake

🌐 Earthquake app with USGS Earthquakes API https://www.uplabs.com/posts/earthquake

Requirements

  • Android Studio 3.5.1
  • JDK 8
  • Android SDK 29
  • Supports API Level +21
  • Material Components 1.1.0-beta01

Highlights

Demo application is available in Release

Libraries & Dependencies

Credit

74:SurveyKit

Android library to create beautiful surveys (aligned with ResearchKit on iOS)

SurveyKit: Create beautiful surveys on Android (inspired by ResearchKit Surveys on iOS)

Do you want to display a questionnaire to get the opinion of your users? A survey for a medical trial? A series of instructions in a manual-like style?
SurveyKit is an Android library that allows you to create exactly that.

Thematically it is built to provide a feeling of a professional research survey. The library aims to be visually clean, lean and easily configurable. We aim to keep the functionality close to iOS ResearchKit Surveys.

This is an early version and work in progress. Do not hesitate to give feedback, ideas or improvements via an issue.

Overview: Creating Research Surveys

75:androidx-auto-scroll-view-pager

Auto scroll viewpager working with Androidx libraries

Androidx Auto Scroll ViewPager

  • ViewPager which can auto scrolling, cycling, decelerating.
  • ViewPager which can be slided manually in parent ViewPager.
  • ViewPager which is compatible with AndroidX library.
  • ViewPager which is written in Kotlin and be supported for a long time.
  • setInterval(long) set auto scroll time in milliseconds, default is 1500.
  • setDirection(Direction) set auto scroll direction, default is Direction.RIGHT.
  • setCycle(boolean) set whether automatic cycle when auto scroll reaching the last or first item, default is true.
  • setScrollDurationFactor(double) set the factor by which the duration of sliding animation will change.
  • setSlideBorderMode(SlideBorderMode) set how to process when sliding at the last or first item, default is SlideBorderMode.NONE.
  • setStopScrollWhenTouch(boolean) set whether stop auto scroll when touching, default is true.
  • setBorderAnimation(boolean) set whether animating when auto scroll at the last or first item, default is true.
  • You cannot combine with ViewPagerIndicator if setCycle(true).

76:parse-android-test-app

Random Notes

About

Test Android application for Parse test server.

Features

  • managing the simple entity (Note);
  • sync data with the server;
  • restore data from the server;
  • sign up from the application with email address or Facebook account;
  • sign in to the server with email or Facebook.

Not handling exceptions

  • Internet connection unavailable status;
  • Parse Server connection unavailable status.

Facebook auth

Resources

77:IndicatorDecorator

🌝🌚🌚Indicator decorator is an indicator that can be used in ViewPager2 and RecyclerView.

What’s New in 0.1.1? 🎉

  • [Feature] Indicators to overlap. UseisOverlap (#2)
  • [Feature] Indicator background setting method added (#4)

64:DotsIndicatorWithoutViewpager

Paging dots indicator to use it without viewpager, you can use it with swipe gestures, buttons, etc..

Usage

Layout

Simple usage

<com.mazenrashed.dotsindicator.DotsIndicator  
android:id="@+id/dots_indicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:dots_count="4"
/>

More options

<com.mazenrashed.dotsindicator.DotsIndicator  
android:id="@+id/dots_indicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:dot_height="7dp"
app:dot_width="7dp"
app:dots_count="4"
app:first_dot_height="14dp"
app:first_dot_width="14dp"
app:first_selected_dot_resource="@drawable/ic_home_white_24dp"
app:first_unselected_dot_resource="@drawable/ic_home_gray_24dp"
app:selected_dot_resource="@drawable/circle_white"
app:unselected_dot_resource="@drawable/circle_gray"
app:margins_between_dots="17dp"
app:selected_dot_scale_factor="1.4"
/>

Set selection

dotsIndicator.setDotSelection(position)

Select listener

dotsIndicator.onSelectListener = {  
Toast.makeText(this, "page $it selected", Toast.LENGTH_SHORT).show()
}

Set or change dots count

dotsIndicator.initDots(dotsCount)

78:dialogPlus

An Android library that lets you create a custom dialog in a simple and easy way ,with different types which you can use easily without any boilerplate code and with a great flexibility to fit your desired user interface.

Many types of dialogs provided: Message, Confirmation Dialog(a yes/no dialog), Code Entry, Success, Error, Multi Options, List, Rating, Year Picker, Month Picker , Day Picker, Month/Year Picker, Month/Day Picker, Date Picker(Fully functional and can accept minimum date or maximum date), and Localized Country Picker Dialog(32 Languages supported).

2.1 MESSAGE:

new DialogPlusBuilder("Message Dialog", "message dialog_plus sample\n Welcome Back")
//@ColorRes int positiveBackground, @ColorRes int negativeColorRes, @ColorRes int headerBgColor
.setTexts("alright")
.setBackgrounds(R.color.colorPrimary, R.color.colorAccent)
.buildMessageDialog(new DialogListener() {//implement functions
})
.show(this.getSupportFragmentManager(), "Message Dialog");

79:VSpot

A nice focus view intro for your app. Focus a specific view on first time launch

This library allows to show intro of your app or a specific view that you want to high-light when you add new features to app.

Sample Screen

Sample usage in your activity:
new VSpotView.Builder(this)
.setTitle("Spoti Title Text")
.setContentText("Spoti Description Text\n .....Spoti Description Text\n .....Spoti Description Text .....")
.setGravity(VSpotView.Gravity.AUTO) //optional
.setDismissType(VSpotView.DismissType.outSide) //optional - default dismissable by TargetView
.setTargetView(view)
.setContentTextSize(12)//optional
.setTitleTextSize(14)//optional
.build()
.show();

80:android-upi-payment

UpiPayment Library for Android (AndroidX)

A UpiPayment library for integrating upi payments using existing upi supported apps like googple pay, bhim etc.

An android library for integrating payment using existing upi apps.

Kotlin

// note: always create new instance of PaymentDetail for every new payment/order
var payment = PaymentDetail(
vpa="wangsunhakhun@oksbi",
name = "Wangsun Hakhun",
payeeMerchantCode = "", // only if you have merchantCode else pass empty string
txnRefId = "", // if you pass empty string we will generate txnRefId for you
description = "description",
amount = "2.00") // format of amount should be in decimal format x.x (eg 530.00), max. 2 decimal places
// note: always create new instance of UpiPayment for every new payment/order
UpiPayment(this)
.setPaymentDetail(payment)
.setUpiApps(UpiPayment.UPI_APPS)
.setCallBackListener(object : UpiPayment.OnUpiPaymentListener{
override fun onSubmitted(data: TransactionDetails) {
//transaction pending: use data to get TransactionDetails
}
override fun onSuccess(data: TransactionDetails) {
//transaction success: use data to get TransactionDetails
}
override fun onError(message: String) {
//user backpress or transaction failed
}
}).pay()

81:AutoLinkTextViewV2

AutoLinkTextView is a TextView that supports automatic detection of Hashtags (#), Mentions (@) , URLs (http://), Phone Nubers and emails

AutoLinkTextViewV2 is the new version of the AutoLinkTextView.

The main differences between the old and new version are

  • Fully migration to Kotlin
  • Added several new features
  • Some improvements and fixes

It supports automatic detection and click handling for

  • Hashtags (#)
  • Mentions (@)
  • URLs (http://)
  • Phone Numbers
  • Emails
  • Custom Regex

82:FormInputs

Sample Usage!

Spinner

<com.omarshehe.forminputkotlin.FormInputSpinner
android:id="@+id/gender"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:form_hint="Select gender"
app:form_array="@array/array_gender"
app:form_isMandatory="true"
app:form_label="Gender"
app:form_showValidIcon="false"/>

Auto Complete

<com.omarshehe.forminputkotlin.FormInputAutoComplete
android:id="@+id/country"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:form_array="@array/array_country"
app:form_height="40dp"
app:form_hint="Your country"
app:form_inputType="text"
app:form_isMandatory="true"
app:form_label="Country" />

83:ExpandableLayout

🦚 An expandable layout that shows a two-level layout with an indicator.

ExpandableLayout

Here is a basic example of implementing ExpandableLayout.

<com.skydoves.expandablelayout.ExpandableLayout
android:id="@+id/expandable"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
app:expandable_duration="300"
app:expandable_isExpanded="false" // expand the second layout initially or not.
app:expandable_parentLayout="@layout/layout_parent" // sets the parent layout.
app:expandable_secondLayout="@layout/layout_second" // sets the second layout.
app:expandable_showSpinner="true" // shows the spinner or not.
app:expandable_spinner="@drawable/ic_arrow_down" // sets the spinner's drawable.
app:expandable_spinner_animate="true" // animates the spinner when expanding or collapse.
app:expandable_spinner_margin="14dp" // sets the margin to the spinner.
app:expandable_spinner_size="32dp" // sets the spinner size.
/>

Create using builder class

We can create an instance of ExpandableLayout using the builder class.

val myExpandableLayout = expandableLayout(context) {
setParentLayoutResource(R.layout.layout_parent)
setSecondLayoutResource(R.layout.layout_second)
setShowSpinner(true)
setSpinnerAnimate(true)
setSpinnerMargin(12f)
setSpinnerRotation(90)
setDuration(200)
setO

84:rtable

RecyclerView that works as table, with pagination and table headers.

Component implements a recyclerview, shows table headers and also has pagination.

Screenshots

How to use

Add in repository section (project gradle file)

maven { url "https://jitpack.io" }

Component only works with androidx, add the following libs:

implementation "androidx.appcompat:appcompat:1.0.0-alpha3"
implementation "androidx.recyclerview:recyclerview:1.0.0-alpha3"
implementation 'com.github.viktor:rtable:1.0.0'

Add the xml element in your activity layout:

<com.viktor.rtable.RecyclerViewTable
android:id="@+id/grid_recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>

85 fancyDialog

Simple Alert Dialog With Fancy Style

How to used

val dialog = FancyDialogBuilder(this, R.style.CustomDialog)
.withImageIcon(R.drawable.ic_new_message)
.withTitleTypeFace(R.font.roboto_bold)
.withSubTitleTypeFace(R.font.roboto_medium)
.withActionPositiveTypeFace(R.font.roboto_bold)
.withActionNegativeTypeFace(R.font.roboto_bold)
.withTextGravity(CENTER)
.withPanelGravity(END)
.withTitle(R.string.dialog_text_title)
.withSubTitle(R.string.dialog_text_message)
.withPositive(R.string.dialog_action_yes) { view, dialog -> dialog.dismiss() }
dialog.show()

86 ColorPickerView

ColorPickerView implements getting HSV colors, ARGB values, Hex color codes from
any image drawables or your gallery pictures by tapping on the desired color.
Supports alpha & brightness slider bar, dialog, and auto saving & restoring selected data.

Table of Contents

2. AlphaSlideBar
3. BrightnessSlideBar
4. ColorPickerDialog
5. FlagView
6. AlphaTileView
7. ColorPickerView Methods
8. Other Libraries

You have followed the group:

https://android-arsenal.com

I created a group of Android Developers Android and Kotlin Droidcon Github library. If you have any questions, you can ask. You can join in the App Telegram. Now join Android Developers And Kotlin Droidcon

https://www.facebook.com/groups/883546485084033

--

--