もうこれを維持する時間がありません。当時私は本格的なエキスパート初心者でしたが、基本的にテストなしでライブラリ全体を急いで書きました。その結果、予測不可能な変動部分が多くなり、テストもおそらくそれほど優れたものではなくなります。もう何年も触ってないのでよくわかりません。
Google の公式 BottomNavigationView を使用することをお勧めし、必要な機能を実装するよう促します。または、別のサードパーティライブラリを使用してください。
それより前の最新バージョンは v1 ブランチにあります。
貢献方法
変更履歴
新しいマテリアル デザインのボトム ナビゲーション パターンを模倣するカスタム ビュー コンポーネント。
いいえ。 minSDK バージョンはAPI レベル 11 (Honeycomb) です。
compile ' com.roughike:bottom-bar:2.3.1 '
メイビン:
< dependency >
< groupId >com.roughike</ groupId >
< artifactId >bottom-bar</ artifactId >
< version >2.3.1</ version >
< type >pom</ type >
</ dependency >
XML リソース ファイルを記述することで項目を追加できます。
アイコンは完全に不透明、黒色一色、24 dpでパディングのないものでなければなりません。たとえば、Android Asset Studio の汎用アイコン ジェネレーターを使用して、「TRIM」を選択し、パディングが 0dp であることを確認します。アイコンは次のようになります。
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 >
次に、BottomBar をレイアウトに追加し、タブ XML ファイルのリソース ID を指定します。
レイアウト/アクティビティ_メイン.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 >
デフォルトでは、選択イベントをリッスンし、タブが選択されたときに何らかの処理を行わない限り、タブは何も実行しません。
MainActivity.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.
}
}
});
}
}
再選択イベントをリッスンしたい場合は、次の方法で行います。
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.
}
}
});
条件付きでタブの選択をキャンセルしたい場合は、それが可能です。 TabSelectionInterceptor
BottomBar に割り当て、 shouldInterceptTabSelection()
メソッドから true を返すだけです。
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 ;
}
});
特定のタブが選択されているときに異なるアイコンを表示したい場合は、状態リスト ドローアブルを使用するだけです。
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! -->
...
各タブにbarColorWhenSelected
を追加するだけです。そのタブが選択されると、BottomBar 全体の背景色が素晴らしいアニメーションで変わります。
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 >
まず、メイン アプリケーション テーマの子であるスタイルを定義します。
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 >
Lollipop よりも前の API レベルでのクラッシュを避けるために、同じテーマのスタブ バージョンを作成する必要もあります。
res/values/styles.xml
< style name = " AppTheme.TransNav " parent = " AppTheme " />
また、透明なナビゲーションバーや横向きでの奇妙な動作を避けるためにvalues-land-v21.xml
にも同じスタブを含めます。
res/values-land-v21.xml:
< style name = " AppTheme.TransNav " parent = " AppTheme " />
AndroidManifest.xml
のテーマをアクティビティに適用します。
AndroidManifest.xml:
< activity android : name = " .MyAwesomeActivity " android : theme = " @style/AppTheme.TransNav " />
最後に、 bb_behavior
にunderNavbar
フラグを含めるように設定すれば準備完了です。
activity_my_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 " />
res/layout-sw600dp
フォルダーでアクティビティに別のレイアウトを指定し、 bb_tabletMode
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 >
簡単、簡単!
activity_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>
未読メッセージ数や新しいアイテムなど、好きなものを表示するバッジを簡単に追加できます。
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
: 選択したタブが残りのタブよりも幅が広くなります。 shy
: BottomBar を CoordinatorLayout 内に置くと、スクロール時に自動的に非表示になります。 underNavbar
: navBar の下に BottomBar を描画します。fonts/MySuperDuperFont.ttf
など)。その場合、フォント パスはsrc/main/assets/fonts/MySuperDuperFont.ttf
のようになりますが、アセット フォルダーは自動的に入力されるため、指定する必要があるのはfonts/MySuperDuperFont.ttf
だけです。< tab
id = " @+id/tab_recents "
title = " Recents "
icon = " @drawable/empty_icon "
inActiveColor = " #00FF00 "
activeColor = " #FF0000 "
barColorWhenSelected = " #FF0000 "
badgeBackgroundColor = " #FF0000 "
badgeHidesWhenActive = " true " />
README.md を変更してプル リクエストを送信して、声を上げてください。
自由に問題を作成したりプルリクエストを作成したりしてください。
プル リクエストを作成するときは、多ければ多いほど良いです。すべてのプル リクエストを組み合わせて巨大なプル リクエストを作成するのではなく、機能ごとに分割した 10 個の小さなプル リクエストを確認したいと考えています。
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.