BottomTab - xiaobailong24/JitPack GitHub Wiki
Usage
MainLayout (XML)
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<FrameLayout
android:id="@+id/frame_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/tab"/>
<me.xiaobailong24.library.View.BottomTab
android:id="@+id/tab"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:elevation="8dp"/>
</RelativeLayout>
FragmentLayout
fragment_camera.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txt_camera"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="9dp"
android:layout_marginTop="50dp"
android:gravity="center"
android:text="Camera"
android:textSize="16sp"/>
</FrameLayout>
</LinearLayout>
fragment_compass.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txt_compass"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="9dp"
android:layout_marginTop="50dp"
android:gravity="center"
android:text="Compass"
android:textSize="16sp"/>
</FrameLayout>
</LinearLayout>
fragment_search.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txt_search"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="9dp"
android:layout_marginTop="50dp"
android:gravity="center"
android:text="Search"
android:textSize="16sp"/>
</FrameLayout>
</LinearLayout>
fragment_help.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txt_help"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="9dp"
android:layout_marginTop="50dp"
android:gravity="center"
android:text="Search"
android:textSize="16sp"/>
</FrameLayout>
</LinearLayout>
Fragment (Java)
BaseFragment
public abstract class BaseFragment extends Fragment {
private static final String TAG = BaseFragment.class.getName();
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = createView(inflater,container,savedInstanceState);
ButterKnife.bind(this, view);
initToolBar();
init();
return view;
}
public void initToolBar(){
}
public abstract View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState);
public abstract void init();
}
CameraFragment
public class CameraFragment extends BaseFragment{
private static final String TAG = CameraFragment.class.getName();
@Override
public View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_camera,container,false);
}
@Override
public void init() {
}
}
CompassFragment
public class CompassFragment extends BaseFragment {
private static final String TAG = CompassFragment.class.getName();
@Override
public View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_compass,container,false);
}
@Override
public void init() {
}
}
SearchFragment
public class SearchFragment extends BaseFragment {
private static final String TAG = SearchFragment.class.getName();
@Override
public View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_search,container,false);
}
@Override
public void init() {
}
}
HelpFragment
public class HelpFragment extends BaseFragment {
private static final String TAG = HelpFragment.class.getName();
@Override
public View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_help,container,false);
}
@Override
public void init() {
}
}
MainActivity
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
int[] testColors = {0xFF00796B, 0xFF5B4947, 0xFF607D8B, 0xFFF57C00, 0xFFF57C00};
@BindView(R.id.tab)
BottomTab mBottomTab;
Controller controller;
List<BaseFragment> mFragments;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Logger.e(TAG, "onCreate: ");
ButterKnife.bind(this);
initFragment();
initBottomTab();
}
private void initBottomTab() {
mBottomTab = (BottomTab) findViewById(R.id.tab);
controller = mBottomTab.builder()
.addTabItem(android.R.drawable.ic_menu_camera, "Camera", testColors[0])
.addTabItem(android.R.drawable.ic_menu_compass, "Compass", testColors[1])
.addTabItem(android.R.drawable.ic_menu_search, "Search", testColors[2])
.addTabItem(android.R.drawable.ic_menu_help, "Help", testColors[3])
.setMode(TabLayoutMode.HIDE_TEXT | TabLayoutMode.CHANGE_BACKGROUND_COLOR)
.build();
controller.addTabItemClickListener(listener);
}
private void initFragment() {
mFragments = new ArrayList<>();
mFragments.add(new CameraFragment());
mFragments.add(new CompassFragment());
mFragments.add(new SearchFragment());
mFragments.add(new HelpFragment());
FragmentTransaction transaction =
getSupportFragmentManager().beginTransaction();
transaction.add(R.id.frame_layout, mFragments.get(0));
transaction.commit();
}
OnTabItemSelectListener listener = new OnTabItemSelectListener() {
@Override
public void onSelected(int index, Object tag) {
Logger.d(TAG, "onSelected: " + index + " TAG: " + tag.toString());
FragmentTransaction transaction =
getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.frame_layout, mFragments.get(index));
transaction.commit();
}
@Override
public void onRepeatClick(int index, Object tag) {
Logger.d(TAG, "onRepeatClick: " + index + " TAG: " + tag.toString());
}
};
}
导航栏构建属性
调用BottomTab的builder()方法之后就进入导航栏的构建了。
可控制的属性如下:
- setMessageBackgroundColor
设置圆形消息图案的背景颜色
- setMessageNumberColor
设置圆形消息图案的数字颜色
- setDefaultColor
设置所有导航按钮的默认(未选中)颜色
- setMode
设置导航栏显示模式,目前有两个可选TabLayoutMode.HIDE_TEXT
:隐藏未选中按钮的文字;TabLayoutMode.CHANGE_BACKGROUND_COLOR
:点击按钮之后背景变色。如果两个效果都想使用就这样写
setMode(TabLayoutMode.HIDE_TEXT | TabLayoutMode.CHANGE_BACKGROUND_COLOR)
- addTabItem
添加一个导航按钮,有很多重载的addTabItem方法,主要是为了方便创建导航按钮。
它有1~4个参数不等,可以传入按钮的 未选中图标、选中后的图标、文字、选中后的颜色
还有一个特殊的需要一个TabItemBuilder
类实例,这个类也是用于创建导航按钮的,可以像下面一样创建
TabItemBuilder tabItemBuilder = new TabItemBuilder(this).create()
.setDefaultColor(0xFFACACAC)
.setSelectedColor(0xFF00796B)
.setDefaultIcon(android.R.drawable.ic_menu_help)
.setText("标题")
.setTag("这是一个TAG")
.build();
- build
最后不要忘记调用build完成构建,它会返回一个Controller实例,用于后续的控制操作。
控制导航栏
完成导航栏构建获得Controller实例后就可以进行对导航栏的后续控制
- addTabItemClickListener
最常用的方法,添加导航栏选中监听,回掉的监听分解成了2个,一个是选中,另一个在已经选中的状态下重复选中。
- setMessageNumber
设置某个导航按钮的消息数字,需要传入2个参数,一个索引(顺数数字、Tag)和消息数字。
- setDisplayOval
设置是否显示一个无数字的消息小红点,true显示
- setSelect
手动设置选中项
- getSelected
获得当前的选中项的索引数字
- getSelectedTag
获取当前选中项的TAG
- setBackgroundColor、setBackground、setBackgroundResource
都是设置导航栏背景的