android-ActionBarCompat-ShareActionProvider
一个上下文相关的分享提供者
layout
ViewPager
ViewPage是Android拓展包v4包中的类,可以让用户左右切换当前的View,官方api的描述如下:
Layout manager that allows the user to flip left and right through pages of data. You supply an implementation of a PagerAdapter to generate the pages that the view shows.
ViewPager is most often used in conjunction with Fragment, which is a convenient way to supply and manage the lifecycle of each page. There are standard adapters implemented for using fragments with the ViewPager, which cover the most common use cases. These are FragmentPagerAdapter and FragmentStatePagerAdapter; each of these classes have simple code showing how to build a full user interface with them.
从这个描述中我们可以知道以下几点:
- ViewPager绝大多数情况下和Frament结合使用,并且提供了FragmentPagerAdapter 和 FragmentStatePagerAdapter
- ViewPager需要配合PagerAdaper使用,PagerAdapter的作用是产生展示view的页面
TextView
1 | android:textAppearance="?android:textAppearanceMedium" |
这是设置文字的外观,引用系统自带的一个外观, ? 表示系统是否有这种外观,否则使用默认的外观
1 | android:lineSpacingMultiplier="1.1" |
设置行间距的倍数
1 | android:lineSpacingExtra = "7dp" |
设置行间距
ImageView
1 | android:scaleType="fitCenter" //使用 CENTER 方式缩放图像 |
这是将图片边界缩放,以适应视图边界时的可选项.可参阅
ImageView.ScaleType代码演示
MainActivity
setOnPageChangeListener
第68行:ViewPager的setOnPageChangeListener弃用
将 setOnPageChangeListener 改为 addOnpageChangeListener
具体源码如下:
1 | /** |
其含义就是设置一个监听器用来监控页面改变或者递增的滚动.
OnPageChangeListener
OnPageChangeListener是一个接口,需要去自行实现
具体源码如下:
1 | /** |
从源码可以看出该接口是当选中页面状态改变时做出响应的,需要实现依次三个方法,三个方法分别对应着onPageScrolled(int position, float positionOffset, int positionOffsetPixels)(当页面滚动的时候),onPageSelected(int position)(当页面被选的时候),onPageScrollStateChanged(int state)(当页面滚动状态改变的时候)
PagerAdapter
官方api的说明:
Base class providing the adapter to populate pages inside of a ViewPager.You will most likely want to use a more
specific implementation of this, such as android.support.v4.app.FragmentPagerAdapter or
android.support.v4.app.FragmentStatePagerAdapter.
大致意思就是提供一个填充ViewPager中的页面内容的适配器.然后可能使用FragmentPagerAdapter和FragmentStatePagerAdapter可能性更高.
当继承PageAdapter的是否,需要重写以下的方法:
- instantiateItem(ViewGroup, int)
- destroyItem(ViewGroup, int, Object)
- getCount()
- isViewFromObject(View, Object)
具体源码如下:
1 | /** |
根据源码说的注释说明,可以得知:
- **instantiateItem(View container, int position)*该方法是在指定位置创建相应的页面,其中参数container*是展示页面中的view,参数position页面被实例化的位置,不过该方法现在已经被弃用,改用为instantiateItem(ViewGroup container, int position)
- **destroyItem(View container, int position, Object object)*该方法是移除指定位置的页面,其中参数container*是将要被移走页面的view,参数position是将要被移除页面的位置,参数object是由instantiateItem(View, int)返回的对象,该方法也被弃用,改用为destroyItem(ViewGroup, int, Object)
- **getCount()**该方法这是返回可以获取到的view数量
- isViewFromObject(View view, Object object) 判断当前view跟由instantiateItem(ViewGroup, int)返回的对象是否有关联,如果有则返回true,参数view需要校验的view,参数object需要校验的对象
LayoutInflater
layoutInflater其作用类似findViewById(),不同点则是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等).
具体作用:
- 对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入
- 对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素
LayoutInflater 是一个抽象类,在文档中如下声明:
1 | public abstract class LayoutInflater extends Object |
获得 LayoutInflater 实例的三种方式:
- LayoutInflater inflater = getLayoutInflater(); //调用Activity的getLayoutInflater()
- LayoutInflater inflater = LayoutInflater.from(context);
- LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LayoutInflater的inflate方法
1 | public View inflate(int resource, ViewGroup root) { |
其返回值均为view,但是值得注意的是:inflater 是用来找 res/layout 下的 xml 布局文件,并且实例化;findViewById() 是找具体 xml 布局文件中的具体 widget 控件(如:Button、TextView 等
ShareActionProvider
官网api说明:
Provides a share action, which is suitable for an activity’s app bar. Creates views that enable data sharing. If the provider appears in the overflow menu, it creates a submenu with the appropriate sharing actions.
从上述描述我们可以ShareActionProvider其实会提供一个分享的按钮.如果分享按钮出现在溢出菜单,它会创建一个合适的子菜单
onCreateOptionsMenu
1 | public boolean onCreateOptionsMenu(Menu menu) { |
此方法用于初始化菜单,其中menu参数就是即将要显示的Menu实例.返回true则显示该menu,false 则不显示,只会在第一次初始化菜单时调用.
Activity菜单机制
Activity有一套机制来实现对菜单的管理,方法如下:
- public boolean onCreateOptionsMenu(Menu menu)
- public boolean onPrepareOptionsMenu(Menu menu) 在onCreateOptionsMenu执行后,菜单被显示前调用;如果菜单已经被创建,则在菜单显示前被调用.同样的,返回true则显示该menu,false 则不显示;(可以通过此方法动态的改变菜单的状态,比如加载不同的菜单等)
- public void onOptionsMenuClosed(Menu menu) 每次菜单被关闭时调用.(菜单被关闭有三种情形,menu按钮被再次点击,back按钮被点击或者用户选择了某一个菜单项)
- public boolean onOptionsItemSelected(MenuItem item) 菜单项被点击时调用,也就是菜单项的监听方法