android底部导航栏下沉,【详细】手把手教你快速实现Android底部导航栏
1. 實現底部的Tab,自定義TabContainerView 繼承 RelativeLayout,這是我們最終封裝的View工具類。其內部主要由viewpager和底部的TabHost類組成。
ViewPager初始化contentViewPager = new ViewPager(context);
LayoutParams contentVpLp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
contentVpLp.addRule(RelativeLayout.ABOVE, R.id.divide_tab);
contentViewPager.setLayoutParams(contentVpLp);
contentViewPager.setId(R.id.viewpager_tab);
contentViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { ? ? ? ? ? ?@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
· ? ? ? ? ? ?@Override
public void onPageSelected(int position) {
tabHost.onChangeTabHostStatus(position);
Tab selectedTab = tabHost.getTabForIndex(position); ? ? ? ? ? ? ? ?if (onTabSelectedListener != null && selectedTab != null) onTabSelectedListener.onTabSelected(selectedTab);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
addView(contentViewPager);底部Tab是一個自定義的橫向布局LinearLayout,動態添加多個寬度等分的Tab按鈕for?(int?i?=?0;?i?
if((i+1)==hasMsgIndex){
hasMsg=true;
}
Tab?tab?=?new?Tab(context,?textArray[i],?textSize,?textColor,?selectedTextColor,drawablePadding,iconWidth,iconHeight,?iconImageArray[i],?selectedIconImageArray[i],?i,hasMsg);
addTab(tab);}tab按鈕的實現rootView?=?new?LinearLayout(context);
childView=new?RelativeLayout(context);
LinearLayout.LayoutParams?rootViewLp?=?new?LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,?ViewGroup.LayoutParams.WRAP_CONTENT);
rootViewLp.weight?=?1;
rootView.setOrientation(LinearLayout.VERTICAL);
rootView.setPadding(0,20,0,20);
rootView.setLayoutParams(rootViewLp);
textTextView?=?new?TextView(context);
iconImageView?=?new?ImageView(context);
/**
*??icon?view
*/
iconImageView.setImageResource(iconImage);
RelativeLayout.LayoutParams?iconParam=new?RelativeLayout.LayoutParams(iconWidth==0??ViewGroup.LayoutParams.WRAP_CONTENT:iconWidth,iconHeight==0??ViewGroup.LayoutParams.WRAP_CONTENT:iconHeight);
iconParam.addRule(RelativeLayout.CENTER_HORIZONTAL);
iconImageView.setLayoutParams(iconParam);
iconImageView.setId(index+1);
childView.addView(iconImageView);
/**
*??text?view
*/
textTextView.setText(text);
textTextView.setTextColor(textColor);
textTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX,textSize);
textTextView.setPadding(0,drawablePadding,0,0);
RelativeLayout.LayoutParams?txParam=new?RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,?RelativeLayout.LayoutParams.WRAP_CONTENT);
txParam.addRule(RelativeLayout.BELOW,childView.getChildAt(0).getId());
txParam.addRule(RelativeLayout.CENTER_HORIZONTAL);
textTextView.setLayoutParams(txParam);
childView.addView(textTextView);
if(hasMsg){
ImageView?circleView=new?ImageView(context);
RelativeLayout.LayoutParams?param?=?new?RelativeLayout.LayoutParams(30,30);
param.addRule(RelativeLayout.RIGHT_OF,iconImageView.getId());
circleView.setBackgroundResource(R.drawable.common_red_round);
circleView.setLayoutParams(param);
childView.addView(circleView);
}
RelativeLayout.LayoutParams?childParam=new?RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,?ViewGroup.LayoutParams.MATCH_PARENT);
childView.setLayoutParams(childParam);
rootView.addView(childView);
三、使用方法
布局中引用
android:id="@+id/tab_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:tabTextColor="@color/bottom_icon_up"
app:selectedTextColor="@color/common_red"
app:tabTextSize="12sp"
app:drawablePadding="1dp"
app:iconHeight="22dp"
app:iconWidth="22dp"
app:divideLineColor="@color/common_line_two"
app:divideLineHeight="0.3dp"/>ACTIVITY中引用TabContainerView tabContainerView = (TabContainerView) findViewById(R.id.tab_container);
MainViewAdapter mainViewAdapter=new MainViewAdapter(getSupportFragmentManager(),
new Fragment[] {new TabFragment1(), new TabFragment2(),new TabFragment3(), new TabFragment4(),new TabFragment5()});
mainViewAdapter.setHasMsgIndex(5);
tabContainerView.setAdapter(mainViewAdapter);
tabContainerView.setOnTabSelectedListener(new OnTabSelectedListener() {
@Override
public void onTabSelected(Tab tab) {
}
});布局自定義屬性介紹tabTextSize:導航按鈕字體大小
drawablePadding:導航圖片與文字的間距
iconHeight:?導航圖標高度
iconWidth:導航圖標寬度
divideLineColor:導航欄頂部分割線顏色
divideLineHeight:導航欄頂部分割線高度設置消息提醒(導航按鈕旁邊的紅點)setHasMsgIndex(5);?//第五個導航按鈕有消息提醒demo地址:
https://github.com/Louis2014/TabView
打開App,閱讀手記
總結
以上是生活随笔為你收集整理的android底部导航栏下沉,【详细】手把手教你快速实现Android底部导航栏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux select 异步,Linu
- 下一篇: 麒麟970怎么升级鸿蒙系统,华为这些手机