之前见过类似这个库, 是带ripple效果的 不记得具体地址了,和这个类似 https://github.com/Ashok-Varma/BottomNavigation
还有: https://github.com/armcha/LuseenBottomNavigation
在看 简友:[英勇青铜5] 文章的时候 http://www.jianshu.com/users/8edc8ef5fef3/latest_articles
发现,在 com.android.support:design:25.0.0 中 有对应的类支持 可能是自己其他方面事情的原因,android的代码量现在减少了很多,包括去了解新东西
和之前的一些切换差不多 只是多了一个动画效果
或者简单padding一下,放到靠中间一点的位置(或者别的地方也行)
添加比较简单 大体分为下面几部
compile 'com.android.support:design:25.0.0'
没有menu文件夹,则自己创建一个即可
将其xml文件,命名为 xxx_xxx.xml,自己的是 bottom_navigation_main.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/basketball" android:enabled="true" android:icon="@android:drawable/ic_menu_call" android:title="basketball" app:showAsAction="ifRoom" /> <item android:id="@+id/football" android:enabled="true" android:icon="@android:drawable/ic_popup_reminder" android:title="football" app:showAsAction="ifRoom" />
<item
android:id="@+id/volleyball"
android:enabled="true"
android:icon="@android:drawable/ic_dialog_info"
android:title="volleyball"
app:showAsAction="ifRoom" />
<item
android:id="@+id/dodo"
android:enabled="true"
android:icon="@android:drawable/ic_input_add"
android:title="dodo"
app:showAsAction="ifRoom" />
</menu>
- 写对应的layout
自己添加了一个TextView,切换后,修改TextView,表示切换:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.aohuan.demo.bottomnavigation.MainActivity">
<!--android:paddingBottom="@dimen/activity_vertical_margin"-->
<!--android:paddingLeft="@dimen/activity_horizontal_margin"-->
<!--android:paddingRight="@dimen/activity_horizontal_margin"-->
<!--android:paddingTop="@dimen/activity_vertical_margin"-->
<!--android:background="@android:color/holo_red_light"-->
<TextView
android:id="@+id/tv_dodo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="BASKETBALL" />
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:itemBackground="@color/colorPrimary"
app:itemIconTint="@color/white"
app:itemTextColor="@color/colorAccent"
app:menu="@menu/bottom_navigation_main" />
</RelativeLayout>
- Activity只是简单调用
package com.aohuan.demo.bottomnavigation;
import android.support.annotation.NonNull; import android.support.design.widget.BottomNavigationView; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.MenuItem; import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView mTvDodo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTvDodo = (TextView) findViewById(R.id.tv_dodo);
BottomNavigationView bottomNavigationView = (BottomNavigationView)
findViewById(R.id.bottom_navigation);
bottomNavigationView.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
}
mTvDodo.setText(item.getTitle().toString().toUpperCase());
return false;
}
}
);
}
}
---
### 简单小节
这个控件用起来还是挺方便的
可以根据自己的需求,再次进行封装
具体的源码,也很短
也就300多行
里面关联了 BottomNavigationMenuView, BottomNavigationPresenter, MenuBuilder 等类
其中, MenuBuilder 比较复杂
对应的响应,通过内部接口OnNavigationItemSelectedListener 去Invoke回传
最近代码量很少,自己多花点时间看看组件,写写demo
具体代码,可以见
https://github.com/2954722256/use_little_demo
对应 bottomnavigation 的 Module