本着为人名服务的想法,把底部栏的创建写成了一个工具类,只要引用这个类并且传参初始化,就能实现几行代码创建一个底部标题栏
有问题请留言联系,刚开始整理博客可能写的不够详细
//工具类代码
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); } }
android 创建底部导航栏 (radiogroup+fragment)
最新推荐文章于 2025-03-19 16:47:41 发布