c方便自己查找用过的资料
AppCompatTextView自动适应文字大小:
app:autoSizeTextType="uniform"//允许自动调整字体大小
app:autoSizeStepGranularity="2dp"//调节间隔
app:autoSizeMaxTextSize="14sp"//最大值
app:autoSizeMinTextSize="10dp"//最小值
渐变颜色:
<gradient android:angle="315" android:endColor="@color/colorPrimaryApp" android:startColor="@color/colorPrimaryApp" />
边框
<stroke android:color="@color/colorPrimary" android:width="0.5dp"/>
启动intent
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
获取activity的context
activity.this
获取fragment的context
getcontext();
黑色通知栏
AppUIUtils.setStatusBarTranslucent(getWindow(), true);
AppUIUtils.setStatusBarStyle(getWindow(), true);
navigationbar 设置小红点
ShapeBadgeItem badgeItem1 =new ShapeBadgeItem();
badgeItem1.setShape(ShapeBadgeItem.SHAPE_OVAL).setShapeColor(getResources().getColor(R.color.red_point_ff3636)).
setSizeInDp(getApplicationContext(),8,8);
tablayout自定义样式
mTabLayout.getTabAt(0).setCustomView(view);
读取r文件的bitmap
Bitmap bitmap = BitmapFactory.decodeResource(this.getContext().getResources(), R.drawable.test);
弹窗有fragmentdialog appcompatdialog fragmentdialog有时候有些问题。
不同颜色字体:
setText(Html.fromHtml(mContext.getResources().getString(R.string.xxx, String.valueOf(value))));Integer默认值为null,不是0
imageview 图片填满图片框 android:scaleType="centerCrop"
style相关知识
dialog
<item name="android:windowBackground">@color/transparent</item>背景设置为透明
<item name="colorAccent">@color/colorAccent</item>图标、按钮、文字的颜色
<item name="android:ellipsize">end</item>尾部自动隐藏溢出数据
<item name="android:textColorHint">@color/gray</item>提示文字颜色
android 如何启动默认浏览器
csdn网站教程:https://blog.csdn.net/hudashi/article/details/8176298
修复android pie(android 9)不支持http协议问题
在AndroidManifest.xml文件中的application节点中,配置:android:usesCleartextTraffic=“true”
java.lang.IllegalStateException Fragment LeftFragment not attached to a context.
使用getResource()时获取上下文出错,要进行非空判断getContext!=null.
内边框
<stroke android:color="@color/colorAccent" android:width="3dp"/>
圆角
<corners android:radius="6dp"/>
填充颜色
<solid android:color="@color/white"/>
修改button默认背景颜色
<style name="AppMainTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="buttonStyle">@style/Widget.AppCompat.Button
<item name="colorButtonNormal">@color/colorAccent
</style>
修改textview点击效果
ripple
或者
android:foreground="?android:attr/selectableItemBackgroundBorderless"
textview文字居中
android:textAlignment="center"
自定义alertdialog问题
setContentView(View.inflate(getContext(),R.layout.dialog_video_rename,null));布局正常
setContentView(R.layout.dialog_video_rename)工作不正常
添加fragment放在trycatch中进行,因此如果在activity想对fragment操作,需要在trycatch中进行,trycatch是放在子线程中进行的。
单纯判断fragment是否为空无任何意义。
LockSupport加锁、解锁,线程同步用到。
android 添加依赖库,需要在build.gradle添加api project(':库名')
FragmentTransaction
通过FragmentTransaction实现在Activity运行时可动态地加入、移除、交换Fragment
FragmentTransaction的主要方法介绍
针对在一个Activity中的某个Layout中切换Fragment,无非两种方法:
使用replace方法创建新实例,销毁旧的,无法复用。
使用hide和show方法,最终是让Fragment的View setVisibility(true还是false),不会调用生命周期,可复用。会调用onHiddenChanged。
add(id, fragment)
增加framgent到队列中,并显示该fragment到指定布局中。
生命周期调用
当fragment与activity连接并被建立时(onAttach()、onCreate()被调用过) 例如当fragment在回退栈时。
onCreateView()、onActivityCreated()、onStart()、onResume()。
当fragment与activity未连接并未被建立时(onAttach()、onCreate()未被调用过)
onAttach()、onCreate()、onCreateView()、onActivityCreated()、onStart()、onResume()。
id是告知FragmentManager,Fragment应该出现在哪个layout上
remove(fragment)
销毁队列中指定的fragment。
生命周期调用:onPause()、onStop()、onDestroyView()、onDestroy()、onDetach()
replace(id, fragment)
先检查队列中是否已经存在,不存在就会进入队列并把其他fragment清出队列,最后显示该fragment到指定布局中。
生命周期调用:相当于新的Fragment调用了add,队列中其他fragment调用了remove
(新的Fragment创建:onAttach()、onCreate()、onCreateView()、onActivityCreated()、onStart()、onResume(),队列中其他fragment销毁:onPause()、onStop()、onDestroyView()、onDestroy()、onDetach())
show(fragment)
显示队列中的指定framgent。
当队列中存在该fragment时并被调用过hide(fragment)时,回调onHiddenChange(boolean)。
hide(fragment)
隐藏队列中指定的fragment
当队列中存在该fragment时,回调onHiddenChange(boolen)
detach()
会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护。
生命周期调用:onPause()、onStop()、onDestroyView()
attach()
重建view视图,附加到UI上并显示。
生命周期调用:onCreateView()、onActivityCreated()、onStart()、onResume()
addToBackStack()
当移除或替换一个片段并向返回栈添加事务时,系统会停止(而非销毁)移除的片段。 如果用户执行回退操作进行片段恢复,该片段将重新启动。
如果是替换一个片段,这个替换片段相当于add()
移除或替换一个片段并向返回栈添加事务时,被移除片段将被detach()
执行回退操作进行片段恢复,这个片段将被attach(),而上一个片段有两种情况
1、如果是回退栈中还有这个片段那么将被detach()。
2、如果回退栈没有这个片段将被remove()
具体实例可参看:Fragment的addToBackStack()使用
commit()
提交本次事务,可在非主线程中被调用。主要用于多线程处理情况。在onSaveInstanceState之后提交会出现IllegalStateException,可以使用commitAllowingStateLoss代替
commitAllowingStateLoss()
可能会丢掉FragmentManager的状态, 即onSaveInstanceState之后任何被添加或被移除的Fragments.
commitNow()
提交本次事务,只在主线程中被调用。 这时候addToBackStack(string)不可用。
参考文献https://www.jianshu.com/p/d2189b0191ef
并发队列
LinkBlockingQueue
隐藏通知栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) //隐藏状态栏
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) //显示状态栏
ImageView 图片适应imageView宽高
android:scaleType="centerCrop"
数组与列表互相转化
List<Integer> res = Arrays.asList(param);
String[] mVals =tagList.toArray(new String[0]);
android 源码阅读:
系统软件大部分在xref: /packages/apps目录下
Definition:定义,查变量在此处查
filepath:地址,查类名在此处查
recycleView的 holder会复用,因此如果不对holder进行操作的话,它会将上一个位置的item的数据拿过来,因此会发生图片乱位之类的问题。
ScrollView -LinearLayout-RelativeLayout-RecyclerView,这样布局的话只会滚动ScrollView,不会滚动RecyclerView
网友评论