Android中自定义Tab的实现
16lz
2021-01-23
看了网上的的一些资料和android源码之后,总结出自定义Tab的大概实现,记录以备后查。
android中的tab控件显示通过TabHost和TabWidget来实现,在TabHost.TabSpec提供了tab自定义外观的实现方法:
TabSpec android.widget.TabHost.TabSpec.setIndicator(View view);
我们提供自定义的View即可,android源码中默认的view有两种:一种只有TextView,另一种包含ImageView和TextView,看看第二种的布局文件:
源文件位于:frameworks/base/core/res/res/layout/tab_indicator.xml中 在这里我们可以增加或者修改控件,或者修改控件的样式,背景色等等。
修改后保存到自己工程的layout目录下,命名为tab_custom_indicator.xml
这里我只保留了ImageView,让tab只显示图片 同时在drawable中提供自定义的选择器tab_custom_indicator.xml,让系统在切换不同的tab时可以显示不同的背景:
TabActivity的layout文件为main.xml:
<?xml version="1.0" encoding="utf-8"?>
这里把TabWidget放在下面,主要是为了让tab底部显示(默认的tab是顶部显示的) 布局完成之后,下面是编码部分:
public class MainActivity extends TabActivity { private static final String TAG = "MainActivity"; private TabWidget tabWidget; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TabHost tabs = getTabHost(); tabWidget = getTabWidget(); TabHost.TabSpec spec = tabs.newTabSpec("tab0"); Intent intent = new Intent().setClass(this, FirstActivity.class); spec.setIndicator(createIndicatorView()); spec.setContent(intent); tabs.addTab(spec); spec = tabs.newTabSpec("tab1"); intent = new Intent().setClass(this, SecondActivity.class); spec.setIndicator(createIndicatorView()); spec.setContent(intent); tabs.addTab(spec); tabs.setCurrentTab(0);//启动时显示第一个标签页 } private View createIndicatorView() { View tabIndicator = (RelativeLayout)LayoutInflater.from(this).inflate( R.layout.tab_indicator, tabWidget, false); return tabIndicator; }}
更多相关文章
- Android 控件使用之SlidingDrawer
- Android利用drawable文件夹自定义控件背景、样式
- android Service Activity三种交互方式(付源码)
- Android学习-五布局之相对布局
- android控件布局
- [Android]笔记7-RelativeLayout布局
- Android的四种基本布局
- 2.3.1TextView控件
- Android 统计图表引擎AChartEngine(四) - 源码示例 嵌入Acitivit