android 创建底部导航栏 (radiogroup+fragment)
来源:互联网 发布:软件著作权登记日期 编辑:程序博客网 时间:2024/05/17 02:05
本着为人名服务的想法,把底部栏的创建写成了一个工具类,只要引用这个类并且传参初始化,就能实现几行代码创建一个底部标题栏
有问题请留言联系,刚开始整理博客可能写的不够详细//工具类代码
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); }}
阅读全文
0 0
- android 创建底部导航栏 (radiogroup+fragment)
- android 底部导航栏 ViewPager+RadioGroup+Fragment
- RadioGroup+Fragment实现底部导航栏
- Fragment + RadioGroup实现底部导航
- fragment+RadioGroup实现底部导航栏 多个 fragment 重影问题
- Android之RadioGroup+ViewPager制作的底部导航栏
- Android之RadioGroup+ViewPager制作的底部导航栏
- Android之RadioGroup+ViewPager制作的底部导航栏
- Android底部导航栏实现(二)之RadioGroup
- Android 底部导航栏的使用 fragment
- Android 底部导航栏界面(Fragment)
- Android底部导航栏—RadioButton+Fragment
- Android底部导航栏—FragmentTabHost+Fragment
- xamarin android Fragment实现底部导航栏
- xamarin android Fragment实现底部导航栏
- Android使用Fragment仿微信底部导航栏
- Android之底部導航欄--RadioGroup、TabHost、Fragment
- Android之底部導航欄--RadioGroup、TabHost、Fragment
- POJ2385-Apple Catching
- URAL
- 《深入理解java虚拟机》学习笔记3——垃圾回收算法
- git安装使用
- Android线程管理(一)
- android 创建底部导航栏 (radiogroup+fragment)
- 遗传算法简单例题的详解
- Unity有限状态机
- Android开发笔记
- 解决ubuntu1604 Vmware虚拟机NAT方式不能联网问题
- 贴几个用PYTHON的机器学习的入门贴
- Java常用公共工具记录
- Android Bitmap 知识点梳理
- 3740