Saya tidak punya waktu untuk mempertahankan ini lagi. Saya pada dasarnya menulis seluruh perpustakaan dengan tergesa-gesa, tanpa tes, sambil menjadi ahli pemula yang serius pada saat itu. Akibatnya, ada banyak bagian bergerak yang tidak dapat diprediksi dan pengujiannya mungkin juga tidak terlalu bagus. Entahlah, karena sudah lama sekali aku tidak menyentuhnya.
Saya menyarankan Anda untuk menggunakan BottomNavigationView resmi dari Google dan mendesak mereka untuk mengimplementasikan fitur yang Anda perlukan. Atau gunakan perpustakaan pihak ketiga lainnya.
Versi terbaru sebelumnya dapat ditemukan di cabang v1
Bagaimana cara berkontribusi
log perubahan
Komponen tampilan kustom yang meniru pola Navigasi Bawah Desain Material baru.
Tidak. Versi minSDK adalah API level 11 (Honeycomb).
compile ' com.roughike:bottom-bar:2.3.1 '
Pakar:
< dependency >
< groupId >com.roughike</ groupId >
< artifactId >bottom-bar</ artifactId >
< version >2.3.1</ version >
< type >pom</ type >
</ dependency >
Anda dapat menambahkan item dengan menulis file sumber daya XML .
Ikon harus sepenuhnya buram, berwarna hitam pekat, 24 dp dan tanpa bantalan . Misalnya, dengan generator Ikon Generik Android Asset Studio, pilih "TRIM" dan pastikan paddingnya 0dp. Berikut tampilan ikon Anda:
Tentukan tab Anda dalam file sumber daya XML.
res/xml/bottombar_tabs.xml:
< tabs >
< tab
id = " @+id/tab_favorites "
icon = " @drawable/ic_favorites "
title = " Favorites " />
< tab
id = " @+id/tab_nearby "
icon = " @drawable/ic_nearby "
title = " Nearby " />
< tab
id = " @+id/tab_friends "
icon = " @drawable/ic_friends "
title = " Friends " />
</ tabs >
Kemudian, tambahkan BottomBar ke tata letak Anda dan berikan id sumber daya untuk file xml tab Anda.
tata letak/aktivitas_main.xml
< RelativeLayout xmlns : android = " http://schemas.android.com/apk/res/android "
android : layout_width = " match_parent "
android : layout_height = " match_parent "
xmlns : app = " http://schemas.android.com/apk/res-auto " >
<!-- This could be your fragment container, or something -->
< FrameLayout
android : id = " @+id/contentContainer "
android : layout_width = " match_parent "
android : layout_height = " match_parent "
android : layout_above = " @+id/bottomBar " />
< com .roughike.bottombar.BottomBar
android : id = " @+id/bottomBar "
android : layout_width = " match_parent "
android : layout_height = " 60dp "
android : layout_alignParentBottom = " true "
app : bb_tabXmlResource = " @xml/bottombar_tabs " />
</ RelativeLayout >
Secara default, tab tidak melakukan apa pun kecuali Anda mendengarkan peristiwa pemilihan dan melakukan sesuatu saat tab dipilih.
Aktivitas Utama.java:
public class MainActivity extends Activity {
@ Override
protected void onCreate ( @ Nullable Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R . layout . activity_main );
BottomBar bottomBar = ( BottomBar ) findViewById ( R . id . bottomBar );
bottomBar . setOnTabSelectListener ( new OnTabSelectListener () {
@ Override
public void onTabSelected ( @ IdRes int tabId ) {
if ( tabId == R . id . tab_favorites ) {
// The tab with id R.id.tab_favorites was selected,
// change your content accordingly.
}
}
});
}
}
Jika Anda ingin mendengarkan acara pemilihan ulang, berikut cara melakukannya:
bottomBar . setOnTabReselectListener ( new OnTabReselectListener () {
@ Override
public void onTabReSelected ( @ IdRes int tabId ) {
if ( tabId == R . id . tab_favorites ) {
// The tab with id R.id.tab_favorites was reselected,
// change your content accordingly.
}
}
});
Jika Anda ingin membatalkan pemilihan tab mana pun secara bersyarat, Anda pasti bisa. Cukup tetapkan TabSelectionInterceptor
ke BottomBar, dan kembalikan nilai true dari metode shouldInterceptTabSelection()
.
bottomBar . setTabSelectionInterceptor ( new TabSelectionInterceptor () {
@ Override
public boolean shouldInterceptTabSelection ( @ IdRes int oldTabId , @ IdRes int newTabId ) {
if ( newTabId == R . id . tab_pro_feature && ! userHasProVersion ()) {
startProVersionPurchaseFlow ();
return true ;
}
return false ;
}
});
Jika Anda ingin memiliki ikon yang berbeda ketika tab tertentu dipilih, cukup gunakan sumber daya dapat digambar dari daftar status.
res/drawable/my_tab_icon.xml
< selector xmlns : android = " http://schemas.android.com/apk/res/android " >
< item android : drawable = " @drawable/ic_myicon_selected " android : state_selected = " true " />
< item android : drawable = " @drawable/ic_myicon_default " android : state_selected = " false " />
</ selector >
res/xml/bottombar_tabs.xml
...
< tab
id = " @+id/tab_favorites "
icon = " @drawable/my_tab_icon "
title = " Favorites " />
<!-- You can use @color resources too! -->
...
Cukup tambahkan barColorWhenSelected
ke setiap tab. Ketika tab itu dipilih, seluruh warna latar belakang BottomBar diubah dengan animasi yang bagus.
res/xml/bottombar_tabs.xml
< tabs >
< tab
id = " @+id/tab_favorites "
icon = " @drawable/ic_favorites "
title = " Favorites "
barColorWhenSelected = " #5D4037 " />
<!-- You can use @color resources too! -->
</ tabs >
Pertama, tentukan gaya yang merupakan turunan dari tema aplikasi utama Anda:
res/values-v21/styles.xml
< style name = " AppTheme.TransNav " parent = " AppTheme " >
< item name = " android:navigationBarColor " >@android:color/transparent</ item >
< item name = " android:windowTranslucentNavigation " >true</ item >
< item name = " android:windowDrawsSystemBarBackgrounds " >true</ item >
</ style >
Anda juga harus membuat versi rintisan dari tema yang sama untuk menghindari kerusakan pada level API yang lebih lama dari Lollipop:
res/values/styles.xml
< style name = " AppTheme.TransNav " parent = " AppTheme " />
Sertakan juga stub yang sama di values-land-v21.xml
Anda untuk menghindari bilah navigasi transparan dan perilaku aneh di lanskap.
res/nilai-tanah-v21.xml:
< style name = " AppTheme.TransNav " parent = " AppTheme " />
Terapkan tema di AndroidManifest.xml
untuk Aktivitas Anda.
AndroidManifest.xml:
< activity android : name = " .MyAwesomeActivity " android : theme = " @style/AppTheme.TransNav " />
Terakhir, atur bb_behavior
untuk menyertakan flag underNavbar
dan Anda siap melakukannya!
aktivitas_saya_awesome.xml:
< com .roughike.bottombar.BottomBar
android : id = " @+id/bottomBar "
android : layout_width = " match_parent "
android : layout_height = " 56dp "
android : layout_alignParentBottom = " true "
app : bb_tabXmlResource = " @xml/my_awesome_bottombar_tabs "
app : bb_behavior = " underNavbar " />
Tentukan tata letak berbeda untuk aktivitas Anda di folder res/layout-sw600dp
dan atur bb_tabletMode
ke true.
res/layout-sw600dp/activity_main.xml:
< RelativeLayout
xmlns : android = " http://schemas.android.com/apk/res/android "
xmlns : app = " http://schemas.android.com/apk/res-auto "
android : layout_width = " match_parent "
android : layout_height = " match_parent " >
< com .roughike.bottombar.BottomBar
android : id = " @+id/bottomBar "
android : layout_width = " wrap_content "
android : layout_height = " match_parent "
android : layout_alignParentLeft = " true "
app : bb_tabXmlResource = " @xml/bottombar_tabs_three "
app : bb_tabletMode = " true " />
<!-- This could be your fragment container, or something -->
< FrameLayout
android : id = " @+id/contentContainer "
android : layout_width = " match_parent "
android : layout_height = " match_parent "
android : layout_toRightOf = " @+id/bottomBar " />
</ RelativeLayout >
Mudah sekali!
aktivitas_main.xml:
< android .support.design.widget.CoordinatorLayout xmlns : android = " http://schemas.android.com/apk/res/android "
xmlns : app = " http://schemas.android.com/apk/res-auto "
android : layout_width = " match_parent "
android : layout_height = " match_parent " >
< android .support.v4.widget.NestedScrollView
android : id = " @+id/myScrollingContent "
android : layout_width = " match_parent "
android : layout_height = " match_parent " >
<!-- Your loooooong scrolling content here. -->
</ android .support.v4.widget.NestedScrollView>
< com .roughike.bottombar.BottomBar
android : id = " @+id/bottomBar "
android : layout_width = " match_parent "
android : layout_height = " 60dp "
android : layout_gravity = " bottom "
app : bb_tabXmlResource = " @xml/bottombar_tabs_three "
app : bb_behavior = " shy " />
</ android .support.design.widget.CoordinatorLayout>
Anda dapat dengan mudah menambahkan lencana untuk menampilkan jumlah pesan yang belum dibaca atau item baru/apa pun yang Anda suka.
BottomBarTab nearby = bottomBar . getTabWithId ( R . id . tab_nearby );
nearby . setBadgeCount ( 5 );
// Remove the badge when you're done with it.
nearby . removeBadge /();
< com .roughike.bottombar.BottomBar
android : id = " @+id/bottomBar "
android : layout_width = " match_parent "
android : layout_height = " 60dp "
android : layout_alignParentBottom = " true "
app : bb_tabXmlResource = " @xml/bottombar_tabs_three "
app : bb_tabletMode = " true "
app : bb_behavior = " shifting|shy|underNavbar "
app : bb_inActiveTabAlpha = " 0.6 "
app : bb_activeTabAlpha = " 1 "
app : bb_inActiveTabColor = " #222222 "
app : bb_activeTabColor = " @color/colorPrimary "
app : bb_badgesHideWhenActive = " true "
app : bb_titleTextAppearance = " @style/MyTextAppearance "
app : bb_titleTypeFace = " fonts/MySuperDuperFont.ttf "
app : bb_showShadow = " true " />
values/xml/
shifting
: tab yang dipilih lebih lebar dari yang lain. shy
: letakkan BottomBar di dalam CoordinatorLayout dan secara otomatis akan disembunyikan saat digulir! underNavbar
: gambar BottomBar di bawah navBar!fonts/MySuperDuperFont.ttf
. Dalam hal ini jalur font Anda akan terlihat seperti src/main/assets/fonts/MySuperDuperFont.ttf
, tetapi Anda hanya perlu menyediakan fonts/MySuperDuperFont.ttf
, karena folder aset akan terisi otomatis untuk Anda.< tab
id = " @+id/tab_recents "
title = " Recents "
icon = " @drawable/empty_icon "
inActiveColor = " #00FF00 "
activeColor = " #FF0000 "
barColorWhenSelected = " #FF0000 "
badgeBackgroundColor = " #FF0000 "
badgeHidesWhenActive = " true " />
Kirimi saya permintaan tarik dengan README.md yang dimodifikasi untuk mendapatkan shoutout!
Jangan ragu untuk membuat masalah dan menarik permintaan.
Saat membuat permintaan tarik, lebih banyak lebih baik: Saya ingin melihat sepuluh permintaan tarik kecil dipisahkan berdasarkan fitur daripada semuanya digabungkan menjadi satu besar.
BottomBar library for Android
Copyright (c) 2016 Iiro Krankka (http://github.com/roughike).
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.