Android BottomView 的自定义
Customisation for Android BottomView
[![我想要这样的底栏][1]][1]
使用 android 中的以下库自定义底部标签栏:
https://github.com/Droppers/AnimatedBottomBar
使用起来非常简单,并且提供了很多动画。
但是,我不希望菜单文本内容显示在底栏中。
我只想在选中或未选中时显示图标。
如何使用这个库实现?
或者有什么办法可以达到这样的目的吗?
如果你在 repo 的描述中看到,你会看到一些关于选项卡外观的属性
将此 app:abb_selectedTabType = "icon"
添加到您可能已经添加到 xml 中的代码中,如下所示
<nl.joery.animatedbottombar.AnimatedBottomBar
android:id="@+id/bottom_bar"
android:background="#FFF"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:abb_selectedTabType="text"
app:abb_indicatorAppearance="round"
app:abb_indicatorMargin="16dp"
app:abb_indicatorHeight="4dp"
app:abb_tabs="@menu/tabs"
app:abb_selectedTabType = "icon"
app:abb_selectedIndex="1" />
我浏览了提到的库,它目前不支持此功能,但我们可以调整代码以使其适用于您的用例,但为此您需要将代码作为 module/folder 而不是依赖。
为此,您需要按照以下步骤操作
- 您需要摆脱对
implementation 'nl.joery.animatedbottombar:library:1.0.9'
的依赖
- 清理项目以将其从缓存中删除
- 您可以克隆代码,将代码中的
'library'
文件夹添加为 Android 模块,然后使用 implementation project(path: ':library')
将其包含在您的 gradle 中
完成上述步骤后,您可以根据需要修改代码。现在对于您的用例,请将 library/src/main/java/nl/joery/animatedbottombar/TabView.kt
文件中 line#99
处的 updateTabType
方法替换为下面的
private fun updateTabType() {
animatedView = icon_layout
selectedAnimatedView = icon_layout //here we are forcing it use icon_layout for both views all the time
if (selectedAnimatedView.visibility == View.VISIBLE) {
animatedView.visibility = View.VISIBLE
selectedAnimatedView.visibility = View.INVISIBLE
} else {
animatedView.visibility = View.INVISIBLE
selectedAnimatedView.visibility = View.VISIBLE
}
bringViewsToFront()
}
Also the library is licensed under MIT Open Source License, so you can
happily change your own version of code free of cost.
更新
此外,在 library
模块 gradle 中,请删除对 bintray 的引用,这不是必需的
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 29
defaultConfig {
minSdkVersion 16
targetSdkVersion 29
versionCode 1
versionName "1.0.9"
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
consumerProguardFiles 'consumer-rules.pro'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.3.61"
implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.viewpager2:viewpager2:1.0.0'
implementation 'com.google.android:flexbox:2.0.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
implementation "androidx.navigation:navigation-ui-ktx:2.3.1"
}
[![我想要这样的底栏][1]][1]
使用 android 中的以下库自定义底部标签栏: https://github.com/Droppers/AnimatedBottomBar
使用起来非常简单,并且提供了很多动画。 但是,我不希望菜单文本内容显示在底栏中。
我只想在选中或未选中时显示图标。
如何使用这个库实现? 或者有什么办法可以达到这样的目的吗?
如果你在 repo 的描述中看到,你会看到一些关于选项卡外观的属性
将此 app:abb_selectedTabType = "icon"
添加到您可能已经添加到 xml 中的代码中,如下所示
<nl.joery.animatedbottombar.AnimatedBottomBar
android:id="@+id/bottom_bar"
android:background="#FFF"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:abb_selectedTabType="text"
app:abb_indicatorAppearance="round"
app:abb_indicatorMargin="16dp"
app:abb_indicatorHeight="4dp"
app:abb_tabs="@menu/tabs"
app:abb_selectedTabType = "icon"
app:abb_selectedIndex="1" />
我浏览了提到的库,它目前不支持此功能,但我们可以调整代码以使其适用于您的用例,但为此您需要将代码作为 module/folder 而不是依赖。
为此,您需要按照以下步骤操作
- 您需要摆脱对
implementation 'nl.joery.animatedbottombar:library:1.0.9'
的依赖
- 清理项目以将其从缓存中删除
- 您可以克隆代码,将代码中的
'library'
文件夹添加为 Android 模块,然后使用implementation project(path: ':library')
将其包含在您的 gradle 中
完成上述步骤后,您可以根据需要修改代码。现在对于您的用例,请将 library/src/main/java/nl/joery/animatedbottombar/TabView.kt
文件中 line#99
处的 updateTabType
方法替换为下面的
private fun updateTabType() {
animatedView = icon_layout
selectedAnimatedView = icon_layout //here we are forcing it use icon_layout for both views all the time
if (selectedAnimatedView.visibility == View.VISIBLE) {
animatedView.visibility = View.VISIBLE
selectedAnimatedView.visibility = View.INVISIBLE
} else {
animatedView.visibility = View.INVISIBLE
selectedAnimatedView.visibility = View.VISIBLE
}
bringViewsToFront()
}
Also the library is licensed under MIT Open Source License, so you can happily change your own version of code free of cost.
更新
此外,在 library
模块 gradle 中,请删除对 bintray 的引用,这不是必需的
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 29
defaultConfig {
minSdkVersion 16
targetSdkVersion 29
versionCode 1
versionName "1.0.9"
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
consumerProguardFiles 'consumer-rules.pro'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.3.61"
implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.viewpager2:viewpager2:1.0.0'
implementation 'com.google.android:flexbox:2.0.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
implementation "androidx.navigation:navigation-ui-ktx:2.3.1"
}