实现android studio底部导航栏四个标签的效果
来源:互联网 发布:咸阳网络买花花店 编辑:程序博客网 时间:2024/05/16 07:57
研发任务是实现如下图这样的效果:
在android studio中新建工程时,选择Bottom Navigation Activity,得到的效果是这样的:
效果差距不小,那么就一步步来。
先添加一个标签,凑够四个标签。
修改strings.xml文件内容如下:
<resources> <string name="app_name">My Application</string> <string name="title_home">Home</string> <string name="title_dashboard">Dashboard</string> <string name="title_notifications">Notifications</string> <string name="title_mine">mine</string></resources>
修改navigation.xml文件内容如下:
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/navigation_home" android:icon="@drawable/ic_home_black_24dp" android:title="@string/title_home" /> <item android:id="@+id/navigation_dashboard" android:icon="@drawable/ic_dashboard_black_24dp" android:title="@string/title_dashboard" /> <item android:id="@+id/navigation_notifications" android:icon="@drawable/ic_notifications_black_24dp" android:title="@string/title_notifications" /> <item android:id="@+id/navigation_mine" android:icon="@drawable/ic_mine_black_24dp" android:title="@string/title_mine" /></menu>
还要在drawable下添加一个文件ic_mine_black_24dp.xml,文件内容如下:
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportHeight="24.0" android:viewportWidth="24.0"> <path android:fillColor="#FF000000" android:pathData="M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z" /></vector>还有一个响应函数要改:
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { case R.id.navigation_home: mTextMessage.setText(R.string.title_home); return true; case R.id.navigation_dashboard: mTextMessage.setText(R.string.title_dashboard); return true; case R.id.navigation_notifications: mTextMessage.setText(R.string.title_notifications); return true; case R.id.navigation_mine: mTextMessage.setText(R.string.title_mine); return true; } return false; }};至此,四个标签的实现效果是这样的:
当标签多于3个时,会自动出现动态效果,当前的标签有文字且颜色突出显示,其它标签没有文字且被挤在一边。接下来要想办法去掉这个动态效果。
先在mainactivity的OnCreate函数中添加如下代码:
//去掉动画效果BottomNavigationViewHelper.disableShiftMode(navigation);
这行代码中的BottomNavigationViewHelper类是网上找到的,实现代码如下:
import android.support.design.internal.BottomNavigationItemView;import android.support.design.internal.BottomNavigationMenuView;import android.support.design.widget.BottomNavigationView;import android.util.Log;import java.lang.reflect.Field;public 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); } }}
在这个类里,用setShiftingMode设置了每个标签的动态效果。
成功。
阅读全文
0 0
- 实现android studio底部导航栏四个标签的效果
- Android 底部导航栏中间凸起、动态配置替换底部导航栏Tab图标(按钮、标签)的实现方案
- Android 底部导航条切换高亮的效果实现
- JFTabBar android强大的底部导航栏框架 (微信底部导航栏效果)
- android底部导航栏中间凸起效果的制作
- android效果TapBarMenu绘制底部导航栏的使用方式
- Android 实现底部导航栏
- 实现Android底部导航栏
- Android实现底部导航栏
- TabContainerView一一实现底部导航栏效果
- TabContainerView一一实现底部导航栏效果
- 底部四个导航图标实现《ImageView+TextView》
- Android 实现类似微信页面底部导航效果
- Android 大杂烩工程之底部导航栏的实现方式
- Android --中间突出的底部导航栏布局简单实现
- Android底部导航栏的四种实现
- Android底部导航栏的四种实现
- Android App应用底部导航栏实现的一种方式
- JavaAPI
- 动态规划入门(转)
- hdu6180Schedule
- XSS跨站脚本攻击剖析与防御--读书笔记
- cmake升级
- 实现android studio底部导航栏四个标签的效果
- requireJS模块化开发
- opencv获取图像RGB值的两种方法
- 面试OR笔试36——计算算术表达式
- windows下Python教程百度云地址
- Refletion2017.9.12
- jdk源码三 RandomAccess接口用法
- Python操作Access数据库
- Python 的platform模块 识别运行环境操作系统