Android 日常开发问题总结

来自:不会飞的小猪

日常开发中碰到了各种开发问题,捡选了一部分分享出来。有些问题非常简单,属于编码规范类,有些属于特定情况下碰到的问题,不是很常见。不太准确的地方,欢迎共同探讨下~

1.requestFeature() must be called before adding content

requestWindowFeature(Window.FEATURE_NO_TITLE);// 隐藏标题

需要在onCreate之前调用,否则在4.4.2的机型上会报错:

2.小米6.0系统打开浏览器时闪退
Calling startActivity() from outside of an Activity context requires the FLAG_NEW_TASK flag.

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的)

3.设置TextView的颜色值无效

   titleTv.setTextColor(colorId);//错误的方式(常见封装类调用)
   titleTv.setTextColor(ContextCompat.getColor(context,colorId));//正确的方式

4.国际化引用问题
a.静态/类全局变量需要单独判断;
b.string 中文本空格效果无法体现,给字符串加上双引号

<string name="Chinese"> 中   文 </string>
<string name="Chinese">" 中   文 "</string>

注意:使用Application.getString的方式,在切换语言后,并没有切换这种方式引用的资源内容。可以改为另外的activity里面的getString方法获取

5.魅族7.0的系统在webview中点击后闪退

ActivityManagerForce removing ActivityRecord{6dd5804 u0 包名/当前WebviewActivity t8819}: app died, no saved state

不支持onCustumView方法,去掉即可

6.button上的英文默认为大写

android:textAllCaps="false"

7.vivo上收到push后打不开指定的页面(根本就没反应)

在这里插入图片描述

系统会自动弹出,但是进入设置打开即可。

8.TextView显示不全
TextView使用WrapContent,lines=1但是内容显示不全
只能显示在屏幕内的部分,在屏幕外的部分,在属性动画拉出来看的时候就没有。
(这种问题发生在自定义跑马灯控件时)

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设置宽度。

9. No Activity found to handle Intent { act=android.intent.action.VIEW_DOWNLOADS flg=0x10000000 }
三星 SM-C7000(C7) 6.0.1的系统就会出现在这个问题

if(intent.resolve(context.getPackageManager))!=null){
...
}

使用隐式intent进行startActivity时,最好加上该种判断和try catch,因为保不准哪种机型就出问题了

10.设置dialog边角

getWindow().setBackgroundDrawableResource(R.drawable.widget_dialog_round_corner);

11.三星机型报错E/rsC++(16241): RS CPP error: Blur radius out of 0-25 pixel bound

在这里插入图片描述

大意就是TextView的shadowRadius不能大于25,是xml代码中的问题,改小shadowRadius即可。

在这里插入图片描述

包括button下的部分模糊的情况也是该问题导致的。

12.分享链接至微信无法显示链接的缩略图
友盟分享链接如果内容中带有红包字样,那么图片会失效显示不出来(分享的主体倒是可以自己看到)

13.小米手机上的App使用浏览器打开尾缀带apk的地址无法正常下载安装
阿里云、应用宝的地址是会被拦截到使用小米手机系统自带的下载器进行下载安装,而这个下载器会默认使用迅雷下载组件,阿里云的地址下载完毕后点击下载完成的push会显示文件无法识别(而应用宝的地址能正常安装),小米系及华为应用的下载地址以及非.apk结尾的地址则会按照正常流程跳入浏览器进行下载。关闭小米手机上的迅雷下载组件的功能后,则可以通过点击push正常安装,不会出现文件无法识别的问题。
所以解决这个问题的很简单,把下载地址换成非apk结尾的地址即可。

14.桌面图标不更换的原因

android:roundIcon="@mipmap/logo"

application中这个属性也要设置

15.优化打开应用白屏问题
白屏的原因是系统本身启动是需要时间的(背景默认就是白色)。
一般做法:

设置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);

16.打开外部应用时,多个页面被调起
B应用打开A应用的cActivity时,A应用的其它Activity也会被打开(之前存在的,A应用一直在后台)
这是taskAffinity的缘故,因为共用了同一个任务栈,所以在manifest文件中设置另外一个任务栈即可:

android:taskAffinity=".payAct"

17.获取webview的bitmap
根据得到网页的高度来设置webview的高度。同时h5做好适配,等比缩放宽高。与此同时可能出现,获取bitmap信息有空白的ui内容,这时候要做延迟获取,因为onPageFinished方法只是拉取了代码,并不表示页面渲染完毕。

webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);

设置为NARROW_COLUMNS时,如果webview本身不是全屏的,则分享出去的图片则不能铺满全屏。

18.Error inflating class ImageView
Xml肯定没写错,但是为啥高版本可以,低版本就报错呢?

在这里插入图片描述

这是因为图片资源文件被放到了低版本文件夹中去了,所以高版本inflate不到。

19.EditText digits属性

android:digits="0123456789"

常用来限定EditText的输入格式。

20. android studio 全局搜索结果不全
缓存原因

在这里插入图片描述

21. bottomSheetDialog设置圆角

<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

22.ScrollView中的LinearLayout的layout_weigt无效
ScrollView中添加:

android:fillViewport="true" 

23.Process 'command 'E:\android\tool\sdk\build-tools\26.0.3\aapt.exe'' finished with non-zero exit value 1
重启清缓存,构建、提高版本都无效,原因在于编码不规范!

android:drawableTop="2dp" //错误代码!!!

一般出现该中问题可以比的下文件的history看看有哪些资源文件引用等不规范的地方,实在找不出就回退版本来看下。

24.dialog中的TextView显示不全的问题
是因为使用了contentTv.setText(Html.fromHtml(content));
而不是直接的contentTv.setText(content);
前者的换行也没用,也有可能因为其文本含有错误的HTML标签文本的缘故,所以需要在使用时要考虑下兼容。

25.浮点型精度问题

demo

所以,结合业务情况来使用BigDecimal会好些。

推荐↓↓↓
安卓开发
上一篇:围绕原生与 H5 交互实践聊聊 Android 混合开发 下一篇:开发杂谈:Android 移动应用架构发展简史