怎么使用Android实现底部切换标签
导读:本文共4067字符,通常情况下阅读需要14分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要:具体内容如下实现底部通用切换标签 ,嵌套Fragment,方便自定义布局自定义控件:widget_tab_view.xml<?xmlversion="1.0"encoding="utf-8"?><mergexmlns:android="http://schemas.android.com/apk/res/android&... ...
目录
(为您整理了一些要点),点击可以直达。具体内容如下
实现底部通用切换标签 ,嵌套Fragment,方便自定义布局
自定义控件:
widget_tab_view.xml
<?xmlversion="1.0"encoding="utf-8"?>
<mergexmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"><ImageView
android:id="@+id/tab_image"
android:layout_width="20dp"
android:layout_height="20dp"/><TextView
android:id="@+id/tab_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#666666"
android:textSize="12sp"/>
</merge>
定义单个标签
publicclassTabViewextendsLinearLayout{
privateImageViewmTabImage;
privateTextViewmTabLable;publicTabView(Contextcontext){
super(context);
initView(context);
}publicTabView(Contextcontext,@NullableAttributeSetattrs){
super(context,attrs);
initView(context);
}publicTabView(Contextcontext,@NullableAttributeSetattrs,intdefStyleAttr){
super(context,attrs,defStyleAttr);
initView(context);
}privatevoidinitView(Contextcontext){
setOrientation(VERTICAL);
setGravity(Gravity.CENTER);
LayoutInflater.from(context).inflate(R.layout.widget_tab_view,this,true);
mTabImage=(ImageView)findViewById(R.id.tab_image);
mTabLable=(TextView)findViewById(R.id.tab_label);
}publicvoidinitData(TabItemtabItem){
mTabImage.setImageResource(tabItem.imageResId);
mTabLable.setText(tabItem.lableResId);
}
}
定义单个标签的entity
publicclassTabItem{
publicintimageResId;
publicintlableResId;
publicClass<?extendsFragment>tagFragmentClz;publicTabItem(intimageResId,intlableResId){
this.imageResId=imageResId;
this.lableResId=lableResId;
}publicTabItem(intimageResId,intlableResId,Class<?extendsFragment>tagFragmentClz){
this.imageResId=imageResId;
this.lableResId=lableResId;
this.tagFragmentClz=tagFragmentClz;
}
}
定义底部切换标签控件
publicclassBottomTabLayoutextendsLinearLayoutimplementsView.OnClickListener{
privateArrayList<TabItem>tabs;
privateOnTabClickListenerlistener;
privateinttabCount;
privateViewselectedView;publicBottomTabLayout(Contextcontext){
super(context);
initView();
}publicBottomTabLayout(Contextcontext,@NullableAttributeSetattrs){
super(context,attrs);
initView();
}publicBottomTabLayout(Contextcontext,@NullableAttributeSetattrs,intdefStyleAttr){
super(context,attrs,defStyleAttr);
initView();
}privatevoidinitView(){
setOrientation(HORIZONTAL);
}publicvoidsetCurrentTab(inti){
if(i<tabCount&&i>=0){
Viewview=getChildAt(i);
onClick(view);
}
}publicvoidinitData(ArrayList<TabItem>tabs,OnTabClickListenerlistener){
this.tabs=tabs;
this.listener=listener;
LayoutParamsparams=newLayoutParams(0,ViewGroup.LayoutParams.MATCH_PARENT);
params.weight=1;
params.gravity=Gravity.CENTER;
if(tabs!=null&&tabs.size()>0){
tabCount=tabs.size();
TabViewmTabView=null;
for(inti=0,len=tabs.size();i<len;i++){
mTabView=newTabView(getContext());
mTabView.setTag(tabs.get(i));
mTabView.initData(tabs.get(i));
mTabView.setOnClickListener(this);
addView(mTabView,params);
}
}else{
thrownewIllegalArgumentException("tabscannotbeempty");
}
}@Override
publicvoidonClick(Viewview){
if(selectedView!=view){
listener.onTabClick((TabItem)view.getTag());
view.setSelected(true);
if(selectedView!=null){
selectedView.setSelected(false);
}
selectedView=view;
}
}publicinterfaceOnTabClickListener{
voidonTabClick(TabItemtabItem);
}
}
Activity
publicclassMainActivityextendsAppCompatActivityimplementsBottomTabLayout.OnTabClickListener{privateBottomTabLayouttab_layout;
privateArrayList<TabItem>tabs;@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("底部切换标签");tab_layout=(BottomTabLayout)findViewById(R.id.tab_layout);
initBottomTab();
tab_layout.setCurrentTab(0);
}privatevoidinitBottomTab(){
tabs=newArrayList<>();
tabs.add(newTabItem(R.drawable.selector_tab_msg,R.string.wechat,OneFragment.class));
tabs.add(newTabItem(R.drawable.selector_tab_contact,R.string.contacts,TwoFragment.class));
tabs.add(newTabItem(R.drawable.selector_tab_moments,R.string.discover,ThreeFragment.class));
tabs.add(newTabItem(R.drawable.selector_tab_profile,R.string.me,FourFragment.class));
tab_layout.initData(tabs,this);
}privateFragmentlastFragment;
@Override
publicvoidonTabClick(TabItemtabItem){
try{
FragmenttmpFragment=getSupportFragmentManager().findFragmentByTag(tabItem.tagFragmentClz.getSimpleName());
FragmentTransactiontransaction=getSupportFragmentManager().beginTransaction();
if(tmpFragment==null){
tmpFragment=tabItem.tagFragmentClz.newInstance();
transaction.add(R.id.fl_container,tmpFragment,tabItem.tagFragmentClz.getSimpleName());
if(lastFragment!=null){
transaction.hide(lastFragment);
}
transaction.commitAllowingStateLoss();
}else{
transaction.show(tmpFragment);
if(lastFragment!=null){
transaction.hide(lastFragment);
}
transaction.commitAllowingStateLoss();
}
lastFragment=tmpFragment;
}catch(Exceptione){
e.printStackTrace();
}
}
}
布局文件
<?xmlversion="1.0"encoding="utf-8"?>希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
<LinearLayoutxmlns: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"
android:orientation="vertical"
tools:context="com.sample.bottomtab.MainActivity"><FrameLayout
android:id="@+id/fl_container"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#ffffff"/><View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#dcdcdc"/><com.sample.bottomtab.widget.bottomtab.BottomTabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#ffffff"/>
</LinearLayout>
怎么使用Android实现底部切换标签的详细内容,希望对您有所帮助,信息来源于网络。