本着爲人名服務的想法,把底部欄的創建寫成了一個工具類,只要引用這個類並且傳參初始化,就能實現幾行代碼創建一個底部標題欄
有問題請留言聯繫,剛開始整理博客可能寫的不夠詳細
//工具類代碼
package doge.healthcare.Utils;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import doge.healthcare.R;
import doge.healthcare.activity.Main;
import doge.healthcare.base.BaseActivity;
import doge.healthcare.fragment.First;
import doge.healthcare.fragment.Second;
import doge.healthcare.fragment.Third;
/**
* 一行代碼創建底部標題欄
*傳入Radiogroup 和 對應class 的list ,以及 圖片的Drawablelist, 標題名,即可創建底部標題欄並設定點擊圖片
* Created by doge on 2017/4/7.
*/
public class TabButtom {
private Fragment[] mFragments = new Fragment[3];
private Class[] classlist ;
private BaseActivity mContext;
private String[] titlelist ;
public TabButtom(BaseActivity main, RadioGroup Radiogrounp, final Class[] classlist, Drawable[] Drawablelist, String[] titlelist) {
this.classlist = classlist;
mContext = main;
this.titlelist=titlelist;
//獲取屏幕寬度
////定義底部標籤圖片大小
DisplayMetrics metric = new DisplayMetrics();
main.getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels;
int widthdpi=(int)(width * 0.05f) ;
for (int num = 0; num < Drawablelist.length; num++) {
Drawablelist[num].setBounds(0, 0, widthdpi, widthdpi);//第一0是距左右邊距離,第二0是距上下邊距離,第三長度,第四寬度
RadioButton rd = (RadioButton) Radiogrounp.getChildAt(num);//獲取並強制類型轉換爲radiobutton
rd.setCompoundDrawables(null, Drawablelist[num], null, null);//只放上面
}
//設置監聽器
final RadioGroup finalRadiogrounp = Radiogrounp;
finalRadiogrounp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
for (int i = 0; i < finalRadiogrounp.getChildCount(); i++) {
if (finalRadiogrounp.getChildAt(i).getId() == checkedId) {
setTabSelection(i);
break;
}
}
}
}
);
RadioButton btn = (RadioButton) finalRadiogrounp.getChildAt(0);
btn.toggle();
//默認自動按下第一個按鈕
}
private synchronized void setTabSelection(int index) {
// 開啓一個Fragment事務
FragmentTransaction transaction = mContext.getFragmentManager().beginTransaction();
//先設定標題欄
//TextView title = (TextView)mContext.findViewById(R.id.title);
mContext.setTitle(titlelist[index]);
for (int i = 0; i < mFragments.length; i++) {
if (mFragments[i] == null) {
try {
mFragments[i] = (Fragment) classlist[i].newInstance();
transaction.add(R.id.content, mFragments[i]);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
// 先隱藏掉所有的Fragment,以防止有多個Fragment顯示在界面上的情況
synchronized (First.class) {
for (Fragment tmp : mFragments) {
if (tmp != null)
transaction.hide(tmp);
}
transaction.show(mFragments[index]);
transaction.commit();
}
}
}
用法:
Drawable first = getResources().getDrawable(R.drawable.tab_buttom_first);
Drawable second = getResources().getDrawable(R.drawable.tab_buttom_second);
Drawable third = getResources().getDrawable(R.drawable.tab_buttom_third);
Drawable [] Drawablelist= {first,second,third};
//radiogroup 和對應的class的列表
RadioGroup Radiogrounp = (RadioGroup) findViewById(R.id.frames);
Class[] classlist={First.class,Second.class,Third.class};
String[] titlelist={"數據監測","攝影監測","定時事項"};
//獲取每個控件寬度
//四個參數分別爲當前類,進行操作的radiogroup,各自對應的class,點擊樣式列表,每個控件的標題名
new TabButtom(this, Radiogrounp, classlist,Drawablelist,titlelist);//一行代碼創建
主界面xml代碼
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@color/primary">
<LinearLayout
android:background="@color/primary"
style="@style/zhanwei"></LinearLayout>
<RelativeLayout
android:background="@color/primary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:layout_marginBottom="12dp">
<TextView
android:id="@+id/btn_title"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:textSize="18sp"
android:textColor="#ffffff"
android:text="標題名"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/btn_back"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:layout_alignParentLeft="true"
android:layout_gravity="center"
android:src="@drawable/icon_return"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon_huatong"
android:id="@+id/huatong"
android:layout_alignParentEnd="true" />
</RelativeLayout>
</LinearLayout>
<FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1.0" />
<View
android:background="#e8e8e8"
android:layout_width="match_parent"
android:layout_height="1px" />
<RadioGroup
android:id="@+id/frames"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_weight="0.0"
android:background="#fff"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingTop="5dp">
<RadioButton
android:id="@+id/fram1"
style="@style/tab_buttom_style"
android:text="數據監測" />
<RadioButton
android:id="@+id/fram2"
style="@style/tab_buttom_style"
android:text="攝像監測" />
<RadioButton
android:id="@+id/fram3"
style="@style/tab_buttom_style"
android:text="定時事項" />
</RadioGroup>
</LinearLayout>
drawable 的點擊效果編寫(要寫三個,有幾個圖標寫幾個,主要是爲了圖標的點擊效果)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@drawable/icon_first1">
<color android:color="#987654" />
</item>
<item android:drawable="@drawable/icon_first0">
<color android:color="#987654" />
</item>
</selector>
fragment代碼(這個也要寫三個,每個對應一個)
package doge.healthcare.fragment;
import android.Manifest;
import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.content.pm.PackageManager;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;
import doge.healthcare.R;
import doge.healthcare.activity.Main;
import doge.healthcare.base.BaseActivity;
import static android.R.attr.fragment;
public class Third extends Fragment {
public TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void onStart (){
super.onStart();
textView = (TextView)this.getView().findViewById(R.id.third);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.acticity_third, container, false);
}
}
效果