Android TabHost的标签放在底部,已写成框架,继承即可
感受一下不错的述说:
【每日话题】Android是自学好还是培训好,你有啥高招?
http://www.eoeandroid.com/thread-193467-1-1.html
【每日话题】留在这城市的理由
http://www.eoeandroid.com/thread-191466-1-1.html
【每日话题】面试那些事儿—面霸是怎样炼成的
http://www.eoeandroid.com/thread-193078-1-1.html
网上已经有很多关于如何将TabHost的标签放在底部,这里就不说了
主要是把这些都做成框架,只需要提供图片和文字就可以实现这样的效果。
直接上图,代码解释的很清楚
程序的图片借用新浪微博.
使用代码:
package com.api.example.app; import java.util.ArrayList; import java.util.List; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.TabWidget; import android.widget.TextView; import com.api.R; import com.api.TabHostActivity; /** * 整个流程就像使用ListView自定BaseAdapter一样 * * 如果要自定义TabHostActivity的Theme,并且不想要头部阴影 * 一定要添加这个android:windowContentOverlay = null * * 如果想在别的项目里面使用TabHostActivity * 可以项目的属性里面找到Android,然后在Library部分添加这个项目(Api) * <a href='\"http://www.cnblogs.com/qianxudetianxia/archive/2011/05/01/2030232.html\"' target='\"_blank\"'>如何添加</a> * */ public class ExampleActivity extends TabHostActivity { List mItems; private LayoutInflater mLayoutInflater; /**在初始化TabWidget前调用 * 和TabWidget有关的必须在这里初始化*/ @Override protected void prepare() { TabItem home = new TabItem( "首页", // title R.drawable.icon_home, // icon R.drawable.example_tab_item_bg, // background new Intent(this, Tab1Activity.class)); // intent TabItem info = new TabItem( "资料", R.drawable.icon_selfinfo, R.drawable.example_tab_item_bg, new Intent(this, Tab2Activity.class)); TabItem msg = new TabItem( "信息", R.drawable.icon_meassage, R.drawable.example_tab_item_bg, new Intent(this, Tab3Activity.class)); TabItem square = new TabItem( "广场", R.drawable.icon_square, R.drawable.example_tab_item_bg, new Intent(this, Tab4Activity.class)); TabItem more = new TabItem( "更多", R.drawable.icon_more, R.drawable.example_tab_item_bg, new Intent(this, Tab5Activity.class)); mItems = new ArrayList(); mItems.add(home); mItems.add(info); mItems.add(msg); mItems.add(square); mItems.add(more); // 设置分割线 TabWidget tabWidget = getTabWidget(); tabWidget.setDividerDrawable(R.drawable.tab_divider); mLayoutInflater = getLayoutInflater(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCurrentTab(0); } /**tab的title,icon,边距设定等等*/ @Override protected void setTabItemTextView(TextView textView, int position) { textView.setPadding(3, 3, 3, 3); textView.setText(mItems.get(position).getTitle()); textView.setBackgroundResource(mItems.get(position).getBg()); textView.setCompoundDrawablesWithIntrinsicBounds(0, mItems.get(position).getIcon(), 0, 0); } /**tab唯一的id*/ @Override protected String getTabItemId(int position) { return mItems.get(position).getTitle(); // 我们使用title来作为id,你也可以自定 } /**点击tab时触发的事件*/ @Override protected Intent getTabItemIntent(int position) { return mItems.get(position).getIntent(); } @Override protected int getTabItemCount() { return mItems.size(); } /**自定义头部文件*/ @Override protected View getTop() { return mLayoutInflater.inflate(R.layout.example_top, null); } }
框架代码:
package com.api; import android.app.TabActivity; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import android.widget.TabHost; import android.widget.TabHost.TabSpec; import android.widget.TabWidget; import android.widget.TextView; public abstract class TabHostActivity extends TabActivity { private TabHost mTabHost; private TabWidget mTabWidget; private LayoutInflater mLayoutflater; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // set theme because we do not want the shadow setTheme(R.style.Theme_Tabhost); setContentView(R.layout.api_tab_host); mLayoutflater = getLayoutInflater(); mTabHost = getTabHost(); mTabWidget = getTabWidget(); //mTabWidget.setStripEnabled(false); // need android2.2 prepare(); initTop(); initTabSpec(); } private void initTop() { View child = getTop(); LinearLayout layout = (LinearLayout) findViewById(R.id.tab_top); layout.addView(child); } private void initTabSpec() { int count = getTabItemCount(); for (int i = 0; i < count; i++) { // set text view View tabItem = mLayoutflater.inflate(R.layout.api_tab_item, null); TextView tvTabItem = (TextView) tabItem.findViewById(R.id.tab_item_tv); setTabItemTextView(tvTabItem, i); // set id String tabItemId = getTabItemId(i); // set tab spec TabSpec tabSpec = mTabHost.newTabSpec(tabItemId); tabSpec.setIndicator(tabItem); tabSpec.setContent(getTabItemIntent(i)); mTabHost.addTab(tabSpec); } } /** 在初始化界面之前调用 */ protected void prepare() { // do nothing or you override it } /** 自定义头部布局 */ protected View getTop() { // do nothing or you override it return null; } protected int getTabCount() { return mTabHost.getTabWidget().getTabCount(); } /** 设置TabItem的图标和标题等*/ abstract protected void setTabItemTextView(TextView textView, int position); abstract protected String getTabItemId(int position); abstract protected Intent getTabItemIntent(int position); abstract protected int getTabItemCount(); protected void setCurrentTab(int index) { mTabHost.setCurrentTab(index); } protected void focusCurrentTab(int index) { mTabWidget.focusCurrentTab(index); } }
标签:
android 开发
, TabHost
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!