Android Material新控件.doc_第1页
Android Material新控件.doc_第2页
Android Material新控件.doc_第3页
Android Material新控件.doc_第4页
Android Material新控件.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android M 新控件11、 配置12、 RecyclerView控件12.1 RecyclerView样式12.2 RecyclerView 适配器22.3 ItemView点击事件32.4 RecyclerView添加,删除,更新数据43、 CardView控件44、 Palette55、 Toolbar65.1 Toolbar的基础使用66、 FloatingActionButton77、 TextInputLayout88、 Snackbar的使用99、 AppBarLayout1010、 TabLayout1111、 CoordinatorLayout1412、 CollapsingToolbarLayout1613、 NavigationView17Android M 新控件1、 配置/feiduclear_up/article/details/46439005引用Support v7包:dependencies compile fileTree(include: *.jar, dir: libs) compile com.android.support:recyclerview-v7:21.0.3 compile com.android.support:cardview-v7:21.0.3 compile com.android.support:palette-v7:22.2.02、 RecyclerView控件2.1 RecyclerView样式1) 、RecyclerView也是一个继承ViewGroup的容器控件,用于在有限的界面视图情况下装载更多的内容。2) 、RecyclerView虽然也是容器控件,大多数的效果显示可以通过代码来控制显示,但是RecyclerView更加自由,更加包容,用户更容易去定义它的内容显示方式。private void initViews() recylerView = findView(R.id.recyclerview); /设置布局显示方式 recylerView.setLayoutManager(new LinearLayoutManager(this, LinearLayout.VERTICAL, true); /设置添加删除item时候的动画 recylerView.setItemAnimator(new DefaultItemAnimator();setLayoutManager()方法接受一个 LayoutManager 布局管理参数。参数类型可以有以下几种:、LinearLayoutManager:线性布局、GridLayoutManager:网格布局、StaggeredGridLayoutManager:流式布局那么怎么new一个LayoutManager出来呢?举个例子:new LinearLayoutManager(this, LinearLayout.VERTICAL, true)第一个参数 Context ,第二个参数:布局方向LinearLayout.VERTICAL垂直和LinearLayout.HORIZONTAL水平,第三个参数:表示是否从最后的Item数据开始显示,ture表示是,false就是正常显示从开头显示。setItemAnimator()方法的作用是设置当前RecyclerView容器有子Item改变时(添加item或者删除item)导致整个布局的动画效果。一般我们new 一个系统默认的动画出来就好了。2.2 RecyclerView 适配器public class RecyclerAdapter extends RecyclerView.Adapter private Context context; private List list; private Resources res; public RecyclerAdapter(Context context, List list) this.context = context; this.list = list; res = context.getResources(); Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) View view = LayoutInflater.from(context).inflate(R.layout.item_card_view, parent, false); return new MyViewHolder(view); Override public void onBindViewHolder(final MyViewHolder holder, final int position) final ModelBean bean = list.get(position); holder.title.setText(bean.getTitle(); holder.imageView.setImageResource(bean.getResId(); Override public int getItemCount() return null = list ? 0 : list.size(); public class MyViewHolder extends RecyclerView.ViewHolder private ImageView imageView; private TextView title; public MyViewHolder(View view) super(view); imageView = (ImageView) view.findViewById(R.id.pic); title = (TextView) view.findViewById(R.); 通过内部类MyViewHolder继承RecyclerView.ViewHolder封装容器中的ItemView,实现onCreateViewHolder抽象方法来加载ItemView的布局,实现onBindViewHolder抽象方法来绑定容器中的ItemView,进而进行赋值。2.3 ItemView点击事件Override public void onBindViewHolder(final MyViewHolder holder, final int position) final ModelBean bean = list.get(position); holder.title.setText(bean.getTitle(); holder.imageView.setImageResource(bean.getResId();/* * 调用接口回调 */ holder.itemView.setOnClickListener(new View.OnClickListener() Override public void onClick(View v) if (null != listener) listener.onItemClick(position, bean); ); /* * 内部接口回调方法 */ public interface OnItemClickListener void onItemClick(int position, Object object); /* * 设置监听方法 * * param listener */ public void setOnItemClickListener(OnItemClickListener listener) this.listener = listener;2.4 RecyclerView添加,删除,更新数据1)、notifyDataSetChanged():更新所有数据2)、notifyItemInserted(int position):在position位置插入数据的时候更新3)、notifyItemRemoved(int position):移除postion位置的数据的时候更新4)、notifyItemChanged(int position):当postion位置数据有改变时候更新5)、notifyItemMoved(int fromPosition, int toPosition):移除从位置formPosition到toPosition位置数据更新6)、notifyItemRangeChanged(int positionStart, int itemCount)7)、notifyItemRangeInserted(int positionStart, int itemCount)8)、notifyItemRangeRemoved(int positionStart, int itemCount)3、 CardView控件CardView是继承自FrameLayout。 在使用CardView的时候需要引入属性命名空间,也就是加入以下代码:xmlns:card=/apk/res-auto注意:关于android5.0以上使用 v7包的CardView没有阴影效果的问题。这里直接给出答案:在CardView 添加如下属性即可: card:cardPreventCornerOverlap=true card:cardUseCompatPadding=true4、 PalettePalette类也是Android5.0引进来的一个获取Bitmap颜色值的一个类。 /异步获得bitmap图片颜色值 Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() Override public void onGenerated(Palette palette) Palette.Swatch vibrant = palette.getVibrantSwatch();/有活力 if (vibrant != null) holder.title.setBackgroundColor( vibrant.getRgb(); holder.title.setTextColor( vibrant.getTitleTextColor(); );由于在Android设备中,对图像的处理有可能是耗时操作,因此,Palette类通过异步接口onGenerated回调的方法来获得Bitmap的颜色值。Palette类获得的颜色值有以下几种类型:1)、Palette.Swatch a = palette.getVibrantSwatch();/有活力2)、Palette.Swatch b = palette.getDarkVibrantSwatch();/有活力 暗色3)、Palette.Swatch c = palette.getLightVibrantSwatch();/有活力 亮色4)、Palette.Swatch d = palette.getMutedSwatch();/柔和5)、Palette.Swatch e = palette.getDarkMutedSwatch();/柔和 暗色6)、Palette.Swatch f = palette.getLightMutedSwatch();/柔和 亮色我们从以上颜色中可以获取到如下颜色值:1)、int color1 = a.getBodyTextColor();/内容颜色2)、int color2 = a.getTitleTextColor();/标题颜色3)、int color3 = a.getRgb();/rgb颜色5、 Toolbar/feiduclear_up/article/details/46457433在使用Android5.x中的Toolbar和Theme需要在你的工程的build.gradle文件下引入如下配置:dependencies compile fileTree(dir: libs, include: *.jar) compile com.android.support:appcompat-v7:22.2.0Toolbar的出现解决了Actionbar的各种限制,Toolbar可以完全自定义和配置。5.1 Toolbar的基础使用Style:为了能在你的Activity中使用Toolbar,你必须在工程里修改styles.xml文件里的主题风格。这个主题表示不使用系统的Actionbar了,这是第一步。Layout布局: Toolbar 配置主题:我们重新配置系统主题Theme,修改styles.xml代码如下: color/accent_material_dark color/accent_material_light android:color/black color/material_blue_grey_800 #00ff00 #ff0000 color/accent_material_light android:color/whiteToolbar中常用的控件设置:Toolbar可以设置 Title(主标题),Subtitle(副标题),Logo(logo图标)NavigationIcon(导航按钮)。注意 如果你想要通过toolbar.setTitle(“主标题”);设置Toolbar的标题,你必须在调用它之前调用如下代码:getSupportActionBar().setDisplayShowTitleEnabled(false);其实Toolbar是继承ViewGroup的一个容器控件,言外之意就是我们可以在Toolbar添加自己的布局了。6、 FloatingActionButton效果图:1) 、FloatingActionButton是重写ImageView的,所有FloatingActionButton拥有ImageView的一切属性。app:fabSize :FloatingActionButton的大小,有两种赋值分别是 “mini” 和 “normal”,默认是“normal”.app:backgroundTint:FloatingActionButton的背景颜色,默认的背景颜色是Theme主题中的app:elevation :FloatingActionButton阴影的深度,默认是有阴影的,如果觉得默认阴影深度有点大,可以改变这个属性来修改阴影深度。注意:不能通过 android:background 属性来改变 FloatingActionButton的背景颜色,只能通过app:backgroundTint属性改变,因为FloatingActionButton是继承自ImageView的。7、 TextInputLayout该控件是用于EditView输入框的,主要解决之前EditView在获得焦点编辑时hint属性提示语消失。TextInputLayout是继承自LinearLayout容器布局,因此我们需要将EditView包含在TextInputLayout之内才可以使用,言外之意:TextInputLayout不能单独使用。效果图:代码布局: 示例代码:final TextInputLayout inputLayout = findView(R.id.textInput); inputLayout.setHint(请输入姓名:); EditText editText = inputLayout.getEditText(); editText.addTextChangedListener(new TextWatcher() Override public void beforeTextChanged(CharSequence s, int start, int count, int after) Override public void onTextChanged(CharSequence s, int start, int before, int count) if (s.length()4) inputLayout.setErrorEnabled(true); inputLayout.setError(姓名长度不能超过4个); else inputLayout.setErrorEnabled(false); Override public void afterTextChanged(Editable s) );TextInputLayout 不仅能让EditView的提示语上弹显示在EditView之上,而且还能把错误信息显示在EditView之下。TextInputLayout常用的方法有如下:1)、setHint():设置提示语。2)、getEditText():得到TextInputLayout中的EditView控件。3)、setErrorEnabled():设置是否可以显示错误信息。4)、setError():设置当用户输入错误时弹出的错误信息。注意点:TextInputLayout不能单独使用,需要包裹EditView组件。8、 Snackbar的使用Snackbar提供了一个介于Toast和AlertDialog之间轻量级控件,它可以很方便的提供消息的提示和动作反馈。效果图:Snackbar的使用和Toast很类似,调用代码如下:final Snackbar snackbar = Snackbar.make(inputLayout,测试弹出提示,Snackbar.LENGTH_LONG); snackbar.show(); snackbar.setAction(取消,new View.OnClickListener() Override public void onClick(View v) snackbar.dismiss(); );第一个参数View 可以是当前父布局中的任何一个view对象都可以。之后的参数和Toast参数一样。Snackbar可以设置Action行为事件,使用的方法是public Snackbar setAction (CharSequence text, View.OnClickListener listener); 也可以为Snackbar设置多个Action行为事件。Action的字体颜色默认使用系统主题中的如下颜色#ff0000当然你可以通过代码去改变Action的字体颜色:Snackbar setActionTextColor (int color);注意:Snackbar可以同时设置多个Action行为事件Snackbar是从整个界面的底部弹出。9、 AppBarLayout效果图:AppBarLayout 是继承LinerLayout实现的一个ViewGroup 容器组件。默认的AppBarLayout 是垂直方向的,它的作用是把AppBarLayout包裹的内容都作为AppBar。注意:AppBarLayout必须作为Toolbar的父布局容器。AppBarLayout是支持手势滑动效果的,一般跟CoordinatorLayout配合使用。10、 TabLayout效果图:XML 布局: android.support.design.widget.TabLayout android:id=+id/tabs app:tabSelectedTextColor=android:color/holo_blue_bright app:tabTextColor=android:color/black app:tabIndicatorColor=android:color/holo_blue_bright android:layout_width=match_parent android:layout_height=wrap_content /常用的属性有三个:app:tabSelectedTextColor:Tab被选中字体的颜色app:tabTextColor:Tab未被选中字体的颜色app:tabIndicatorColor:Tab指示器下标的颜色TabLayout常用的方法如下: - addTab(TabLayout.Tab tab, int position, boolean setSelected) 增加选项卡到 layout 中 - addTab(TabLayout.Tab tab, boolean setSelected) 同上 - addTab(TabLayout.Tab tab) 同上 - getTabAt(int index) 得到选项卡 - getTabCount() 得到选项卡的总个数 - getTabGravity() 得到 tab 的 Gravity - getTabMode() 得到 tab 的模式 - getTabTextColors() 得到 tab 中文本的颜色 - newTab() 新建个 tab - removeAllTabs() 移除所有的 tab - removeTab(TabLayout.Tab tab) 移除指定的 tab - removeTabAt(int position) 移除指定位置的 tab - setOnTabSelectedListener(TabLayout.OnTabSelectedListener onTabSelectedListener) 为每个 tab 增加选择监听器 - setScrollPosition(int position, float positionOffset, boolean updateSelectedText) 设置滚动位置 - setTabGravity(int gravity) 设置 Gravity - setTabMode(int mode) 设置 Mode,有两种值:TabLayout.MODE_SCROLLABLE和TabLayout.MODE_FIXED分别表示当tab的内容超过屏幕宽度是否支持横向水平滑动,第一种支持滑动,第二种不支持,默认不支持水平滑动。 - setTabTextColors(ColorStateList textColor) 设置 tab 中文本的颜色 - setTabTextColors(int normalColor, int selectedColor) 设置 tab 中文本的颜色 默认 选中 - setTabsFromPagerAdapter(PagerAdapter adapter) 设置 PagerAdapter - setupWithViewPager(ViewPager viewPager) 和 ViewPager 联动一般TabLayout都是和ViewPager共同使用才发挥它的优势,现在我们通过代码来看看以上方法的使用。viewPager = findView(R.id.viewPager);tabLayout = findView(R.id.tabs);List tabList = new ArrayList();tabList.add(Tab1);tabList.add(Tab2);tabList.add(Tab3);tabLayout.setTabMode(TabLayout.MODE_FIXED);/设置tab模式,当前为系统默认模式tabLayout.addTab(tabLayout.newTab().setText(tabList.get(0);/添加tab选项卡tabLayout.addTab(tabLayout.newTab().setText(tabList.get(1);tabLayout.addTab(tabLayout.newTab().setText(tabList.get(2);List fragmentList = new ArrayList();for (int i = 0; i tabList.size(); i+) Fragment f1 = new TabFragment(); Bundle bundle = new Bundle(); bundle.putString(content, /feiduclear_up n CSDN 废墟的树); f1.setArguments(bundle); fragmentList.add(f1);TabFragmentAdapter fragmentAdapter = new TabFragmentAdapter(getSupportFragmentManager(), fragmentList, tabList);viewPager.setAdapter(fragmentAdapter);/给ViewPager设置适配器tabLayout.setupWithViewPager(viewPager);/将TabLayout和ViewPager关联起来。tabLayout.setTabsFromPagerAdapter(fragmentAdapter);/给Tabs设置适配器就不解释了,都有注释,来看看以上代码的TabFragmentAdapter和TabFragment实现如下:TabFragmentAdapterpublic class TabFragmentAdapter extends FragmentStatePagerAdapter private List mFragments; private List mTitles; public TabFragmentAdapter(FragmentManager fm, List fragments, List titles) super(fm); mFragments = fragments; mTitles = titles; Override public Fragment getItem(int position) return mFragments.get(position); Override public int getCount() return mFragments.size(); Override public CharSequence getPageTitle(int position) return mTitles.get(position); TabFragmentpublic class TabFragment extends Fragment private String content; private View view; Override public View onCreateView(LayoutInflater inflater, Nullable ViewGroup container, Nullable Bundle savedInstanceState) view = inflater.inflate(R.layout.item, container,false); return view; Override public void onActivityCreated(Nullable Bundle savedInstanceState) super.onActivityCreated(savedInstanceState); content = getArguments().getString(content); TextView tvContent = (TextView) view.findViewById(R.id.tv_tab_content); tvContent.setText(content + ); 注意 :有这么一种情况,当Tabs中的内容超过了手机屏幕的宽度时,Tabs选项卡中的tab为什么不支持水平滑动?其实TabLayout是支持水平滑动的,只需要你在代码中添加如下一行即可:tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);/设置tab模式11、 CoordinatorLayout/feiduclear_up/article/details/46514791效果图:CoordinatorLayout是一个增强型的FrameLayout。它的作用有两个:1)、作为一个布局的根布局2)、最为一个为子视图之间相互协调手势效果的一个协调布局注意1:由于CoordinatorLayout是FrameLayout布局,我们可以通过android:layout_gravity=bottom|end属性来控制组件在整个布局中的位置,比如上面效果中的FAB就是通过android:layout_gravity=”bottom|end”来确定 FAB的位置在底端的最右边的位置。注意2:为了达到上面效果图的手势动画效果,我们必须做如下设置,通过app:layout_scrollFlags=”scroll|enterAlways” 属性来确定哪个组件是可滑动的。设置的layout_scrollFlags有如下几种选项:scroll: 所有想滚动出屏幕的view都需要设置这个flag- 没有设置这个flag的view将被固定在屏幕顶部。enterAlways: 这个flag让任意向下的滚动都会导致该view变为可见,启用快速“返回模式”。enterAlwaysCollapsed: 当你的视图已经设置minHeight属性又使用此标志时,你的视图只能已最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度。exitUntilCollapsed: 滚动退出屏幕,最后折叠在顶端。注意3:给你的可滑动的组件,也就是RecyclerView 或者 NestedScrollView 设置如下属性: app:layout_behavior=string/appbar_scrolling_view_behavior(经过测试,ListView,ScrollView不支持)12、 CollapsingToolbarLayout效果图:CollapsingToolbarLayout包裹 Toolbar 的时候提供一个可折叠的 Toolbar,一般作为AppbarLayout的子视图使用。CollapsingToolbarLayout 提供以下属性和方法是用:1)、Collapsing

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论