在安卓6.0里,应用许可提示可以自定义了。它允许对应用的权限进行高度管理,比如应用能否使用位置、相机、麦克风、通讯录等,这些都可以开放给开发者和用户。
Android6.0 引入了一个新的应用权限模型,期望对用户更容易理解,更易用和更安全。该模型将标记为危险的权限从安装时权限(Install Time Permission)模型 移动到 运行时权限模型(Runtime Permissions):
安装时权限模型(Android5.1以及更早)。用户在应用安装和更新时,对危险权限授权。但是OEM和运行商预装的应用将自动预授权。 运行时权限(Android6.0及以后)。用户在应用运行时,对应用授予危险权限。由应用决定何时去申请权限(例如,在应用启动时或者用户访问某个特性时),但必须容许用户来授予或者拒绝应用对特定权限组的访问。OEM和运营商 可以预装应用,但是不能对权限进行预授权(例外情况请看这里Create exception)。 运行时权限提供给用户关于应用所需权限更多的相关上下文和可视性,这也让开发者帮助用户更好的理解:为什么应用需要所请求的权限,授权将有什么样的好处,拒绝将有何种不便。用户可以通过设置中的菜单来撤销应用的权限。
受影响的权限 系统要求标记为危险(dangerous)的权限使用运行时权限模型。查看危险权限列表可以使用命令:adb shell pm list permissions -g -d。
Android6.0并不改变正常权限的行为。正常权限指的是所有非危险(non-dangerous)权限,包括normal,system和signature 权限。正常权限风险较低,用于容许应用以最小风险来访问隔离的应用级别的特性。在Android5.1和早期版本中,系统在安装时自动将正常权限授予请求的应用,并不提示用户。
请求 运行时权限模型适用于所有应用,包括预装应用。应用软件的要求包括: 运行时权限模型必须在所有运行Android6.0的设备上是一致的。这通过CTS来实施。 应用必须在运行时提示用户进行授权。 带有危险权限的预装应用,必须符合API level 23,必须维护Android6.0的AOSP权限模型(例如,应用安装的UI流程不应该脱离AOSP的packageInstaller的实现;用户可以撤销预装应用的危险权限;等等)。 无界面的应用必须使用Activity来申请权限,或者与其他有相应权限的应用共享UID。细节请参考Headless applications。 权限迁移
在设备从Android5.x升级到Android6.0之后,授予应用的权限仍然有效。但是用户可以在任何时候撤销这些权限。
高级炫酷带有提示的输入框,相当于输入框中的战斗框 使用需要依赖design类库: compile ‘com.android.support:design:23.0.0+’ 使用步骤: 先在TextInputLayout中包裹一个EditText,如: 然后给EditText添加文本变化监听器: 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) {
}
@Override public void afterTextChanged(Editable s) { if(s.length() > 5){ //设置错误提示信息 inputLayout.setError(“不能超过5个”); //启用错误提示 inputLayout.setErrorEnabled(true); }else{ //关闭错误提示 inputLayout.setErrorEnabled(false); } } });
总是能悬浮在界面上的Button,可以设置点击事件 使用需要依赖design类库: compile ‘com.android.support:design:23.0.0+’ 可以设置以下属性: app:fabSize=”normal”//2个取值,normal=56dp,mini=48dp app:elevation=”10dp”//高度 app:rippleColor=”#0000ff”//按下水波纹颜色 app:PRessedTranslationZ=”20dp”//按下Z轴移动距离 注意:设置android:clickable=”true”才有按下的效果
一个介于Toast和Dialog之间的和用户交互的控件,显示在界面底部,并且可以设置点击行为,也可以滑动出去 在和FloatingActionButton一起使用时,需要让CoordinatorLayout作为父布局才能使FloatingActionButton给SnackBar腾出空间
相当于ViewPagerIndicator的指示器效果,一般用来跟ViewPager结合使用 使用需要依赖design类库: compile ‘com.android.support:design:23.0.0+’ 单独使用TabLayout的步骤: 先添加Tab,使用tabLayout.newTab()方法创建Tab: //1.添加Tab tabLayout.addTab(tabLayout.newTab().setText(“Tab1”)); 给tabLayout设置tab改变的监听器: //2.给tabLayout添加tab改变的监听器 tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { Log.e(“TAG”, “onTabSelected: “+tab.getText()); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); 在xml中给TabLayout设置属性: app:tabIndicatorColor=”#00f”//横线颜色 app:tabSelectedTextColor=”#f00”//选中字体颜色 app:tabTextColor=”#0f0”//默认字体颜色 app:tabMode=”fixed”//fixed:不能滑动,每个Tab平分宽度,scrollable:可以滑动tab,每个tab宽度很小,适用于tab很多的情景 app:tabGravity=”fill”//fill:平分宽度,center:让tab居中,如果tabMode是scrollable,那tabGravity会被忽略 和ViewPager关联使用步骤: 先给ViewPager填充数据,然后关联TabLayout和ViewPager: //给ViewPager填充数据 viewpager.setAdapter(new MyAdapter()); //关联TabLayout和ViewPager tabLayout.setupWithViewPager(viewpager); 需要注意的是,ViewPager的adapter的getPageTitle()方法的返回值将会设置给Tab的标题
协调布局,能够协调多个布局的位置关系,可以实现让FAB上下滑动,展开或折叠ToolBar,控制View扩展收缩以及放大缩小 使用需要依赖design类库: compile ‘com.android.support:design:23.0.0+’ 使用它结合AppBarLayout实现向上滑动隐藏ToolBar的效果: AppBarLayout会将包裹的所有子View作为一个整体的AppBar,有着统一的界面着色; app:layout_scrollFlags属性介绍: scroll:表示该View可以被滑动出CoordinatorLayout的范围,所有想滚动出屏幕的view都需要设置这个flag, 没有设置这个flag的view将被固定在屏幕顶部。例如,TabLayout 没有设置这个值,将会停留在屏幕顶部 enterAlways:表示任意向下的滚动都会导致该View可见 exitUntilCollapsed:滚动退出屏幕,最后折叠在顶端 enterAlwaysCollapsed:当你的视图已经设置minHeight属性又使用此标志时,你的视图只能以最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度 给想滑动出范围的View设置属性,比如ToolBar: app:layout_scrollFlags=”scroll|enterAlways 给发出滑动行为的View设置属性,比如ViewPager: app:layout_behavior=”@string/appbar_scrolling_view_behavior” 实现步骤: 1.CoordinatorLayout作根控件,包裹AppBarLayout和可滚动的控件,比如ViewPager 2.AppBarLayout包裹 ToolBar 及TabLayout, ToolBar要滑动,给其设置app:layout_scrollFlags 3.ViewPager是发出滑动行为的控件,设置属性 app:layout_behavior 注意:带layout_scrollFlags的view需要放在固定View的前面,这样滑动的view才能够正常退出,而固定的view继续留在顶部
新闻热点
疑难解答