diff --git a/app/build.gradle b/app/build.gradle
index 47fc325..ede96f6 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,11 +8,11 @@ android {
compileSdkVersion 28
defaultConfig {
applicationId "me.ibrahimsn.nicebottombar"
- minSdkVersion 22
+ minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
@@ -25,12 +25,12 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
- implementation 'com.android.support:appcompat-v7:28.0.0'
- implementation 'com.android.support.constraint:constraint-layout:1.1.3'
+ implementation 'androidx.appcompat:appcompat:1.0.2'
+ implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation project(":lib")
testImplementation 'junit:junit:4.12'
- androidTestImplementation 'com.android.support.test:runner:1.0.2'
- androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+ androidTestImplementation 'androidx.test:runner:1.2.0'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
diff --git a/app/src/main/java/me/ibrahimsn/nicebottombar/MainActivity.kt b/app/src/main/java/me/ibrahimsn/nicebottombar/MainActivity.kt
index 94f4cb3..a1533ce 100644
--- a/app/src/main/java/me/ibrahimsn/nicebottombar/MainActivity.kt
+++ b/app/src/main/java/me/ibrahimsn/nicebottombar/MainActivity.kt
@@ -1,6 +1,6 @@
package me.ibrahimsn.nicebottombar
-import android.support.v7.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import kotlinx.android.synthetic.main.activity_main.*
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index d00d4e6..afd7fe0 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -10,6 +10,7 @@
android:id="@+id/bottomBar"
android:layout_width="match_parent"
android:layout_height="60dp"
+ app:indicatorGravity="bottom"
android:layout_gravity="bottom"
app:menu="@menu/bottom_menu"
app:itemFontFamily="@font/quicksand"
diff --git a/build.gradle b/build.gradle
index 5f6ec62..b39ac10 100644
--- a/build.gradle
+++ b/build.gradle
@@ -8,7 +8,7 @@ buildscript {
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.2.1'
+ classpath 'com.android.tools.build:gradle:3.4.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
diff --git a/gradle.properties b/gradle.properties
index 85be9ea..3d8ce0c 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -13,3 +13,5 @@ org.gradle.jvmargs=-Xmx1536m
# org.gradle.parallel=true
# Kotlin code style for this project: "official" or "obsolete":
kotlin.code.style=official
+android.useAndroidX=true
+android.enableJetifier=true
diff --git a/lib/build.gradle b/lib/build.gradle
index 0469787..6ef142f 100644
--- a/lib/build.gradle
+++ b/lib/build.gradle
@@ -6,12 +6,12 @@ android {
compileSdkVersion 28
defaultConfig {
- minSdkVersion 22
+ minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@@ -27,10 +27,10 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation 'com.android.support:appcompat-v7:28.0.0'
+ implementation 'androidx.appcompat:appcompat:1.0.2'
testImplementation 'junit:junit:4.12'
- androidTestImplementation 'com.android.support.test:runner:1.0.2'
- androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+ androidTestImplementation 'androidx.test:runner:1.2.0'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.31"
}
repositories {
diff --git a/lib/src/androidTest/java/me/ibrahimsn/lib/ExampleInstrumentedTest.java b/lib/src/androidTest/java/me/ibrahimsn/lib/ExampleInstrumentedTest.java
index a86b308..251993f 100644
--- a/lib/src/androidTest/java/me/ibrahimsn/lib/ExampleInstrumentedTest.java
+++ b/lib/src/androidTest/java/me/ibrahimsn/lib/ExampleInstrumentedTest.java
@@ -1,8 +1,8 @@
package me.ibrahimsn.lib;
import android.content.Context;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.runner.AndroidJUnit4;
+import androidx.test.InstrumentationRegistry;
+import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
diff --git a/lib/src/main/java/me/ibrahimsn/lib/BottomBarParser.kt b/lib/src/main/java/me/ibrahimsn/lib/BottomBarParser.kt
index abceff3..683e196 100644
--- a/lib/src/main/java/me/ibrahimsn/lib/BottomBarParser.kt
+++ b/lib/src/main/java/me/ibrahimsn/lib/BottomBarParser.kt
@@ -3,7 +3,7 @@ package me.ibrahimsn.lib
import android.content.Context
import android.content.res.XmlResourceParser
import android.graphics.drawable.Drawable
-import android.support.v4.content.ContextCompat
+import androidx.core.content.ContextCompat
import org.xmlpull.v1.XmlPullParserException
class BottomBarParser(private val context: Context, res: Int) {
diff --git a/lib/src/main/java/me/ibrahimsn/lib/NiceBottomBar.kt b/lib/src/main/java/me/ibrahimsn/lib/NiceBottomBar.kt
index b7ff022..aaf845a 100644
--- a/lib/src/main/java/me/ibrahimsn/lib/NiceBottomBar.kt
+++ b/lib/src/main/java/me/ibrahimsn/lib/NiceBottomBar.kt
@@ -15,7 +15,8 @@ import android.view.MotionEvent
import android.annotation.SuppressLint
import android.animation.ArgbEvaluator
import android.graphics.*
-import android.support.v4.content.res.ResourcesCompat
+import androidx.core.content.res.ResourcesCompat
+import androidx.core.graphics.drawable.DrawableCompat
import kotlin.math.abs
class NiceBottomBar : View {
@@ -26,6 +27,7 @@ class NiceBottomBar : View {
private var barIndicatorInterpolator = 4
private var barIndicatorWidth = d2p(50f)
private var barIndicatorEnabled = true
+ private var barIndicatorGravity = 1 // 0 -> TOP , 1 -> BOTTOM
private var itemIconSize = d2p(18f)
private var itemIconMargin = d2p(3f)
private var itemTextColor = Color.parseColor("#444444")
@@ -80,6 +82,7 @@ class NiceBottomBar : View {
itemIconMargin = typedArray.getDimension(R.styleable.NiceBottomBar_iconMargin, this.itemIconMargin)
activeItem = typedArray.getInt(R.styleable.NiceBottomBar_activeItem, this.activeItem)
barIndicatorInterpolator = typedArray.getInt(R.styleable.NiceBottomBar_indicatorInterpolator, this.barIndicatorInterpolator)
+ barIndicatorGravity = typedArray.getInt(R.styleable.NiceBottomBar_indicatorGravity, this.barIndicatorGravity)
itemBadgeColor = typedArray.getColor(R.styleable.NiceBottomBar_badgeColor, this.itemBadgeColor)
itemFontFamily = typedArray.getResourceId(R.styleable.NiceBottomBar_itemFontFamily, this.itemFontFamily)
items = BottomBarParser(context, typedArray.getResourceId(R.styleable.NiceBottomBar_menu, 0)).parse()
@@ -116,21 +119,22 @@ class NiceBottomBar : View {
super.onDraw(canvas)
val textHeight = (paintText.descent() + paintText.ascent()) / 2
+ val additionalTopMargin = if (barIndicatorGravity == 1) 0f else 10f // push the item components from the top a bit if the indicator is at the top
for ((i, item) in items.withIndex()) {
item.icon.mutate()
item.icon.setBounds(item.rect.centerX().toInt() - itemIconSize.toInt() / 2,
- height / 2 - itemIconSize.toInt() - itemIconMargin.toInt() / 2,
+ height / 2 - itemIconSize.toInt() - itemIconMargin.toInt() / 2 + additionalTopMargin.toInt(),
item.rect.centerX().toInt() + itemIconSize.toInt() / 2,
- height / 2 - itemIconMargin.toInt() / 2)
+ height / 2 - itemIconMargin.toInt() / 2 + additionalTopMargin.toInt())
- item.icon.setTint(if (i == activeItem) currentActiveItemColor else itemTextColor)
+ DrawableCompat.setTint(item.icon , if (i == activeItem) currentActiveItemColor else itemTextColor)
item.icon.draw(canvas)
// Draw item title
this.paintText.color = if (i == activeItem) currentActiveItemColor else itemTextColor
canvas.drawText(item.title, item.rect.centerX(),
- item.rect.centerY() - textHeight + itemIconSize / 2 + this.itemIconMargin / 2, paintText)
+ item.rect.centerY() - textHeight + itemIconSize / 2 + (this.itemIconMargin / 2) + additionalTopMargin, paintText)
// Draw item badge
if (item.badgeSize > 0)
@@ -139,8 +143,8 @@ class NiceBottomBar : View {
// Draw indicator
if (barIndicatorEnabled)
- canvas.drawLine(indicatorLocation - barIndicatorWidth/2, height - 5.0f,
- indicatorLocation + barIndicatorWidth/2, height - 5.0f, paintIndicator)
+ canvas.drawLine(indicatorLocation - barIndicatorWidth/2, (if (barIndicatorGravity == 1) height - 5.0f else 5f),
+ indicatorLocation + barIndicatorWidth/2, (if (barIndicatorGravity == 1) height - 5.0f else 5f), paintIndicator)
}
// Handle item clicks
diff --git a/lib/src/main/res/values/attrs.xml b/lib/src/main/res/values/attrs.xml
index 1179d64..ba67e56 100644
--- a/lib/src/main/res/values/attrs.xml
+++ b/lib/src/main/res/values/attrs.xml
@@ -23,5 +23,9 @@
+
+
+
+
\ No newline at end of file