BottomNavigationView
Android Support Library 25.0.0 版本中,新增加了一个API –> BottomNavigationView – 底部导航视图。
先来看看这个控件的实现效果。
这个控件三个以下的item是显示这样的,但是大于三个的时候就变样了,另一种效果,但是不适合,这里就不显示了。下面有个有个方法可以解决这个问题。
上代码:
package th.zxq.com.quxianyundong;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.internal.BottomNavigationItemView;
import android.support.design.internal.BottomNavigationMenuView;
import android.support.design.widget.BottomNavigationView;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.MenuItem;
import java.lang.reflect.Field;
/**
* Created by Administrator on 2017/8/14.
*/
public class BottomNavigationActivity extends AppCompatActivity {
private BottomNavigationView bottomNavigation;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bottomnavigation);
bottomNavigation = (BottomNavigationView) findViewById(R.id.bottomNavigation);
BottomNavigationViewHelper.disableShiftMode(bottomNavigation);
bottomNavigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
// case R.id.menu_recent:
// break;
// case R.id.menu_favorites:
// break;
// case R.id.menu_nearby:
// break;
// case R.id.menu_navi:
// break;
}
return true;
}
});
}
/**
* 这个方法是适配item>3的情况,保持这种样式的
*/
public static class BottomNavigationViewHelper {
public static void disableShiftMode(BottomNavigationView view) {
BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
try {
Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode");
shiftingMode.setAccessible(true);
shiftingMode.setBoolean(menuView, false);
shiftingMode.setAccessible(false);
for (int i = 0; i < menuView.getChildCount(); i++) {
BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i);
//noinspection RestrictedApi
item.setShiftingMode(false);
// set once again checked value, so view will be updated
//noinspection RestrictedApi
item.setChecked(item.getItemData().isChecked());
}
} catch (NoSuchFieldException e) {
Log.e("BNVHelper", "Unable to get shift mode field", e);
} catch (IllegalAccessException e) {
Log.e("BNVHelper", "Unable to change value of shift mode", e);
}
}
}
}
<?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"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottomNavigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/navigationcolor"
android:layout_alignParentBottom="true"
app:menu="@menu/bottom_menu"
app:itemIconTint="@drawable/bottom_navigation_color_selector" //item的图片的颜色选择器
app:itemTextColor="@drawable/bottom_navigation_color_selector" //item的字体的颜色选择器
app:itemBackground="@drawable/button"/> //item的背景水波纹效果
</RelativeLayout>
<?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/home"
android:enabled="true"
app:showAsAction="ifRoom"
android:icon="@drawable/sy01"
android:title="home" />
<item
android:id="@+id/service"
android:enabled="true"
app:showAsAction="ifRoom"
android:icon="@drawable/fw01"
android:title="service" />
<item
android:id="@+id/message"
android:enabled="true"
app:showAsAction="ifRoom"
android:icon="@drawable/xx01"
android:title="message" />
<item
android:id="@+id/personal"
android:enabled="true"
app:showAsAction="ifRoom"
android:icon="@drawable/wo01"
android:title="personal" />
</menu>