您的位置:首页 > 移动开发 > Android开发

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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: