新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍怎么使用Android实现底部切换标签,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
成都创新互联公司是一家集网站建设,山阳企业网站建设,山阳品牌网站建设,网站定制,山阳网站建设报价,网络营销,网络优化,山阳网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
具体内容如下
实现底部通用切换标签 ,嵌套Fragment,方便自定义布局
自定义控件:
widget_tab_view.xml
定义单个标签
public class TabView extends LinearLayout { private ImageView mTabImage; private TextView mTabLable; public TabView(Context context) { super(context); initView(context); } public TabView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); initView(context); } public TabView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(context); } private void initView(Context context) { 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); } public void initData(TabItem tabItem) { mTabImage.setImageResource(tabItem.imageResId); mTabLable.setText(tabItem.lableResId); } }
定义单个标签的entity
public class TabItem { public int imageResId; public int lableResId; public Class extends Fragment> tagFragmentClz; public TabItem(int imageResId, int lableResId) { this.imageResId = imageResId; this.lableResId = lableResId; } public TabItem(int imageResId, int lableResId, Class extends Fragment> tagFragmentClz) { this.imageResId = imageResId; this.lableResId = lableResId; this.tagFragmentClz = tagFragmentClz; } }
定义底部切换标签控件
public class BottomTabLayout extends LinearLayout implements View.OnClickListener { private ArrayListtabs; private OnTabClickListener listener; private int tabCount; private View selectedView; public BottomTabLayout(Context context) { super(context); initView(); } public BottomTabLayout(Context context, @Nullable AttributeSet attrs) { super(context, attrs); initView(); } public BottomTabLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(); } private void initView() { setOrientation(HORIZONTAL); } public void setCurrentTab(int i) { if (i < tabCount && i >= 0) { View view = getChildAt(i); onClick(view); } } public void initData(ArrayList tabs, OnTabClickListener listener) { this.tabs = tabs; this.listener = listener; LayoutParams params = new LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT); params.weight = 1; params.gravity = Gravity.CENTER; if (tabs != null && tabs.size() > 0) { tabCount = tabs.size(); TabView mTabView = null; for (int i = 0, len = tabs.size(); i < len; i++) { mTabView = new TabView(getContext()); mTabView.setTag(tabs.get(i)); mTabView.initData(tabs.get(i)); mTabView.setOnClickListener(this); addView(mTabView, params); } } else { throw new IllegalArgumentException("tabs can not be empty"); } } @Override public void onClick(View view) { if (selectedView != view) { listener.onTabClick((TabItem) view.getTag()); view.setSelected(true); if (selectedView != null) { selectedView.setSelected(false); } selectedView = view; } } public interface OnTabClickListener { void onTabClick(TabItem tabItem); } }
Activity
public class MainActivity extends AppCompatActivity implements BottomTabLayout.OnTabClickListener { private BottomTabLayout tab_layout; private ArrayListtabs; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setTitle("底部切换标签"); tab_layout = (BottomTabLayout) findViewById(R.id.tab_layout); initBottomTab(); tab_layout.setCurrentTab(0); } private void initBottomTab() { tabs = new ArrayList<>(); tabs.add(new TabItem(R.drawable.selector_tab_msg, R.string.wechat, OneFragment.class)); tabs.add(new TabItem(R.drawable.selector_tab_contact, R.string.contacts, TwoFragment.class)); tabs.add(new TabItem(R.drawable.selector_tab_moments, R.string.discover, ThreeFragment.class)); tabs.add(new TabItem(R.drawable.selector_tab_profile, R.string.me, FourFragment.class)); tab_layout.initData(tabs, this); } private Fragment lastFragment; @Override public void onTabClick(TabItem tabItem) { try { Fragment tmpFragment = getSupportFragmentManager().findFragmentByTag(tabItem.tagFragmentClz.getSimpleName()); FragmentTransaction transaction = 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 (Exception e) { e.printStackTrace(); } } }
布局文件
以上是“怎么使用Android实现底部切换标签”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!