怎么使用Android实现底部切换标签(android,移动开发)

时间:2024-03-29 00:11:20 作者 : 石家庄SEO 分类 : 移动开发
  • TAG :

具体内容如下

实现底部通用切换标签 ,嵌套Fragment,方便自定义布局

怎么使用Android实现底部切换标签

自定义控件:

widget_tab_view.xml

<?xmlversion="1.0"encoding="utf-8"?>
<mergexmlns:android="http://schemas.android.com/apk/res/android&quot;
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&quot;
xmlns:app="http://schemas.android.com/apk/res-auto&quot;
xmlns:tools="http://schemas.android.com/tools&quot;
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实现底部切换标签的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:vue组件间通信怎么实现下一篇:

4 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18