{"id":16558646,"url":"https://github.com/robertlevonyan/android-kex","last_synced_at":"2025-03-21T11:31:19.570Z","repository":{"id":108905142,"uuid":"128176995","full_name":"robertlevonyan/android-kex","owner":"robertlevonyan","description":"Extensions for Kotlin. Use the power of Kotlin to make your code smaller and beautiful.","archived":true,"fork":false,"pushed_at":"2020-10-04T11:25:41.000Z","size":193,"stargazers_count":36,"open_issues_count":1,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-18T00:43:47.721Z","etag":null,"topics":["android","android-app","android-application","android-architecture","android-development","android-library","android-sdk","android-studio","android-ui","androidstudio","kotlin","kotlin-android","kotlin-android-extensions","kotlin-extensions","kotlin-library"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/robertlevonyan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-04-05T08:10:56.000Z","updated_at":"2025-03-11T06:35:29.000Z","dependencies_parsed_at":"2023-03-19T17:34:50.934Z","dependency_job_id":null,"html_url":"https://github.com/robertlevonyan/android-kex","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertlevonyan%2Fandroid-kex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertlevonyan%2Fandroid-kex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertlevonyan%2Fandroid-kex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertlevonyan%2Fandroid-kex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robertlevonyan","download_url":"https://codeload.github.com/robertlevonyan/android-kex/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244790666,"owners_count":20510782,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","android-app","android-application","android-architecture","android-development","android-library","android-sdk","android-studio","android-ui","androidstudio","kotlin","kotlin-android","kotlin-android-extensions","kotlin-extensions","kotlin-library"],"created_at":"2024-10-11T20:23:19.301Z","updated_at":"2025-03-21T11:31:19.561Z","avatar_url":"https://github.com/robertlevonyan.png","language":"Kotlin","readme":"# AndroidKEx\n\n# NOTE! THIS LIBRARY IS DEPRECATED AND WILL NOT BE MAINTAINED. ONLY UPDATES FOR CRITICAL ISSUES WILL BE MADE. USE ANDROID'S KTX INSTEAD\n\n| Extensions for Kotlin. Use the power of Kotlin to make your code smaller and beautiful. |\u003cimg src=\"https://github.com/robertlevonyan/AndroidKEx/blob/master/Pictures/kex.png?raw=true\"  width=\"500\" /\u003e|\n|----------------------------------------------------------------------------------------------|-----------|\n\n[![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-AndroidKEx-yellow.svg?style=flat-square)](https://android-arsenal.com/details/1/7001)\n[![API](https://img.shields.io/badge/API-14%2B-yellow.svg?style=flat-square)](https://android-arsenal.com/api?level=14)\n[ ![Download](https://api.bintray.com/packages/robertlevonyan/maven/AndroidKEx/images/download.svg) ](https://bintray.com/robertlevonyan/maven/AndroidKEx/_latestVersion)\n\n## Setup\n\n#### Gradle:\n\nAdd following line of code to your module(app) level gradle file\n\n```groovy\n    implementation 'com.robertlevonyan.components:AndroidKEx:2.0.0'\n```\n\n#### Maven:\n\n```xml\n  \u003cdependency\u003e\n    \u003cgroupId\u003ecom.robertlevonyan.components\u003c/groupId\u003e\n    \u003cartifactId\u003eAndroidKEx\u003c/artifactId\u003e\n    \u003cversion\u003e2.0.0\u003c/version\u003e\n    \u003ctype\u003epom\u003c/type\u003e\n  \u003c/dependency\u003e\n```\n\n## Usage\n\n### Context extensions\n\n```kotlin\n  // This extensions are also work in Activities, Fragments, Dialogs and DialogFragments\n  \n  val myColor = color(R.color.my_color_res)                     // get any color from your recources\n  val myString = string(R.string.my_string_res)                 // get any String from your recources\n  val myDimen = dimen(R.dimen.my_dimen_res)                     // get any dimension value from your recources as Float\n  val myDimenInt = dimenInt(R.dimen.my_dimen_res)               // get any dimension value from your recources as Int\n  val myInt = int(R.dimen.my_int_res)                           // get any int value from your recources\n  val myFont = font(R.dimen.my_font_res)                        // get any font value from your recources\n  val myStringArray = stringArray(R.array.my_string_array_res)  // get any string array from your recources\n  val myIntArray = intArray(R.array.my_int_array_res)           // get any int array from your recources\n  val myDrawable = drawable(R.drawable.my_drawable_name)        // get any drawable from your recources\n  val myDrawable = drawable(\"my_drawable_name\", \"com.my.app\")   // get any drawable from your recources by String name\n  \n  // Show toast with context, second parameter is optional, default value is Toast.LENGTH_SHORT\n  toast(\"Some message\", Toast.LENGTH_LONG)\n  toast(R.string.message_res)\n```\n\n### Activity extensions\n\n```kotlin\n  /* Replace a fragment in container, optional parameters\n    addToBackStack (default value is false)\n    backStackName (default value is \"\")\n    inAnimationRes (default value is 0)\n    outAnimationRes (default value is 0)\n  */\n  replaceFragment(fragment, R.id.container)\n  \n  /* Add a fragment in container, optional parameters\n    addToBackStack (default value is false)\n    backStackName (default value is \"\")\n    inAnimationRes (default value is 0)\n    outAnimationRes (default value is 0)\n  */\n  addFragment(fragment, R.id.container)\n  \n  /* Start new activity, optional parameters\n    extras (default value is Bundle())\n    overrideTransitions (default value is false)\n    enterAnimation (default value is 0)\n    exitAnimation (default value is 0)\n  */\n  startActivity(activityToOpen)\n  \n  /* Start new activity for result, optional parameters\n    extras (default value is Bundle())\n    overrideTransitions (default value is false)\n    enterAnimation (default value is 0)\n    exitAnimation (default value is 0)\n  */\n  startActivityForResult(activityToOpen, requestCode)\n  \n  /* Start new activity with transitions, optional parameter\n    extras (default value is Bundle())\n  */\n  startActivityWithTransitions(activityToOpen, options)\n  \n  /* Start new activity for result with transitions, optional parameter\n    extras (default value is Bundle())\n  */\n  startActivityForResultWithTransitions(activityToOpen, requestCode, options)\n  \n  /* Start new activity for result with transitions, optional parameter\n    requestCode (default value is 0)\n    extras (default value is Bundle())\n  */\n  startActivityFromFragmentWithTransitions(activityToOpen, fragmentFrom, options)\n  \n  /* Start new activity for result with transitions, optional parameter\n    extras (default value is Bundle())\n  */\n  startActivityFromFragmentWithResult(activityToOpen, fragmentFrom, requestCode)\n  \n  // Pop fragment in back stack\n  popFragment()\n  popFragment(name, flags)\n  popFragment(id, flags)\n  \n  //Remove fragment\n  removeFragment(fragment)\n  removeFragmentByTag(tag)\n  removeFragmentById(R.id.my_fragment_id)\n  \n  // Works on API19+\n  makeTranslucentStatusBar()\n  \n  // Works on API23+\n  lightStatusBar()\n  \n  // Works on API19+, removes the previous\n  makeNormalStatusBar()\n  \n  // Works on API19+\n  makeTranslucentNavigationBar()\n  \n  // Works on API26+\n  lightNavigation()\n  \n  // Works on API19+, removes the previous\n  makeNormalNavigationBar()\n```\n\n### Fragment extensions\n\n```kotlin\n  /* Start new activity for result from fragment, optional parameters\n    extras (default value is Bundle())\n    overrideTransitions (default value is false)\n    enterAnimation (default value is 0)\n    exitAnimation (default value is 0)\n  */\n  startActivityForResult(activityToOpen, requestCode)\n  \n  /* Start new activity for result with transitions, optional parameter\n    extras (default value is Bundle())\n  */\n  startActivityFromFragmentWithResult(activityToOpen, fragmentFrom, requestCode)\n  \n  // Pop fragment in back stack\n  popFragment()\n  popFragment(name, flags)\n  popFragment(id, flags)\n  \n  //Remove fragment\n  removeFragment(fragment)\n  removeFragmentByTag(tag)\n  removeFragmentById(R.id.my_fragment_id)\n \n```\n\n### Animator extensions\n\n```kotlin\n  val animator = ValueAnimator.ofFloat(1f, 10f)\n  \n  animator.onStart { ... }\n  animator.onEnd { ... }\n  animator.onCancel { ... }\n  animator.onRepeat { ... }\n  animator.onResume { ... }                                 // API 19+\n  animator.onPause { ... }                                  // API 19+\n  \n  animator.addListener(\n    { /* onStart */},\n    { /* onEnd */},\n    { /* onCancel */},\n    { /* onRepeat */},\n  )\n  \n  animator.addPauseListener(\n    { /* onResume */ },\n    { /* onPause */ }\n  )\n  \n  val transition = Explode()\n  \n  transition.onTransitionStart { ... }\n  transition.onTransitionEnd { ... }\n  transition.onTransitionResume { ... }\n  transition.onTransitionPause { ... }\n  transition.onTransitionCancel { ... }\n  \n  transition.addListener(\n    { /* onTransitionStart */ },\n    { /* onTransitionEnd */ },\n    { /* onTransitionResume */ },\n    { /* onTransitionPause */ },\n    { /* onTransitionCancel */ }\n  )\n```\n\n### Collections extensions\n\n```kotlin\n  val list = ...\n  \n  val randomItem = list.randomItem()                        // Get random item from any List\n```\n\n### Calendar extensions\n\n```kotlin\n  val calendar = ...\n  \n  calendar.getDayOfWeek()\n  calendar.getDayOfMonth()\n  calendar.getDayOfWeekInMonth()\n  calendar.getDayOfYear()\n  calendar.getWeekOfMonth()\n  calendar.getHourOfDay()\n  calendar.getYear()\n  calendar.getHour()\n  calendar.getMinute()\n  calendar.getSecond()\n  calendar.getMillisecond()\n```\n\n### File extensions\n\n```kotlin\n    uri.realPath(context)\n    \n    string.toUri()\n    \n    file.toUri()\n    file.copyInputStreamToFile(inputStream)\n```\n\n### Image extensions\n\n```kotlin\n   val bitmap = ...\n   \n   bitmap.rotate(degrees)\n   bitmap.toUriJpeg(context, title, description)\n   bitmap.toUriPng(context, title, description)\n   bitmap.toUriWebp(context, title, description)\n   bitmap.makeCircle()\n   bitmap.toDrawable(context)\n   uri.toBitmap(context)\n  \n   val drawable = ...\n   \n   drawable.toBitmap()\n   uri.toDrawable(context)\n   \n   val imageView = ...\n  \n   imageView set R.drawable.image_res\n   imageView set drawable\n   imageView set bitmap\n   imageView set icon                                                       // API 23+\n   imageView set uri\n```\n\n### Text extensions\n\n```kotlin\n   val editText = ...\n   \n   editText.afterTextChanged { editable -\u003e ... }\n   editText.beforTextChanged { charSequence, start, count, after -\u003e ... }\n   editText.onTextChanged { charSequence, start, before, count -\u003e ... }\n   editText.focus()                                                      // focus on this EditText\n   editText.requestFocusAndKeyboard()                                    // focus and open keyboard\n   editText.clearFocusAndKeyboard()                                      // remove focus and close keyboard\n   \n   val textView = ...\n   \n   textView set R.string.some_text_resource\n   textView set someString\n   textView set someSpannable\n```\n\n### View extensions\n\n```kotlin\n   val view = ...\n   \n   view.dismissKeyboard()\n   \n   /* Create snackbar on view, optional parameters\n       duration (default value is Snackbar.LENGTH_SHORT)\n       actionName (default value is \")\n       actionTextColor (default value is 0)\n       action (default value is {})\n   */\n   view.snackbar(someStringMessage)\n   \n   /*Animate different properties of view, optional parameters\n       duration (default value is 300)\n       repeatCount (default value is 0)\n       repeatMode (default value is 0)\n   */\n   view.animateTranslationX(floatArrayOf( ... ))\n   view.animateTranslationY(floatArrayOf( ... ))\n   view.animateTranslationZ(floatArrayOf( ... ))            // API 21+\n   view.animateScaleX(floatArrayOf( ... ))\n   view.animateScaleY(floatArrayOf( ... ))\n   view.animateAlpha(floatArrayOf( ... ))\n   view.animateRotation(floatArrayOf( ... ))\n   view.animateRotationX(floatArrayOf( ... ))\n   view.animateRotationY(floatArrayOf( ... ))\n   view.animateX(floatArrayOf( ... ))\n   view.animateY(floatArrayOf( ... ))\n   view.animateZ(floatArrayOf( ... ))                       // API 21+\n   \n   \n   val animator = view.translationXAnimator(floatArrayOf( ... ))\n   val animator = view.translationYAnimator(floatArrayOf( ... ))\n   val animator = view.translationZAnimator(floatArrayOf( ... ))            // API 21+\n   val animator = view.scaleXAnimator(floatArrayOf( ... ))\n   val animator = view.scaleYAnimator(floatArrayOf( ... ))\n   val animator = view.alphaAnimator(floatArrayOf( ... ))\n   val animator = view.rotationAnimator(floatArrayOf( ... ))\n   val animator = view.rotationXAnimator(floatArrayOf( ... ))\n   val animator = view.rotationYAnimator(floatArrayOf( ... ))\n   val animator = view.xAnimator(floatArrayOf( ... ))\n   val animator = view.yAnimator(floatArrayOf( ... ))\n   val animator = view.zAnimator(floatArrayOf( ... ))                       // API 21+\n   \n   view width 150                           // set view width\n   view hesght 100                          // set view height\n   \n   view visible flase                       // show or hide view\n   \n   val linearLayout = ...                   // or some other ViewGroup\n   \n   linearLayout inflate R.layout.some_layout_to_inflate\n   linearLayout.forEach { childView -\u003e }\n   linearLayout.forEachIndexed { childView, index -\u003e }\n   linearLayout.isEmpty()\n   linearLayout.isNotEmpty()\n   \n   val progressBar = ...\n   \n   progressBar.loaderColor(colorInt)\n   \n   val checkBox = ...                       // or some other compund button\n   \n   checkBox.onChecked { view, isChecked -\u003e ... }\n   \n   val bottomSheetBehavior = ...\n   \n   bottomSheetBehavior.onSlide { bottomSheetView, slideOffset -\u003e ... }\n   bottomSheetBehavior.onStateChanged { bottomSheetView, newState -\u003e ... }\n```\n\n### Dynamic layout extensions\n\n```kotlin\n   //Creating a spinner with single function\n   val spinner = ...\n   \n   spinner.create(\n      R.layout.spinner_item,\n      R.id.text_view_id,\n      items,                                    // array or mutable list\n      onItemSelected = { item, postion -\u003e ... }\n   )\n   \n   //Creating an AutoCompleteTextView with single function\n   val autoCompleteTextView = ...\n   \n   autoCompleteTextView.create(\n      R.layout.auto_complete_text_item,\n      R.id.text_view_id,\n      items,                                    // array or mutable list\n      onItemSelected = { textString, postion -\u003e ... }\n   )\n   \n   //Creating a ListView with single function\n   val listView = ...\n   \n   listView.create(\n      R.layout.list_item,\n      items,                                    // array or mutable list\n      creator = { item, position -\u003e ... },      // write to list binding logic inside this lambda\n      itemClick = { item, position -\u003e ... },\n      itemLongClick = { item, position -\u003e ... }\n   )\n   \n   //Creating a RecyclerView with single function\n   val recyclerView = ...\n   \n   recyclerView.create(\n      R.layout.recycler_list_item,\n      items,                                    // array or mutable list\n      linearLayoutManager,                      // or some other layout manager\n      creator = { item, position -\u003e ... },      // write to list binding logic inside this lambda\n      itemClick = { item, position -\u003e ... },\n      itemLongClick = { item, position -\u003e ... },\n      onScrollTop = { ... },\n      onScrollBottom = { ... }\n   )\n   \n   //Creating a typed RecyclerView with single function\n   recyclerView.createTypedList(\n      mapOf(type1 to R.layout.type1, ...),\n      items,                                    // array or mutable list\n      linearLayoutManager,                      // or some other layout manager\n      itemTypes = { position -\u003e ... }           // declare types of items\n      creator = { item, position, type -\u003e ... },      // write to list binding logic inside this lambda\n      itemClick = { item, position -\u003e ... },\n      itemLongClick = { item, position -\u003e ... },\n      onScrollTop = { ... },\n      onScrollBottom = { ... }\n   )\n   \n   recyclerView.addItem(item)\n   recyclerView.updateItem(item, position)\n   recyclerView.removeItem(position)\n   \n   //Creating a ViewPager with single function\n   val viewPager = ...\n   \n   viewPager.createFragmentPager(\n      items,                                    // array or mutable list of Fragments\n      supportFragmentManager\n   )\n   \n   viewPager.onPageScrollStateChanged { state -\u003e ... }\n   viewPager.onPageScrolled { position, positionOffset, positionOffsetPixels -\u003e ... }\n   viewPager.onPageSelected { position -\u003e ... }\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobertlevonyan%2Fandroid-kex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobertlevonyan%2Fandroid-kex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobertlevonyan%2Fandroid-kex/lists"}