- 在parent布局中添加 android:animateLayoutChanges="true" 属性,在子控件显示或者隐藏时会有默认动画(注:必须为ViewGroup的子控件)
代码中动态添加自定义动画
linearLayout为 必须为ViewGroup的子控件
linearLayout = (LinearLayout) findViewById(R.id.linearlayout);
mButtonAdd.setOnClickListener(this);
LayoutTransition transition=new LayoutTransition();
transition.getDuration(2000);
transition.setAnimator(LayoutTransition.APPEARING, AnimatorInflater.loadAnimator(getApplicationContext(), R.animator.animator_scale));
transition.setAnimator(LayoutTransition.CHANGE_APPEARING, transition.getAnimator(LayoutTransition.CHANGE_APPEARING));
transition.setAnimator(LayoutTransition.DISAPPEARING, transition.getAnimator(LayoutTransition.DISAPPEARING));
transition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING,transition.getAnimator(LayoutTransition.CHANGE_DISAPPEARING));
linearLayout.setLayoutTransition(transition);
- Service是系统组件,本身没有UI界面,一般是无法直接弹窗的,所以我们打主意的就是系统自带的UI,瞧如下代码:
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this, R.style.oaThemeByLgp);
String[] split = curtailName.split("¥");
StringBuilder sb=new StringBuilder();
for (int i = 0; i < split.length; i++) {
sb.append(split[i]);
if (i<split.length){
sb.append("、");
}
}
alertDialog.setMessage(sb.toString()+" 上传失败,是否继续?");
alertDialog.setPositiveButton("否",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
manager.cancelAll();
return;
}
});
alertDialog.setNegativeButton("是",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
transmit();
}
});
AlertDialog ad = alertDialog.create();
ad.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
ad.setCanceledOnTouchOutside(false);//点击外面区域不会让dialog消失
ad.show();
这一段代码是我内部邮件的开启多线程上传多文件业务,如果其中一个线程文件上传失败,会提醒用户,这个提醒就是系统的Dialog,由用户使用此Dialog决定此封邮件是否有效,如果用户选择无效,则后台不记录相关数据,并记录下上传成功的id,稍后调用后台接口清除这些冗余文件。
- 如果无法引用本地aar包,爆出错误# Warning:Project app: Only Jar-type local dependencies are supported
那么就创建个本地仓库并添加依赖
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile(name:'guideview-release', ext:'aar')
// compile project(':guideview')
}
repositories {
mavenCentral()
flatDir{
dirs 'libs'
}
}
- 充分利用命名空间 xmlns:tools="http://schemas.android.com/tools"
参考文章:https://android.jlelse.eu/android-tools-attributes-listitem-sample-data-rocks-bbf49aaa9f07
举例TextView与ListView:
- TextView中我们开发时想要在 XML 中预览数据可以直接通过tools里面某些方法实现, 但是直接在 XML 中写死有时就会很尴尬,譬如从网络或者数据库获取数据有延迟, 用户就先看到了我们预设的假数据。避免尴尬可以这么干 将 android:text="看不到我,看不到我"替换为 tools:text="老板驾到"。
当然据传这里面的数据也是可以自定义的,就是Android3.0以后的image.png
不过我实验没成功,在输入时引用提示,不知道是编译器原因还是什么,需要了解的可以自行百度。 -
ListView中有时候需要看到具体布局效果,这就非常尴尬:
可以使用tools:listitem="@layout/item_grid_bag"类似这些个属性去做预览
这个是引用前布局:
image.png
引用后布局后:
image.png
因为我这个列表项布局就是一个框框背景图,所以预览图没毛病,并非效果问题。
-
屏蔽引用jar包某些内容
我们知道有时两个jar包会冲突,编译不会通过,但是又无法解压jar包手动删除,这个时候屏蔽就变得尤其重要那么屏蔽方式是怎样的呢,其实很简单在引用时配置一下就好了,如下图,此为屏蔽jar包内含有某包名的类
QQ图片20180521111722.png
-
ScrollView 属性android:fillViewport="true"
场景:譬如你在阅读某个协议,等阅读完显示按钮,点击我同意,普通状况不加下是这样的
Screenshot_2018-06-01-15-05-07-745_com.biabia.clu.png
加了之后是这样的
Screenshot_2018-06-01-15-04-44-172_com.biabia.clu.png
当然如果字数够的话确实能达到我们理想效果,按钮随着文字滑动一直到底部才显示出来
Screenshot_2018-06-01-15-28-57-746_com.biabia.clu.png
当然应用场景不会仅局限于这样的,像新闻点赞啥的底部含有按钮的都可以使用此属性 - onHiddenChanged()方法解决Fragment 切换时数据刷新问题
场景:当Fragment使用show()与hide()切换时Fragment是不走生命周期的,数据将无法通过生命周期方法进行刷新,这时就可以通过覆写onHiddenChanged()方法去解决,可能此处有人会疑惑,不可见时不是调用onPause么?但是这个指的是Activity,一个Activity里面不管有几个Fragment其初始化后生命周期都跟随Activity动而动,当使用show()与hide()时,其实两个Fragment对于周期来说都是未发生状态改变的,所以无法通过通常想的在onResume里刷新数据,不信可以试试切换打印周期。
网友评论