android主页工具
》效果:

》用法 :1.在activity_main里include进主页工具布局文件;
2.在MianActivity里初始化工具
》代码:
/**
* Created by sunmo on 2017/3/5.
*/
public class FooterNav {
private OnFooterNavSelectedListener mListener;
private final FragmentManager mManager;
private Fragment[] fragments;
private int currentIndex;
/**
* return a new instance
*/
public static FooterNav newInstance(Activity act, Fragment[] fragments, int index) {
return new FooterNav(act, fragments, index);
}
private FooterNav(Activity act, Fragment[] fragments, int index) {
ViewHolder vh = null;
if (act != null) vh = new ViewHolder(act);
this.fragments = fragments;
mManager = ((FragmentActivity) act).getSupportFragmentManager();
FragmentTransaction mTransaction = mManager.beginTransaction();
for (int i = 0; i <fragments.length ; i++) {
mTransaction.add(vh.contentContainer.getId(), fragments[i]).hide(fragments[i]);
}
mTransaction.show(fragments[index]).commit();
((RadioButton) vh.tabContainer.getChildAt(index)).setChecked(true);
vh.tabContainer.setOnCheckedChangeListener(mCheckedChangeListener);
currentIndex = index;
}
/**
* check changed listener
*/
private RadioGroup.OnCheckedChangeListener mCheckedChangeListener = new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
int index = group.indexOfChild(group.findViewById(checkedId));
mManager.beginTransaction().hide(fragments[currentIndex])
.show(fragments[index]).commit();
currentIndex = index;
if (mListener != null)
mListener.onFooterNavClick(index);
}
};
public void setOnFooterNavSelectedListener(OnFooterNavSelectedListener mListener) {
this.mListener = mListener;
}
public interface OnFooterNavSelectedListener {
void onFooterNavClick(int index);
}
static class ViewHolder {
FrameLayout contentContainer;
RadioGroup tabContainer;
public ViewHolder(Activity act) {
this.contentContainer = (FrameLayout) act.findViewById(R.id.contentContainer);
this.tabContainer = (RadioGroup) act.findViewById(R.id.tabContainer);
}
}
}
》XML文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/contentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/tabContainer" />
<RadioGroup
android:id="@+id/tabContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rbOne"
style="@style/Widget.Bottom_Nav"
android:drawableTop="@drawable/nav_msg_selector"
android:text="@string/nav_bottom_conversation" />
<RadioButton
android:id="@+id/rbTwo"
style="@style/Widget.Bottom_Nav"
android:drawableTop="@drawable/nav_contact_selector"
android:text="@string/nav_bottom_contact" />
<RadioButton
android:id="@+id/rbThree"
style="@style/Widget.Bottom_Nav"
android:drawableTop="@drawable/nav_video_selector"
android:text="@string/nav_bottom_video" />
<RadioButton
android:id="@+id/rbFour"
style="@style/Widget.Bottom_Nav"
android:drawableTop="@drawable/nav_shop_selector"
android:text="@string/nav_bottom_market" />
</RadioGroup>
</RelativeLayout>
》style文件:
<style name="Widget.Bottom_Nav">
<item name="android:gravity">center</item>
<item name="android:layout_weight">1</item>
<item name="android:button">@null</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">0dp</item>
<item name="android:textColor">@color/navFooterColor</item>
</style>
》想法:
其实最开始是准备自定义一个viewgroup的,然后addview一个framlayout和一个RadioGroup的。只是在给RadioGroup添加RadioButton时,设置权重发现并没有什么效果。也考虑过直接测量屏幕宽度或父控件宽度,再等分(感觉也行)。不过由于时间关系,最后直接就用了布局文件。