平常开发中碰到了各类开发问题,捡选了一部分分享出来。有些问题很是简单,属于编码规范类,有些属于特定状况下碰到的问题,不是很常见。不太准确的地方,欢迎共同探讨下~android
requestWindowFeature(Window.FEATURE_NO_TITLE);// 隐藏标题
复制代码
须要在onCreate以前调用,不然在4.4.2的机型上会报错:git
Calling startActivity() from outside of an Activity context requires the FLAG_NEW_TASK flag.web
public static void openBrowser(Context context, String url) {
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
复制代码
也就是要加上面的FLAG_ACTICITY_NEW_TASK(其它手机看到是ok的)浏览器
titleTv.setTextColor(colorId);//错误的方式(常见封装类调用)
titleTv.setTextColor(ContextCompat.getColor(context,colorId));//正确的方式
复制代码
a.静态/类全局变量须要单独判断; b.string 中文本空格效果没法体现,给字符串加上双引号缓存
<string name="Chinese"> 中 文 </string>
<string name="Chinese">" 中 文 "</string>
复制代码
注意:使用Application.getString的方式,在切换语言后,并无切换这种方式引用的资源内容。能够改成另外的activity里面的getString方法获取bash
ActivityManagerForce removing ActivityRecord{6dd5804 u0 包名/当前WebviewActivity t8819}: app died, no saved state
复制代码
不支持onCustumView方法,去掉便可微信
android:textAllCaps="false"
复制代码
TextView使用WrapContent,lines=1可是内容显示不全 只能显示在屏幕内的部分,在屏幕外的部分,在属性动画拉出来看的时候就没有。 (这种问题发生在自定义跑马灯控件时)app
public static int getTextViewLength(TextView view, String text) {
TextPaint paint = view.getPaint();
int textLength = (int) Layout.getDesiredWidth(text, 0, text.length(), paint);
return textLength;
}
复制代码
而后给TextView设置宽度。ide
三星 SM-C7000(C7) 6.0.1的系统就会出如今这个问题post
if(intent.resolve(context.getPackageManager))!=null){
...
}
复制代码
使用隐式intent进行startActivity时,最好加上该种判断和try catch,由于保不许哪一种机型就出问题了
getWindow().setBackgroundDrawableResource(R.drawable.widget_dialog_round_corner);
复制代码
友盟分享连接若是内容中带有红包字样,那么图片会失效显示不出来(分享的主体却是能够本身看到)
阿里云、应用宝的地址是会被拦截到使用小米手机系统自带的下载器进行下载安装,而这个下载器会默认使用迅雷下载组件,阿里云的地址下载完毕后点击下载完成的push会显示文件没法识别(而应用宝的地址能正常安装),小米系及华为应用的下载地址以及非.apk结尾的地址则会按照正常流程跳入浏览器进行下载。关闭小米手机上的迅雷下载组件的功能后,则能够经过点击push正常安装,不会出现文件没法识别的问题。 因此解决这个问题的很简单,把下载地址换成非apk结尾的地址便可。
android:roundIcon="@mipmap/logo"
复制代码
application中这个属性也要设置
白屏的缘由是系统自己启动是须要时间的(背景默认就是白色)。 通常作法:
设置Theme
<style name="MNoActionBar" parent="Theme.AppCompat.NoActionBar">
<!--<item name="android:windowFullscreen">false</item>-->
<!--<item name="android:windowBackground">@drawable/welcome</item>//此行能够给window设置背景图片,单独设置此项不设置透明的话是没有延迟打开的状况(无白屏切换,和启动页使用同一资源则无缝切换,但默认是全屏的)-->
<item name="android:windowIsTranslucent">true</item>//设置透明以后不会有和页面背景图之间色值的闪烁,同时点击桌面图标时会有些延迟进入页面
</style>
复制代码
针对具体的activity:若是一个activity中既要显示全屏的启动图,也要等到内容加载完毕后显示最新内容(非全屏),那么就应该对相关方法的进行判断设置:
private void setFullScreenEnable(boolean isEnable) {
if (isEnable) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); //隐藏状态栏
} else {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); //显示状态栏
}
}
复制代码
若是在含有Webview的页面中,则能够分别在onCreate方法和onpageFinished的回调中进行设置便可。
特殊状况:若是整个页面是加载的H5,即使使用了上面的设置,仍是会有白屏一闪而过的情景。这是H5页面自己渲染致使的,那么目前的处理方法是针对启动页作个延时dismiss的效果,这样就遮盖了白屏一闪而过的瞬间:
fullLoadingView.postDelayed(new Runnable() {//须要作下延迟,不然会出现页面一瞬间白屏的状况(应该是页面渲染H5的缘由)
@Override
public void run() {
fullLoadingView.setVisibility(View.GONE);
setFullScreenEnable(false);
}
}, 300);
复制代码
B应用打开A应用的cActivity时,A应用的其它Activity也会被打开(以前存在的,A应用一直在后台) 这是taskAffinity的缘故,由于共用了同一个任务栈,因此在manifest文件中设置另一个任务栈便可:
android:taskAffinity=".payAct"
复制代码
根据获得网页的高度来设置webview的高度。同时h5作好适配,等比缩放宽高。与此同时可能出现,获取bitmap信息有空白的ui内容,这时候要作延迟获取,由于onPageFinished方法只是拉取了代码,并不表示页面渲染完毕。
webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);
复制代码
设置为NARROW_COLUMNS时,若是webview自己不是全屏的,则分享出去的图片则不能铺满全屏。
Xml确定没写错,可是为啥高版本能够,低版本就报错呢?
android:digits="0123456789"
复制代码
经常使用来限定EditText的输入格式。
缓存缘由
<style name="BottomSheetDialog" parent="Theme.Design.Light.BottomSheetDialog">
<item name="bottomSheetStyle">@style/bottomSheetStyleWrapper</item>
</style>
<style name="bottomSheetStyleWrapper" parent="Widget.Design.BottomSheet.Modal">
<item name="android:background">@android:color/transparent</item>
</style>
new BottomSheetDialog(context,R.style.BottomSheetDialog)//设置style
复制代码
ScrollView中添加:
android:fillViewport="true"
复制代码
重启清缓存,构建、提升版本都无效,缘由在于编码不规范!
android:drawableTop="2dp" //错误代码!!!
复制代码
通常出现该中问题能够比的下文件的history看看有哪些资源文件引用等不规范的地方,实在找不出就回退版原本看下。
是由于使用了contentTv.setText(Html.fromHtml(content)); 而不是直接的contentTv.setText(content); 前者的换行也没用,也有可能由于其文本含有错误的HTML标签文本的缘故,因此须要在使用时要考虑下兼容。