建设网站的基础知识,互联网行业都有哪些工作赚钱,网站的建设方法包括什么,wordpress 8.0MPGankIO 布局篇整个App到了这里就开始准备开始实现逻辑啦#xff0c;有没有点小期待后续如果有需要可以爬一波包包通缉令的数据O(∩_∩)O~~我们的布局采用5.0之后的新布局控件1.CardViewCardView特别的属性如下#xff1a;android:cardCornerRadius#xff1a;在布局中设置…MPGankIO 布局篇整个App到了这里就开始准备开始实现逻辑啦有没有点小期待后续如果有需要可以爬一波包包通缉令的数据O(∩_∩)O~~我们的布局采用5.0之后的新布局控件1.CardViewCardView特别的属性如下android:cardCornerRadius在布局中设置card圆角的大小CardView.setRadius在代码中设置card圆角的大小android:cardBackgroundColor在布局中设置card背景的颜色android:elevation设置阴影的大小card_view:cardElevation 阴影的大小card_view:cardMaxElevation 阴影最大高度card_view:cardCornerRadius 卡片的圆角大小card_view:contentPadding 卡片内容于边距的间隔card_view:contentPaddingBottomcard_view:contentPaddingTopcard_view:contentPaddingLeftcard_view:contentPaddingRightcard_view:contentPaddingStartcard_view:contentPaddingEndcard_view:cardUseCompatPadding 设置内边距V21的版本和之前的版本仍旧具有一样的计算方式**card_view:cardPreventConrerOverlap在V20和之前的版本中添加内边距这个属性为了防止内容和边角的重叠**我们要使用这个CardView来做卡片式的列表xmlns:apphttp://schemas.android.com/apk/res-autoandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:layout_margin5dpandroid:foreground?android:attr/selectableItemBackgroundandroid:orientationverticalapp:contentPadding5dpandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:idid/tv_titlestylestyle/txt_normal_styleandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:layout_marginLeft5dpandroid:ellipsizeendandroid:gravitystartandroid:maxLines3android:text标题android:textSize16sp/android:idid/tv_namestylestyle/txt_normal_styleandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_alignParentBottomtrueandroid:layout_belowid/tv_titleandroid:layout_marginTop10dpandroid:gravitybottomandroid:text作者android:textColorcolor/colorPrimary/android:idid/tv_publishtimestylestyle/txt_normal_styleandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_alignParentBottomtrueandroid:layout_alignParentRighttrueandroid:layout_belowid/tv_titleandroid:layout_marginTop10dpandroid:gravitybottomandroid:text发表时间/CardView 大部分适用于 listView 或者recyclerView的item中。2.RecyclerViewRecyclerView与ListView原理是类似的都是仅仅维护少量的View并且可以展示大量的数据集。RecyclerView用以下两种方式简化了数据的展示和处理:使用LayoutManager来确定每一个item的排列方式。为增加和删除项目提供默认的动画效果。你也可以定义你自己的LayoutManager和添加删除动画,SDK中默认包含了三种布局1. 横向布局(LinearLayoutManager)2. Grid布局(GridLayoutManager)3. 瀑布流布局(StaggeredGridLayoutManager)Adapter使用RecyclerView之前你需要一个继承自RecyclerView.Adapter的适配器作用是将数据与每一个item的界面进行绑定。LayoutManager用来确定每一个item如何进行排列摆放何时展示和隐藏。回收或重用一个View的时候LayoutManager会向适配器请求新的数据来替换旧的数据这种机制避免了创建过多的View和频繁的调用findViewById方法(与ListView原理类似)。总而言之就相当于ListView封装后再抽象使item更加灵活项目中我使用的是XRecyclerView,是封装了上拉刷新和下拉加载的一个库非常好用还有挺多的加载动画可以切换,使用的方法也很简单哈哈偷懒 不都是说为了不要重复造轮子嘛~你懂的3.Fragment这个应该不用多讲了相信大家都会的4.代码附上MainFragment.java 这个就是为了在主页将一些数据初始化为了给TypeFragment拿到类型数据为什么使用FragmentStateAdapter而不用FragmentPagerAdapter是因为viewpager页数比较多FragmentStateAdatper的机制是空置的时候将其销毁释放内存,而FragmentPagerAdapter是将其dettach因此选用FragmentSteteAdapterGankViewPagerAdapter.javapublic class GankViewPagerAdapter extends FragmentStatePagerAdapter {private List mFragments;private List mTitles;public GankViewPagerAdapter(FragmentManager fm, List fragments, List titles) {super(fm);this.mFragments fragments;this.mTitles titles;}Overridepublic Fragment getItem(int position) {return mFragments.get(position);}Overridepublic int getCount() {return mFragments.size();}Overridepublic CharSequence getPageTitle(int position) {return mTitles.get(position);}}大家如果之前理解过MVP架构应该就会发现我调用的方式啦TypeFragment.java 核心模块public class TypeFragment extends BaseMvpFragment implementsTypeFragmentView {private static final String ARG_PARAM1 type;BindView(R.id.rv_list)XRecyclerView rvList;private String mCategory;private View rootView;private GankTypeCardAdapter mGankTypeCardAdapter;private List mDatas;private int curPage 1;Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (getArguments() ! null) {mCategory getArguments().getString(ARG_PARAM1);}initVariables();}Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {rootView inflater.inflate(R.layout.fragment_type, container, false);ButterKnife.bind(this, rootView);resetDatas();initViews();return rootView;}Overridepublic void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putString(ARG_PARAM1, mCategory);}Overridepublic void onViewStateRestored(Bundle savedInstanceState) {super.onViewStateRestored(savedInstanceState);if (savedInstanceState ! null) {mCategory ConvertUtil.toString(savedInstanceState.getString(ARG_PARAM1), );//避免为NULL}}Overridepublic void initVariables() {mDatas new ArrayList();}Overridepublic void initViews() {initRecyclerView();presenter.getTypeGankList();}private void initRecyclerView() {rvList.setPullRefreshEnabled(true);rvList.setLoadingMoreEnabled(true);rvList.setLoadingListener(new XRecyclerView.LoadingListener() {Overridepublic void onRefresh() {resetDatas();presenter.getTypeGankList();}Overridepublic void onLoadMore() {presenter.getTypeGankList();}});}Overrideprotected TypePresenter initPresenter() {return new TypePresenter();}public static TypeFragment newInstance(String type) {TypeFragment fragment new TypeFragment();Bundle args new Bundle();args.putString(ARG_PARAM1, type);fragment.setArguments(args);return fragment;}Overridepublic String getCategory() {return mCategory;}Overridepublic int getCurPage() {return curPage;}Overridepublic void addOnePage() {curPage;}Overridepublic void makeUpDatas(List datas) {mDatas.addAll(datas);}Overridepublic void notifyAdapter() {if (mGankTypeCardAdapter null) {mGankTypeCardAdapter new GankTypeCardAdapter(mActivity, mDatas);rvList.setLayoutManager(new LinearLayoutManager(mActivity));rvList.setAdapter(mGankTypeCardAdapter);}// TODO: 16/8/19 //此处可以优化成动画效果以及item逐个优化不需要整个重新排列mGankTypeCardAdapter.notifyDataSetChanged();rvList.refreshComplete();rvList.loadMoreComplete();}Overridepublic void resetDatas() {curPage 1;mDatas.clear();if (mGankTypeCardAdapter ! null) {mGankTypeCardAdapter.notifyDataSetChanged();}}Overridepublic void onDestroyView() {mGankTypeCardAdapter null;super.onDestroyView();}}最后就是P中调用V啦 就是传说中的解耦到此基本上的请求列表功能结束啦下一篇最终章就是列表点击事件和链接的内容页面有问题可以来我博客或者简书反馈,谢谢大家的停留在这里时间