Android学习笔记--FragmentTabHost完成首页布局
2017-01-13 16:04
330 查看
FragmentTabHost
基本使用
1.初始化TabHost。FragmentTabHost tabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
2.使tabHost和FrameLayout关联。
tabHost.setup(this,getSupportFragmentManager(),android.R.id.tabcontent);
3.添加tab和其对应的fragment。
TabHost.TabSpec tabSpec = tabHost.newTabSpec("all"); tabSpec.setIndicator("综合"); Bundle bundle = new Bundle(); bundle.putString("text","综合界面"); tabHost.addTab(tabSpec, BlankFragment.class,bundle);
Demo
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <FrameLayout android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> <android.support.v4.app.FragmentTabHost android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
public class MainActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FrameLayout fl = (FrameLayout) findViewById(android.R.id.tabcontent); //1.初始化TabHost FragmentTabHost tabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); //2.使tabHost和FrameLayout关联 tabHost.setup(this,getSupportFragmentManager(),android.R.id.tabcontent); //3.添加tab和其对应的fragment TabHost.TabSpec tabSpec = tabHost.newTabSpec("all"); tabSpec.setIndicator("综合"); Bundle bundle = new Bundle(); bundle.putString("text","综合界面"); tabHost.addTab(tabSpec, BlankFragment.class,bundle); TabHost.TabSpec tabSpec2 = tabHost.newTabSpec("tweet"); tabSpec2.setIndicator("动弹"); Bundle bundle2 = new Bundle(); bundle2.putString("text","动弹界面"); tabHost.addTab(tabSpec2, BlankFragment.class,bundle2); } }
public class BlankFragment extends Fragment{ public static final String TAG="BlankFragment"; public String mText; @Override public void onCreate(@Nullable Bundle savedInstanceState) { Log.d(TAG, "onCreate: "); mText = getArguments().getString("text"); super.onCreate(savedInstanceState); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { Log.d(TAG, "onCreateView: "); TextView textView=new TextView(getContext()); textView.setText(mText); textView.setTextSize(36); textView.setTextColor(Color.BLACK); textView.setGravity(Gravity.CENTER); return textView; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { Log.d(TAG, "onActivityCreated: "); super.onActivityCreated(savedInstanceState); } }
效果图:
仿微信底部栏
package rc.loveq.fragmenttabhostdemo; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTabHost; import android.util.Log; import android.widget.TabHost; import static android.R.id.tabhost; public class WeChatActivity exten d121 ds FragmentActivity implements TabHost.OnTabChangeListener { private static final String TAB_CHAT = "chat"; private static final String TAB_CONTACT = "contact"; private static final String TAB_DISCOVER = "discover"; private static final String TAB_ME = "me"; private static final String TAG = "WeChatActivity"; public TabIndicatorView mChatIndicatorView; public TabIndicatorView mContactIndicatorView; public TabIndicatorView mDiscoverIndicatorView; public TabIndicatorView mMeIndicatorView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_we_chat); //1.初始化TabHost FragmentTabHost tabHost = (FragmentTabHost) findViewById(tabhost); //2.使tabHost和FrameLayout关联 tabHost.setup(this,getSupportFragmentManager(),android.R.id.tabcontent); //3.新建TabSpec TabHost.TabSpec tabChat = tabHost.newTabSpec(TAB_CHAT); mChatIndicatorView = new TabIndicatorView(this); mChatIndicatorView.setIvTabIcon(R.drawable.tab_icon_chat_normal,R.drawable.tab_icon_chat_focus); mChatIndicatorView.setTvhint("消息"); tabChat.setIndicator(mChatIndicatorView); TabHost.TabSpec tabContact = tabHost.newTabSpec(TAB_CONTACT); mContactIndicatorView = new TabIndicatorView(this); mContactIndicatorView.setIvTabIcon(R.drawable.tab_icon_contact_normal,R.drawable.tab_icon_contact_focus); mContactIndicatorView.setTvhint("通讯录"); tabContact.setIndicator(mContactIndicatorView); TabHost.TabSpec tabDiscover= tabHost.newTabSpec(TAB_DISCOVER); mDiscoverIndicatorView = new TabIndicatorView(this); mDiscoverIndicatorView.setIvTabIcon(R.drawable.tab_icon_discover_normal,R.drawable.tab_icon_discover_focus); mDiscoverIndicatorView.setTvhint("通讯录"); tabDiscover.setIndicator(mDiscoverIndicatorView); TabHost.TabSpec tabMe = tabHost.newTabSpec(TAB_ME); mMeIndicatorView = new TabIndicatorView(this); mMeIndicatorView.setIvTabIcon(R.drawable.tab_icon_me_normal,R.drawable.tab_icon_me_focus); mMeIndicatorView.setTvhint("通讯录"); tabMe.setIndicator(mMeIndicatorView); //4、绑定添加TabSpec Bundle args = new Bundle(); args.putString("text","tabChat"); tabHost.addTab(tabChat,BlankFragment.class, args); Bundle args1 = new Bundle(); args1.putString("text","tabContact"); tabHost.addTab(tabContact,BlankFragment.class, args1); Bundle args2 = new Bundle(); args2.putString("text","tabDiscover"); tabHost.addTab(tabDiscover,BlankFragment.class, args2); Bundle args3 = new Bundle(); args3.putString("text","tabMe"); tabHost.addTab(tabMe,BlankFragment.class, args3); // 去掉分割线 tabHost.getTabWidget().setDividerDrawable(android.R.color.white); // 初始化 tab选中 tabHost.setCurrentTabByTag(TAB_CHAT); mChatIndicatorView.setTabSelect(true); // 设置tab切换的监听 tabHost.setOnTabChangedListener(this); } @Override public void onTabChanged(String tabId) { Log.d(TAG, "onTabChanged: "+tabId); resetTabState(); switch (tabId) { case TAB_CHAT: Log.d(TAG, "onTabChanged: "+tabId); mChatIndicatorView.setTabSelect(true); break; case TAB_CONTACT: Log.d(TAG, "onTabChanged: "+tabId); mContactIndicatorView.setTabSelect(true); break; case TAB_DISCOVER: Log.d(TAG, "onTabChanged: "+tabId); mDiscoverIndicatorView.setTabSelect(true); break; case TAB_ME: Log.d(TAG, "onTabChanged: "+tabId); mMeIndicatorView.setTabSelect(true); break; } } /** * 重制Tab状态 */ private void resetTabState() { mChatIndicatorView.setTabSelect(false); mContactIndicatorView.setTabSelect(false); mDiscoverIndicatorView.setTabSelect(false); mMeIndicatorView.setTabSelect(false); } }
package rc.loveq.fragmenttabhostdemo; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; /** * Author:Rc * Csdn:http://blog.csdn.net/loveqrc * 0n 2017/1/11 23:14 * Email:664215432@qq.com */ public class TabIndicatorView extends RelativeLayout { public TextView mTvhint; public ImageView mIvTabIcon; public TextView mTvUnread; private int normalId; private int focusId; public TabIndicatorView(Context context) { this(context,null); } public TabIndicatorView(Context context, AttributeSet attrs) { this(context, attrs,0); } public TabIndicatorView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); View view = View.inflate(context, R.layout.tab_indicator, this); mTvhint = (TextView) view.findViewById(R.id.tab_indicator_hint); mIvTabIcon = ((ImageView) view.findViewById(R.id.tab_indicator_icon)); mTvUnread = ((TextView) view.findViewById(R.id.tab_indicator_unread)); setTvUnread(0); } /** * 设置Tab的title * @param title */ public void setTvhint(String title){ mTvhint.setText(title); } /** * 设置Tab的title * @param resId */ public void setTvhint(int resId){ mTvhint.setText(resId); } /** * 设置Icon图标 * @param normalId * @param focusId */ public void setIvTabIcon(int normalId,int focusId){ this.normalId=normalId; this.focusId=focusId; mIvTabIcon.setImageResource(normalId); } /** * 设置未读数 * @param unreadCount */ public void setTvUnread(int unreadCount){ if (unreadCount>99){ mTvUnread.setText("99+"); mTvUnread.setVisibility(VISIBLE); }else{ if (unreadCount<=0){ mTvUnread.setVisibility(INVISIBLE); }else{ mTvUnread.setText(String.valueOf(unreadCount)); mTvUnread.setVisibility(VISIBLE); } } } /** * 设置Tab是否被选中 * @param isSelect */ public void setTabSelect(boolean isSelect){ mIvTabIcon.setImageResource(isSelect?focusId:normalId); } }
相关文章推荐
- HTML5 - DIV+CSS完成首页布局
- Flask实战2问答平台-首页布局,功能完成
- div+css完成首页布局
- 第九十一节,html5+css3pc端固定布局,完成首页
- html复习第七天 京东首页布局完成
- 网站首页应该如何布局
- [置顶] 使用FlexboxLayout完成优雅的布局
- 使用AutoLayout布局适配时,如何提前获得AutoLayout完成适配后的子控件的真实frame
- <div+css页面布局课堂笔记>10---页面布局网站首页设计实例__2
- android学习笔记——GridView控件(九宫格布局)
- SharePoint Online 创建门户网站系列之首页布局
- css布局金融首页
- HTML&CSS——使用DIV和CSS完成网站首页重构
- 记录一下完成的首页模版
- Android学习笔记——布局
- Android学习笔记_5种常用布局的常用属性
- 使用Ajax技术通过XMLHttpRequest对象完成首页登录功能
- android学习笔记8 - xml布局简记
- Android学习笔记_3_四种布局
- android开发游记:RecycleView 实现复杂首页布局三种方式