더 이상 이것을 유지할 시간이 없습니다. 나는 기본적으로 테스트 없이 서둘러 전체 라이브러리를 작성했으며 당시에는 전문 초보자였습니다. 결과적으로 예측할 수 없는 움직이는 부분이 많고 테스트도 그다지 좋지 않을 것입니다. 오랫동안 이 부분을 만져본 적이 없어서 잘 모르겠습니다.
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 리소스 파일을 작성 하여 항목을 추가할 수 있습니다.
아이콘은 완전히 불투명하고 단색 검정색, 24dp, 패딩이 없어야 합니다. 예를 들어 Android Asset Studio 일반 아이콘 생성기를 사용하면 'TRIM'을 선택하고 패딩이 0dp인지 확인하세요. 아이콘의 모양은 다음과 같습니다.
XML 리소스 파일에서 탭을 정의합니다.
입술/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를 제공합니다.
레이아웃/activity_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 >
기본적으로 탭은 선택 이벤트를 수신하고 탭이 선택될 때 어떤 작업을 수행하지 않는 한 아무 작업도 수행하지 않습니다.
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.
}
}
});
탭 선택을 조건부로 취소하려면 반드시 가능합니다. BottomBar에 TabSelectionInterceptor
를 할당하고 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 >
입술/xml/bottombar_tabs.xml
...
< tab
id = " @+id/tab_favorites "
icon = " @drawable/my_tab_icon "
title = " Favorites " />
<!-- You can use @color resources too! -->
...
각 탭에 barColorWhenSelected
추가하기만 하면 됩니다. 해당 탭을 선택하면 전체 BottomBar 배경색이 멋진 애니메이션으로 변경됩니다.
입술/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 >
먼저 기본 애플리케이션 테마의 하위 스타일을 정의합니다.
입술/값-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 레벨에서 충돌을 방지하려면 동일한 테마의 스텁 버전을 만들어야 합니다.
입술/값/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 " />
마지막으로 underNavbar
플래그를 포함하도록 bb_behavior
설정하면 됩니다.
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로 설정하세요.
해상도/레이아웃-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 >
쉬워요!
활동_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/
에 있는 탭의 XML 리소스 IDshifting
: 선택한 탭이 나머지 탭보다 넓습니다. 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.