自己的项目直接依赖vipmvp这个库即可
直接继承AbnerApplication,或者自己在Application或者其它主入口中写入:
StyledDialog.init(this);//Dialog初始化
HttpUtils.getmHttpUtils().create();//网络请求初始化
BaseActivity:Activity中没有网络请求可集成此类
BaseActivityHttp:Activity中有网络请求可集成此类
BaseFragment:Fragment没有网络请求可集成此类
BaseFragmentHttp:Fragment有网络请求可集成此类
ActivityDataBind:Activity数据绑定
FragMentDataBind:Fragment数据绑定
dialog不同样式加载框,具体使用,下面会讲解
注解功能,下面会讲解
主要是对listview的抽取和优化
一个接口,用于双向绑定
1、Activity或者Fragment实现MVP模式:主要继承ActivityPresenter或者FragmentPresenter
2、Activity或者Fragment实现MVP模式如果要绑定数据可以继承:ActivityDataBind或者FragMentDataBind
下拉刷新
网络请求,具体使用,下面会讲解
HttpApi:域名管理类,多个域名均可写在这里
Helper:联网请求类,不是继承BaseActivityHttp或者BaseFragmentHttp类的,均可单独使用
主页设置tab时使用
UltimateBar:设置沉浸式状态类
XCRoundImageViewByXfermode:设置图片为椭圆,圆形等
主要是设置引导页,轮播图,viewpager指示器等
主要是使用xrecyclerview
BaseActivity:Activity中没有网络请求可集成此类
BaseActivityHttp:Activity中有网络请求可集成此类
BaseFragment:Fragment没有网络请求可集成此类
BaseFragmentHttp:Fragment有网络请求可集成此类
HttpApi:域名管理类,多个域名均可写在这里
Helper:联网请求类,不是继承BaseActivityHttp或者BaseFragmentHttp类的,均可单独使用
具体代码:app下httptest包下看ActivityHttpTest类
设置缓存,加载动画,头部信息均在 HttpHelper下:
<com.abner.ming.vipmvp.tab.TabView
android:id="@+id/tabview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
List<TabViewChild> tabViewChildList = new ArrayList<>();
TabViewChild tabViewChild01 = new TabViewChild(R.drawable.ic_launcher, R.drawable.ic_launcher, "首页", new FragmentMain());
TabViewChild tabViewChild02 = new TabViewChild(R.drawable.ic_launcher, R.drawable.ic_launcher, "互动", new FragmentMain1());
TabViewChild tabViewChild03 = new TabViewChild(R.drawable.ic_launcher, R.drawable.ic_launcher, "推荐", new FragmentMain2());
TabViewChild tabViewChild04 = new TabViewChild(R.drawable.ic_launcher, R.drawable.ic_launcher, "学习", new FragmentMain3());
TabViewChild tabViewChild05 = new TabViewChild(R.drawable.ic_launcher, R.drawable.ic_launcher, "我的", new FragmentMain4());
tabViewChildList.add(tabViewChild01);
tabViewChildList.add(tabViewChild02);
tabViewChildList.add(tabViewChild03);
tabViewChildList.add(tabViewChild04);
tabViewChildList.add(tabViewChild05);
mTabView.setTabViewChild(tabViewChildList, getSupportFragmentManager());
UltimateBar.newColorBuilder()
.statusColor(statusColor) // 状态栏颜色
.statusDepth(50) // 状态栏颜色深度
.applyNav(true) // 是否应用到导航栏
.navColor(navColor) // 导航栏颜色
.navDepth(50) // 导航栏颜色深度
.build(this)
.apply();
UltimateBar.newColorBuilder()
.statusColor(statusColor) // 状态栏颜色
.applyNav(true) // 是否应用到导航栏
.navColor(navColor) // 导航栏颜色
.build(this)
.apply();
UltimateBar.newTransparentBuilder()
.statusColor(Color.BLUE) // 状态栏颜色
.statusAlpha(100) // 状态栏透明度
.applyNav(true) // 是否应用到导航栏
.navColor(Color.GREEN) // 导航栏颜色
.navAlpha(100) // 导航栏透明度
.build(this)
.apply();
UltimateBar.newTransparentBuilder()
.statusColor(Color.BLUE) // 状态栏颜色
.statusAlpha(100) // 状态栏透明度
.applyNav(false) // 是否应用到导航栏
.build(this)
.apply();
UltimateBar.newImmersionBuilder()
.applyNav(true) // 是否应用到导航栏
.build(this)
.apply();
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
UltimateBar.newHideBuilder()
.applyNav(true) // 是否应用到导航栏
.build(this)
.apply();
}
}
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="false">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:fitsSystemWindows="true">
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/SpringGreen"
android:layout_gravity="left"
android:fitsSystemWindows="false"/>
</android.support.v4.widget.DrawerLayout>
UltimateBar.newDrawerBuilder()
.statusColor(color) // 状态栏颜色
.statusDepth(0) // 状态栏颜色深度
.applyNav(true) // 是否应用到导航栏
.navColor(color) // 导航栏颜色
.navDepth(0) // 导航栏颜色深度
.build(this)
.apply();
<com.zhengsr.viewpagerlib.view.GlideViewPager
android:id="@+id/splase_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<Button
android:id="@+id/splase_start_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginLeft="100dp"
android:layout_marginRight="100dp"
android:layout_marginBottom="50dp"
android:background="@drawable/glide_bottom_btn_bg"
android:textColor="@color/white"
android:text="@string/start"
android:textSize="18sp"
android:visibility="gone"
/>
<!--指示器-->
<com.zhengsr.viewpagerlib.indicator.NormalIndicator
android:id="@+id/splase_bottom_layout"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
zsr:normal_leftmargin="10dp"
zsr:normal_dismiss_open="true"
zsr:normal_selector="@drawable/glide_bottom_selector"
android:orientation="horizontal"/>
//初始化轮播图片
private static final Integer[] RES = {R.mipmap.guide1,R.mipmap.guide2,R.mipmap.guide3,
R.mipmap.guide4};
//先把本地的图片 id 装进 list 容器中
List<Integer> images = new ArrayList<>();
for (int i = 0; i < RES.length; i++) {
images.add(RES[i]);
}
//配置pagerbean,这里主要是为了viewpager的指示器的作用,注意记得写上泛型
PageBean bean = new PageBean.Builder<Integer>()
.setDataObjects(images)
.setIndicator(linearLayout)
.setOpenView(button)
.builder();
// 把数据添加到 viewpager中,并把view提供出来,这样除了方便调试,也不会出现一个view,多个
// parent的问题,这里在轮播图比较明显
viewPager.setPageListener(bean, R.layout.image_layout, new PageHelperListener() {
@Override
public void getItemView(View view, Object data) {
ImageView imageView = (ImageView) view.findViewById(R.id.icon);
imageView.setImageResource((Integer) data);
}
});
<com.zhengsr.viewpagerlib.view.GlideViewPager
android:id="@+id/splase_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<Button
android:id="@+id/splase_start_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginLeft="100dp"
android:layout_marginRight="100dp"
android:layout_marginBottom="50dp"
android:background="@drawable/glide_bottom_btn_bg"
android:textColor="@color/white"
android:text="@string/start"
android:textSize="18sp"
android:visibility="gone"
/>
<com.zhengsr.viewpagerlib.indicator.ZoomIndicator
android:id="@+id/splase_bottom_layout"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center"
zsr:zoom_leftmargin="10dp"
zsr:zoom_max="1.5"
zsr:zoom_alpha_min="0.4"
zsr:zoom_dismiss_open="true"
android:orientation="horizontal"/>
//先把本地的图片 id 装进 list 容器中
List<Integer> images = new ArrayList<>();
for (int i = 0; i < RES.length; i++) {
images.add(RES[i]);
}
//配置pagerbean,这里主要是为了viewpager的指示器的作用,注意记得写上泛型
PageBean bean = new PageBean.Builder<Integer>()
.setDataObjects(images)
.setIndicator(zoomIndicator)
.setOpenView(button)
.builder();
// 把数据添加到 viewpager中,并把view提供出来,这样除了方便调试,也不会出现一个view,多个
// parent的问题,这里在轮播图比较明显
viewPager.setPageListener(bean, R.layout.image_layout, new PageHelperListener() {
@Override
public void getItemView(View view, Object data) {
//通过获取到这个view,你可以随意定制你的内容
ImageView imageView = (ImageView) view.findViewById(R.id.icon);
imageView.setImageResource((Integer) data);
}
});
<com.zhengsr.viewpagerlib.view.GlideViewPager
android:id="@+id/splase_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<Button
android:id="@+id/splase_start_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginLeft="100dp"
android:layout_marginRight="100dp"
android:layout_marginBottom="50dp"
android:background="@drawable/glide_bottom_btn_bg"
android:textColor="@color/white"
android:text="@string/start"
android:textSize="18sp"
android:visibility="gone"
/>
<com.zhengsr.viewpagerlib.indicator.TransIndicator
android:id="@+id/splase_bottom_layout"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="50dp"
zsr:trans_leftmargin="10dp"
zsr:trans_movecolor="@color/colorAccent"
zsr:trans_defaultcolor="@color/gray_cccc"
zsr:trans_type="circle"
zsr:trans_width="5dp"
zsr:trans_height="5dp"
zsr:trans_dismiss_open="true"
android:orientation="horizontal"/>
//先把本地的图片 id 装进 list 容器中
List<Integer> images = new ArrayList<>();
for (int i = 0; i < RES.length; i++) {
images.add(RES[i]);
}
//配置pagerbean,这里主要是为了viewpager的指示器的作用,注意记得写上泛型
PageBean bean = new PageBean.Builder<Integer>()
.setDataObjects(images)
.setIndicator(linearLayout)
.setOpenView(button)
.builder();
// 把数据添加到 viewpager中,并把view提供出来,这样除了方便调试,也不会出现一个view,多个
// parent的问题,这里在轮播图比较明显
viewPager.setPageListener(bean, R.layout.image_layout, new PageHelperListener() {
@Override
public void getItemView(View view, Object data) {
ImageView imageView = (ImageView) view.findViewById(R.id.icon);
imageView.setImageResource((Integer) data);
}
});
<com.zhengsr.viewpagerlib.view.BannerViewPager
android:id="@+id/loop_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:clipChildren="false"
zsr:banner_isloop="true"
zsr:banner_looptime="3000"
zsr:banner_switchtime="600" />
<com.zhengsr.viewpagerlib.indicator.ZoomIndicator
android:id="@+id/bottom_scale_layout"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_gravity="bottom|right"
android:layout_marginRight="20dp"
android:gravity="center"
zsr:zoom_alpha_min="0.5"
zsr:zoom_leftmargin="10dp"
zsr:zoom_max="1.5"
zsr:zoom_selector="@drawable/bottom_circle" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:clipChildren="false">
<com.zhengsr.viewpagerlib.view.BannerViewPager
android:id="@+id/loop_viewpager_arc"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:clipChildren="false"
zsr:banner_isloop="false"
zsr:banner_switchtime="600" />
<com.zhengsr.viewpagerlib.indicator.ZoomIndicator
android:id="@+id/bottom_zoom_arc"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_gravity="bottom|right"
android:layout_marginRight="20dp"
android:gravity="center"
zsr:zoom_alpha_min="0.5"
zsr:zoom_leftmargin="10dp"
zsr:zoom_max="1.5"
zsr:zoom_selector="@drawable/bottom_circle" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:clipChildren="false">
<com.zhengsr.viewpagerlib.view.BannerViewPager
android:id="@+id/loop_viewpager_arc"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:clipChildren="false"
zsr:banner_isloop="false"
zsr:banner_switchtime="600" />
<com.zhengsr.viewpagerlib.indicator.ZoomIndicator
android:id="@+id/bottom_zoom_arc"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_gravity="bottom|right"
android:layout_marginRight="20dp"
android:gravity="center"
zsr:zoom_alpha_min="0.5"
zsr:zoom_leftmargin="10dp"
zsr:zoom_max="1.5"
zsr:zoom_selector="@drawable/bottom_circle" />
</FrameLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="200dp">
<com.zhengsr.viewpagerlib.view.BannerViewPager
android:id="@+id/loop_text2"
android:layout_width="match_parent"
android:layout_height="200dp"
zsr:banner_switchtime="600" />
<com.zhengsr.viewpagerlib.indicator.TransIndicator
android:id="@+id/bottom_trans_layout"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_gravity="bottom|right"
android:layout_marginRight="10dp"
zsr:trans_defaultcolor="@color/gray_cccc"
zsr:trans_leftmargin="10dp"
zsr:trans_movecolor="@color/white"
zsr:trans_type="round"
zsr:trans_round_radius="4dp"
zsr:trans_width="15dp"
zsr:trans_height="5dp"/>
</FrameLayout>
private static final String[] RESURL = {
"http://img.mukewang.com/54bf7e1f000109c506000338-590-330.jpg",
"http://upload.techweb.com.cn/2015/0114/1421211858103.jpg",
"http://img1.cache.netease.com/catchpic/A/A0/A0153E1AEDA115EAE7061A0C7EBB69D2.jpg",
"http://image.tianjimedia.com/uploadImages/2015/202/27/57RF8ZHG8A4T_5020a2a4697650b89" +
"c394237ba9ffbb45fe8555a2cbec-6O6nmI_fw658.jpg"};
private static final String[] TEXT = {"图像处理","LSB开发","游戏开发","梦想"};
mBannerCountViewPager = (BannerViewPager) findViewById(R.id.loop_viewpager);
ZoomIndicator zoomIndicator = (ZoomIndicator) findViewById(R.id.bottom_scale_layout);
//配置数据
List<LoopBean> loopBeens = new ArrayList<>();
for (int i = 0; i < TEXT.length; i++) {
LoopBean bean = new LoopBean();
bean.url = RESURL[i];
bean.text = TEXT[i];
loopBeens.add(bean);
}
//配置pagerbean,这里主要是为了viewpager的指示器的作用,注意记得写上泛型
PageBean bean = new PageBean.Builder<LoopBean>()
.setDataObjects(loopBeens)
.setIndicator(zoomIndicator)
.builder();
// 设置viewpager的动画,这里提供了三种,分别是MzTransformer,ZoomOutPageTransformer,
// 和DepthPageTransformer,可以体验一下
mBannerCountViewPager.setPageTransformer(false,new MzTransformer());
//
mBannerCountViewPager.setPageListener(bean, R.layout.loop_layout, new PageHelperListener() {
@Override
public void getItemView(View view, Object data) {
ImageView imageView = (ImageView) view.findViewById(R.id.loop_icon);
LoopBean bean = (LoopBean) data;
new GlideManager.Builder()
.setContext(LoopActivity.this)
.setImgSource(bean.url)
.setLoadingBitmap(R.mipmap.ic_launcher)
.setImageView(imageView)
.builder();
TextView textView = (TextView) view.findViewById(R.id.loop_text);
textView.setText(bean.text);
//如若你要设置点击事件,也可以直接通过这个view 来设置,或者图片的更新等等
}
});
BannerViewPager arcBannerViewPager = (BannerViewPager) findViewById(R.id.loop_viewpager_arc);
ZoomIndicator arcZoomIndicator = (ZoomIndicator) findViewById(R.id.bottom_zoom_arc);
arcBannerViewPager.setPageTransformer(false,new MzTransformer());
PageBean arcbean = new PageBean.Builder<LoopBean>()
.setDataObjects(loopBeens)
.setIndicator(arcZoomIndicator)
.builder();
arcBannerViewPager.setPageListener(arcbean, R.layout.arc_loop_layout, new PageHelperListener() {
@Override
public void getItemView(View view, Object data) {
ArcImageView imageView = (ArcImageView) view.findViewById(R.id.arc_icon);
LoopBean bean = (LoopBean) data;
new GlideManager.Builder()
.setContext(LoopActivity.this)
.setImgSource(bean.url)
.setLoadingBitmap(R.mipmap.ic_launcher)
.setImageView(imageView)
.builder();
}
});
//配置数据
loopBeens = new ArrayList<>();
for (int i = 0; i < TEXT.length; i++) {
LoopBean bean2 = new LoopBean();
bean2.res = RES[i];
bean2.text = TEXT[i];
loopBeens.add(bean2);
}
BannerViewPager transBannerViewPager = (BannerViewPager) findViewById(R.id.loop_text2);
TransIndicator transIndicator = (TransIndicator) findViewById(R.id.bottom_trans_layout);
//配置pagerbean,这里主要是为了viewpager的指示器的作用,注意记得写上泛型
bean = new PageBean.Builder<LoopBean>()
.setDataObjects(loopBeens)
.setIndicator(transIndicator)
.builder();
transBannerViewPager.setPageListener(bean, R.layout.loop_layout, new PageHelperListener() {
@Override
public void getItemView(View view, Object data) {
ImageView imageView = (ImageView) view.findViewById(R.id.loop_icon);
final LoopBean bean = (LoopBean) data;
new GlideManager.Builder()
.setContext(LoopActivity.this)
.setImgSource(bean.res)
.setLoadingBitmap(R.mipmap.ic_launcher)
.setImageView(imageView)
.builder();
TextView textView = (TextView) view.findViewById(R.id.loop_text);
textView.setText(bean.text);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(LoopActivity.this, bean.text, Toast.LENGTH_SHORT).show();
}
});
//如若你要设置点击事件,也可以直接通过这个view 来设置,或者图片的更新等等
}
});
BannerViewPager textBannerViewPager = (BannerViewPager) findViewById(R.id.loop_viewpager_text);
TextIndicator textIndicator = (TextIndicator) findViewById(R.id.bottom_text_layout);
bean = new PageBean.Builder<LoopBean>()
.setDataObjects(loopBeens)
.setIndicator(textIndicator)
.builder();
textBannerViewPager.setPageListener(bean, R.layout.image_layout, new PageHelperListener() {
@Override
public void getItemView(View view, Object data) {
ImageView imageView = (ImageView) view.findViewById(R.id.icon);
LoopBean bean = (LoopBean) data;
new GlideManager.Builder()
.setContext(LoopActivity.this)
.setImgSource(bean.res)
.setLoadingBitmap(R.mipmap.ic_launcher)
.setImageView(imageView)
.builder();
//如若你要设置点击事件,也可以直接通过这个view 来设置,或者图片的更新等等
}
});
@Override
protected void onPause() {
super.onPause();
mBannerCountViewPager.onPause();
}
@Override
protected void onResume() {
super.onResume();
mBannerCountViewPager.onReusme();
}
<com.zhengsr.viewpagerlib.indicator.TabIndicator
android:id="@+id/line_indicator"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:background="@color/black_ff"
app:tab_color="@color/white"
app:tab_width="25dp"
app:tab_height="5dp"
app:tab_text_default_color="@color/white_ff"
app:tab_text_change_color="@color/white"
app:tab_show="true"
app:tab_text_type="normaltext"
app:tab_textsize="16sp"
app:visiabel_size="3"
app:tap_type="tri"
>
</com.zhengsr.viewpagerlib.indicator.TabIndicator>
代码实现
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:background="@color/gray_cccc"
android:layout_height="wrap_content"/>
final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPager.setAdapter(new CusAdapter(getSupportFragmentManager()));
/**
* 把 TabIndicator 跟viewpager关联起来
*/
TabIndicator tabIndecator = (TabIndicator) findViewById(R.id.line_indicator);
tabIndecator.setViewPagerSwitchSpeed(viewPager,600);
tabIndecator.setTabData(viewPager,mTitle, new TabIndicator.TabClickListener() {
@Override
public void onClick(int position) {
//顶部点击的方法公布出来
viewPager.setCurrentItem(position);
}
});
}
class CusAdapter extends FragmentPagerAdapter{
public CusAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return mFragments.size();
}
}
<com.zhengsr.viewpagerlib.indicator.TabIndicator
android:id="@+id/line_indicator"
android:layout_gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/gray_cccc"
app:tab_color="@color/colorAccent"
app:tab_width="50dp"
app:tab_height="2dp"
app:tab_text_default_color="@color/black_ff"
app:tab_text_change_color="@color/colorAccent"
app:tab_show="true"
app:tab_text_type="normaltext"
app:tab_textsize="16sp"
app:visiabel_size="3"
app:tap_type="rect"
>
</com.zhengsr.viewpagerlib.indicator.TabIndicator>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:background="@color/gray_cccc"
android:layout_height="wrap_content"/>
final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
TabIndicator tritabIndecator = (TabIndicator) findViewById(R.id.line_indicator);
viewPager.setAdapter(new CusAdapter(getSupportFragmentManager()));
tritabIndecator.setViewPagerSwitchSpeed(viewPager,600);
// 使用这个方法,则使用xml里面的控件
//tritabIndecator.setTabData(viewPager,new TabIndicator.TabClickListener()
tritabIndecator.setTabData(viewPager, mTitle,new TabIndicator.TabClickListener() {
@Override
public void onClick(int position) {
viewPager.setCurrentItem(position);
}
});
}
class CusAdapter extends FragmentPagerAdapter{
public CusAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return mFragments.size();
}
}
<it.neokree.materialtabs.MaterialTabHost
android:id="@+id/tabHost"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_below="@+id/toolbar"
app:primaryColor="#009688"
app:accentColor="#ffc400" />
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/tabHost" />
代码实现
tabHost = (MaterialTabHost) this.findViewById(R.id.tabHost);
pager = (ViewPager) this.findViewById(R.id.pager );
// init view pager
adapter = new ViewPagerAdapter(getSupportFragmentManager());
pager.setAdapter(adapter);
pager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// when user do a swipe the selected tab change
tabHost.setSelectedNavigationItem(position);
}
});
// insert all tabs from pagerAdapter data
for (int i = 0; i < adapter.getCount(); i++) {
tabHost.addTab(
tabHost.newTab()
.setText(adapter.getPageTitle(i))
.setTabListener(this)
);
}
}
@Override
public void onTabSelected(MaterialTab tab) {
pager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabReselected(MaterialTab tab) {
}
@Override
public void onTabUnselected(MaterialTab tab) {
}
private class ViewPagerAdapter extends FragmentStatePagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
public Fragment getItem(int num) {
return new FragmentText();
}
@Override
public int getCount() {
return 16;
}
@Override
public CharSequence getPageTitle(int position) {
return "Section " + position;
}
}
设置指示器 icon实现:
for (int i = 0; i < pagerAdapter.getCount(); i++) {
tabHost.addTab(
tabHost.newTab()
.setIcon(getIcon(i))
.setTabListener(this)
);
}
<com.jcodecraeer.xrecyclerview.XRecyclerView
android:id="@+id/recyclerview"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
mRecyclerView = (XRecyclerView)this.findViewById(R.id.recyclerview);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setRefreshProgressStyle(ProgressStyle.BallSpinFadeLoader);
mRecyclerView.setLoadingMoreProgressStyle(ProgressStyle.BallRotate);
mRecyclerView.setArrowImageView(R.drawable.iconfont_downgrey);
View header = LayoutInflater.from(this).inflate(R.layout.recyclerview_header, (ViewGroup)findViewById(android.R.id.content),false);
mRecyclerView.addHeaderView(header);
mRecyclerView.getDefaultFootView().setLoadingHint("自定义加载中提示");
mRecyclerView.getDefaultFootView().setNoMoreHint("自定义加载完毕提示");
final int itemLimit = 5;
// When the item number of the screen number is list.size-2,we call the onLoadMore
mRecyclerView.setLimitNumberToCallLoadMore(2);
mRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
}
@Override
public void onLoadMore() {
});
GridLayoutManager layoutManager = new GridLayoutManager(this,3);
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setRefreshProgressStyle(ProgressStyle.BallSpinFadeLoader);
mRecyclerView.setLoadingMoreProgressStyle(ProgressStyle.BallRotate);
mRecyclerView.setArrowImageView(R.drawable.iconfont_downgrey);
mRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
}
@Override
public void onLoadMore() {
}
});
……
TwinklingRefreshLayout refreshLayout = (TwinklingRefreshLayout) findViewById(R.id.refresh);
ProgressLayout headerView = new ProgressLayout(this);
refreshLayout.setHeaderView(headerView);
View exHeader = View.inflate(this, R.layout.header_music, null);
refreshLayout.addFixedExHeader(exHeader);
refreshLayout.setOverScrollRefreshShow(false);
// refreshLayout.setFloatRefresh(true);
adapter = new MusicAdapter();
listView.setAdapter(adapter);
adapter.refreshCard();
final TwinklingRefreshLayout refreshLayout = (TwinklingRefreshLayout) findViewById(R.id.refresh);
// ProgressLayout headerView = new ProgressLayout(getContext());
BezierLayout headerView = new BezierLayout(this);
refreshLayout.setHeaderView(headerView);
// refreshLayout.setFloatRefresh(false);
refreshLayout.setPureScrollModeOn();
final TwinklingRefreshLayout refreshLayout = (TwinklingRefreshLayout) findViewById(R.id.refresh);
SinaRefreshView headerView = new SinaRefreshView(this);
headerView.setArrowResource(R.drawable.arrow);
headerView.setTextColor(0xff745D5C);
// TextHeaderView headerView = (TextHeaderView) View.inflate(this,R.layout.header_tv,null);
refreshLayout.setHeaderView(headerView);
LoadingView loadingView = new LoadingView(this);
refreshLayout.setBottomView(loadingView);
adapter = new ScienceAdapter();
gridView.setAdapter(adapter);
adapter.refreshCard();
final TwinklingRefreshLayout refreshLayout = (TwinklingRefreshLayout) findViewById(R.id.refresh);
// ProgressLayout headerView = new ProgressLayout(this);
BezierLayout headerView = new BezierLayout(this);
refreshLayout.setHeaderView(headerView);
refreshLayout.setMaxHeadHeight(140);
// refreshLayout.setFloatRefresh(true);
// refreshLayout.setPureScrollModeOn(true);
refreshLayout.setOverScrollBottomShow(false);
// refreshLayout.setAutoLoadMore(true);
// addHeader();
refreshCard();
refreshLayout.setOverScrollRefreshShow(false);
TwinklingRefreshLayout refreshLayout = (TwinklingRefreshLayout) findViewById(R.id.refreshLayout);
ProgressLayout header = new ProgressLayout(this);
refreshLayout.setHeaderView(header);
refreshLayout.setFloatRefresh(true);
refreshLayout.setOverScrollRefreshShow(false);
refreshLayout.setHeaderHeight(140);
refreshLayout.setMaxHeadHeight(240);
refreshLayout.setOverScrollHeight(200);
refreshLayout.setEnableLoadmore(false);
header.setColorSchemeResources(R.color.Blue, R.color.Orange, R.color.Yellow, R.color.Green);
// header.setColorSchemeColors(0xff4674e7,0xff0ba62c);
mWebView = (WebView) findViewById(R.id.webView);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("https://dribbble.com/shots");
refreshLayout.startRefresh();
final TwinklingRefreshLayout refreshLayout = (TwinklingRefreshLayout) findViewById(R.id.refresh);
ProgressLayout header = new ProgressLayout(this);
refreshLayout.setHeaderView(header);
refreshLayout.setFloatRefresh(true);
refreshLayout.setEnableOverScroll(false);
refreshLayout.setHeaderHeight(140);
refreshLayout.setMaxHeadHeight(240);
refreshLayout.setTargetView(rv);
refreshCard();
refreshLayout = (TwinklingRefreshLayout) findViewById(R.id.refresh);
SinaRefreshView headerView = new SinaRefreshView(this);
headerView.setArrowResource(R.drawable.arrow);
headerView.setTextColor(0xff745D5C);
// TextHeaderView headerView = (TextHeaderView) View.inflate(this,R.layout.header_tv,null);
refreshLayout.setHeaderView(headerView);
LoadingView loadingView = new LoadingView(this);
refreshLayout.setBottomView(loadingView);
adapter = new ScienceAdapter();
gridView.setAdapter(adapter);
adapter.refreshCard();
在Activity中初始化ViewUtils.inject(this);,最好在父类中
在Fragment中初始化ViewUtils.inject(getActivity(),view);
控件注解:
@ViewInject(R.id.btn_demo1)
Button mButton;
事件注解:
@OnClick(R.id.btn_demo1)
public void onClickDemo(View v){
}