详解地址:http://www.dyhdyh.com
最新版下载地址:http://www.dyhdyh.com/download
交流QQ群:146261923
转载请注明出处:http://blog.csdn.net/aa464971/article/details/43039085
1、控件组合
1.1、ViewPager + Fragment,
这两个控件的组合在项目里也是比较常用的,效果同ViewPager,但由于是用Fragment所以可以使代码操作起来更方便;
1.1.1、先看看效果图
左右滑动切换页面,标题也会随着ViewPager切换而改变标题的选中状态。
1.1.2、xml布局
这里用了dyh里的一个自定义控件,TabIndicator,也就是viewpager标题下面那个下划线,具有位移动画,标题文字也是属于该控件。
如果不需要标题,布局只需要写一个ViewPager就好。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <com.dyh.view.TabIndicator android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/ti" /> <android.support.v4.view.ViewPager android:id="@+id/vp" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/white" /> </LinearLayout>
1.1.3、代码实现
首先我们需要一个Adapter来给ViewPager,而这个Adapter,已经自带在框架里面了,可以直接使用DyhBaseFragmentAdapter(该类继承于FragmentPagerAdapter)。如果需要自定义Adapter,可以继承DyhBaseFragmentAdapter进行扩展,也可以继承FragmentPagerAdapter来重写。
框架里还有一个DyhFragmentPagerActivity,这个Activity自带了ViewPager标题切换的效果,如果需要自定义,可选择继承其它Activity。
在oncreate调用以下方法,就可以完成ViewPager+Fragment的效果了
//tabName是一个String数组,即标题文字 //R.layout.tab_radio是RadioButton的布局文件,标题的样式就是它决定,并且xml里只能包含一个RadioButton ti.create(tabName, R.layout.tab_radio); //生成一个Fragment集合 List<Fragment> fragments = FragmentFactory.createList(AllFragment_.class,GraphicFragment_.class,SoundFragment_.class,VideoFragment_.class); //创建一个DyhBaseFragmentAdapter,将FragmentManager和Fragment集合传入 FragmentPagerAdapter adapter=new DyhBaseFragmentAdapter(getSupportFragmentManager(), fragments); vp.setAdapter(adapter); //如果使用自带的标题切换效果,需继承于DyhFragmentPagerActivity //下面两个监听,就是标题切换 vp.setOnPageChangeListener(new OnPageChangeListener(ti)); ti.setOnCheckedChangeListener(new OnRadioChangeListener(vp));
这两个控件的组合几乎所有的项目都会用到,一般用于应用的首页,RadioGroup作导航,Fragment作内容容器;
1.2.1、效果图
最下面的三个按钮就是导航栏RadioGroup,内容页面是Fragment,点击按钮会切换对应的Fragment。
1.2.2、xml布局
首先需要一个FrameLayout来作为Fragment的容器,也就是说,所有的Fragment都是放在这个FrameLayout上面;下面再放一组RadioGroup,里面的RadioButton就是单个选项卡的按钮。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <FrameLayout android:id="@+id/main_content" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:background="@android:color/black" /> <RadioGroup android:id="@+id/main_radio_group" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@android:color/white" android:orientation="horizontal" > <RadioButton android:id="@+id/main_rb_show" style="@style/main_radio" android:drawableTop="@drawable/show_selector" android:text="买家秀" /> <RadioButton android:id="@+id/main_rb_home" style="@style/main_radio" android:drawableTop="@drawable/home_selector" android:text="首页" /> <RadioButton android:id="@+id/main_rb_me" style="@style/main_radio" android:drawableTop="@drawable/me_selector" android:text="我" /> </RadioGroup> </LinearLayout>
1.1.3、代码实现
(1)需要继承于DyhFragmentRadioActivity,然后会要求重写getFragmentViewId()方法,这里返回FrameLayout的id就好;
/** * 获取Fragment容器的控件id * @decs 用来放Fragment的控件 */ @Override public int getFragmentViewId() { return R.id.main_content; }
(2)还需要重写initFragment()方法,在里面添加你的Fragment即可
/** * 依次加入Fragment * @desc add(RadioButton的id,fragment的class) */ @Override protected void initFragment() { //需要传入RadioButton的id和对应的Fragment add(R.id.main_rb_show, ShowFragment.class); add(R.id.main_rb_home, HomeFragment.class); add(R.id.main_rb_me, MeFragment.class); }(3)在OnCreate里面设置RadioGroup的监听,再设置默认选择的按钮,就大功告成了!
//如果需要传入自定义的OnCheckedChangeListener,需在方法里调用addFragmentStack(fragments.get(checkedId)); rg.setOnCheckedChangeListener(this); //默认选中索引为1的按钮 setRadioTrue(rg,1);
2、自定义控件
2.1、BaseWebView(com.dyh.view.BaseWebView)
使用方式同WebView,默认设置了支持JavaScript、在应用内打开网页,所以无需再设置。
2.2、FixedHeightGridView(com.dyh.view.FixedHeightGridView)
使用方式同GridView,固定高度的Gridview,解决了ScrollView与GridView共存的滑动问题。
2.3、FixedHeightListView(com.dyh.view.FixedHeightListView)
使用方式同GridView,固定高度的Gridview,解决了ScrollView与GridView共存的滑动问题。
2.4、TabIndicator(com.dyh.view.TabIndicator)
在布局里添加一个TabIndicator,再在OnCreate调用创建的方法,可参考ViewPager + Fragment
//tabName是一个String数组,即标题文字 //R.layout.tab_radio是RadioButton的布局文件,标题的样式就是它决定,并且xml里只能包含一个RadioButton ti.create(tabName, R.layout.tab_radio);
1、控件组合
1.1、ViewPager + Fragment,