mirror of
https://github.com/RSSNext/Folo.git
synced 2026-10-18 22:01:28 +08:00
ad3ac4926a
* feat(mobile): implement custom tab bar and item pressable components on android native
Adds native Android implementations for custom UI components previously available on iOS:
- **Custom Tab Bar:**
- Implements `TabBarRootView` using `ViewPager2` and a custom `CustomTabBarView` (LinearLayout) to host RN-rendered tab items (`TabBarPortalView`).
- Provides `TabScreenView` as a container for page content within Fragments managed by `TabBarPagerAdapter`.
- Includes `TabBarModule`, `TabScreenModule`, and `TabBarPortalModule` for Expo autolinking and JS bridging (props: `selectedIndex`, event: `onTabIndexChange`, function: `switchTab`).
- This approach mirrors the iOS version by avoiding the native `TabLayout` and allowing full customization of the tab bar via React Native components.
- **Item Pressable:**
- Implements `ItemPressableView` extending `ExpoView`.
* Provides native touch feedback using Android's foreground ripple (`selectableItemBackground`) by default.
* Includes a prop `touchHighlight` to enable/disable feedback.
* Fires `onItemPress` event on click/tap.
* Includes `ItemPressableModule` for Expo integration.
* fix(mobile): Adjust content view `padding` to prevent overlap with Bottom Bar
* feat(mobile): implement native tab bar components and improve tab switching logic
49 lines
1.5 KiB
Groovy
49 lines
1.5 KiB
Groovy
apply plugin: 'com.android.library'
|
|
|
|
group = 'expo.modules.follownative'
|
|
version = '0.1.0'
|
|
|
|
def expoModulesCorePlugin = new File(project(":expo-modules-core").projectDir.absolutePath, "ExpoModulesCorePlugin.gradle")
|
|
apply from: expoModulesCorePlugin
|
|
applyKotlinExpoModulesCorePlugin()
|
|
useCoreDependencies()
|
|
useExpoPublishing()
|
|
|
|
// If you want to use the managed Android SDK versions from expo-modules-core, set this to true.
|
|
// The Android SDK versions will be bumped from time to time in SDK releases and may introduce breaking changes in your module code.
|
|
// Most of the time, you may like to manage the Android SDK versions yourself.
|
|
def useManagedAndroidSdkVersions = false
|
|
if (useManagedAndroidSdkVersions) {
|
|
useDefaultAndroidSdkVersions()
|
|
} else {
|
|
buildscript {
|
|
// Simple helper that allows the root project to override versions declared by this library.
|
|
ext.safeExtGet = { prop, fallback ->
|
|
rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
|
|
}
|
|
}
|
|
project.android {
|
|
compileSdkVersion safeExtGet("compileSdkVersion", 34)
|
|
defaultConfig {
|
|
minSdkVersion safeExtGet("minSdkVersion", 21)
|
|
targetSdkVersion safeExtGet("targetSdkVersion", 34)
|
|
}
|
|
|
|
dependencies {
|
|
implementation "androidx.fragment:fragment:1.8.6"
|
|
implementation "androidx.viewpager2:viewpager2:1.1.0"
|
|
}
|
|
}
|
|
}
|
|
|
|
android {
|
|
namespace "expo.modules.follownative"
|
|
defaultConfig {
|
|
versionCode 1
|
|
versionName "0.1.0"
|
|
}
|
|
lintOptions {
|
|
abortOnError false
|
|
}
|
|
}
|