安卓疑难杂症积累

# getMeasuredHeight()与getHeight的区别
推荐使用getMeasureHeight().
在当屏幕可以包裹内容的时候,他们的值相等,只有当view超出屏幕后,才能看出他们的区别:getMeasuredHeight()是实际View的大小,与屏幕无关,而getHeight的大小此时则是屏幕的大小。当超出屏幕后,getMeasuredHeight()等于getHeight()加上屏幕之外没有显示的大小

#AndroidStudio项目可以Build但Run出错
File → Settings → Build, Execution, Deployment → Instant Run 
关闭 Enable Instant Run

#去除ListView默认出现黑色背景的方法
1、listview在拖动的时候背景图片消失变成黑色背景,等到拖动完毕我们自己的背景图片才显示出来
解决:在XML中加入
android:scrollingCache=”false” 或 android:cacheColorHint=”#00000000″
2、listview的上边和下边有黑色的阴影
解决: android:fadingEdge=”none”
3、修改listview的Item默认选择时的黄色背景
解决:在java文件中使用listview.setSelector()方法,或使用如下代码
android:listSelector="#00000000"//这样写是透明的,也可加入Drawable图片
4、lsitview的每一项之间需要设置一个图片做为间隔
解决: android:divider=”@drawable/list_driver”

#Instant Run
根据项目的不同,他可能会显著减少初始构建和安装时间。任何在代码更改后变为可到达的方法都会显示为新添加到程序中,达到即时运行热切换的目的。

#startActivityForResult不回调的问题
如果用负值的requestCode和调用startActivity是一样的,所以代码不走startActivityForResult而是startActivity
~~~java
   /**
     * Same as calling {@link #startActivityForResult(Intent, int, Bundle)}
     * with no options.
     *
     * @param intent The intent to start.
     * @param requestCode If >= 0, this code will be returned in
     *                    onActivityResult() when the activity exits.
     *
     * @throws android.content.ActivityNotFoundException
     *
     * @see #startActivity 
     */
    public void startActivityForResult(Intent intent, int requestCode) {
        startActivityForResult(intent, requestCode, null);
    }
~~~

#EditText在java代码中设置digits属性
EditText可以在xml中设置digits属性来限制用户的输入内容。如下面可以限制用户只输入数字
~~~
android:digits="1234567890"
editText.setKeyListener(DigitsKeyListener.getInstance("0123456789"));
~~~

#ActivityGroup里面装的子Activity不能使用OnActivityResult()方法
ActivityGroup的OnActivityResult()方法子Activity是捕获不到的,可以在ActivityGroup 重写OnActivityResult()方法。
再发送Intent的时候,需要用getParent()来调用startActivityForResult:
~~~
getParent().startActivityForResult(intent,REQUEST);
~~~
第二步,重写OnActivityResult()方法,需要获得当前的子Activity,并进行强转之后,调用子Activity的OnActivityResult()方法:
~~~
@Override  
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        // 向下传递  
    YourActivity currentActivity = (YourActivity) getLocalActivityManager()  
            .getCurrentActivity();  
    currentActivity.onChildActivityResult(requestCode, resultCode, data);  
    }  
~~~

#Error:Could not download junit.jar (junit:junit:4.12): No cached version available for offline mode
1:使用代理ip,此处我使用的是小飞机,使用全局代理即可.
2:报错后找到File - Other settings - Default settings,选择Build Tools - Gradle去掉"offline work"选项勾点击 “Ok”.

#Activity、FragmetActivity、AppconpatActivity区别
fragment是3.0以后的东西,为了在低版本中使用fragment就要用到android-support-v4.jar兼容包
~~~
1、fragmentactivity 继承自activity,用来解决android3.0 之前没有fragment的api,所以在使用的时候需要导入support包,同时继承fragmentActivity,这样在activity中就能嵌入fragment来实现你想要的布局效果。 
2、当然3.0之后你就可以直接继承自Activity,并且在其中嵌入使用fragment了。 
3、获得Manager的方式也不同 
3.0以下:getSupportFragmentManager() 
3.0以上:getFragmentManager()
4、AppconpatActivity extents FragmetActivity,FragmetActivity extends Activity,强烈建议使用AppconpatActivity获得最大的api集合
~~~

#查看keystore的签名
~~~
keytool -list -keystore D:\Desktop\app_key
keytool -list -v -keystore e:\debug.keystore -storepass xxx(密匙)
~~~

#Mac通过aapt解析查看apk文件版本等信息
配置aapt环境路径
- 终端中输入:open .bash_profile
- 打开此文件后输入:export PATH=${PATH}:~/Library/Android/sdk/build-tools/25.0.3/aapt
- 使用更新后的修改 source .bash_profile
- 使用 aapt dump badging <apk文件路径>

#android.support.v4.app.Fragment和 android.app.Fragment的区别
1.最低支持版本不同
android.app.Fragment 兼容的最低版本是android:minSdkVersion="11" 即3.0版
android.support.v4.app.Fragment 兼容的最低版本是android:minSdkVersion="4" 即1.6版

2.需要导jar包
fragment android.support.v4.app.Fragment 需要引入包android-support-v4.jar

3.获取manager的方法不同
android.app.Fragment使用getFragmentManager()
android.support.v4.app.Fragment使用getSupportFragmentManager()

注意:
android.support.v4.app.Fragment不能使用<fragment>标签,而且想用fragment+viewpager只能使用android.support.v4.app.Fragment,因为FragmentPagerAdapter就是android.support.v4.app.Fragment才有。所以强烈推荐使用android.support.v4.app.Fragment

#SSL peer shut down incorrectly
因为墙的原因导致的。这时候我们就需要配置镜像来解决这个问题。(为了提高jar包的下载速度也可以配置)配置的方法就是在根build.gradle中添加镜像仓库,一般我们选择阿里的 http://maven.aliyun.com/nexus/content/groups/public/完整的如下所示
~~~
buildscript {

    repositories {
        google()
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
    }
}

allprojects {
    repositories {
        google()
        maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
~~~

#Resolved versions for app (26.1.0) and test app (27.1.1) differ。包冲突解决在 build.gradle 添加
~~~
android {
    ...
}

configurations.all {
    resolutionStrategy.force 'com.android.support:support-annotations:27.1.1'
}

dependencies {
    ...
}
~~~

#Android Studio添加aar
在module 里面的build.gradle 的根目录添加 
~~~
repositories{
    flatDir {
    dirs 'libs'
   }
}
~~~
在module 里面的build.gradle 的根目录的 dependencies 标签里面添加
~~~
compile(name:'SDK-release', ext:'aar')
~~~

#推送通知和透传消息)的区别
通知:发送后会在系统通知栏收到展现,同时响铃或振动提醒用户。
消息:以透传的形式传递给客户端,无显示,发送后不会在系统通知栏展现,第三方应用后需要开发者写代码才能看到。

#listview的属性
android:divider="@null"    //去掉分割线
android:listSelector="@android:color/transparent"    //去掉点击渐变色
android:scrollbars="none"     //去掉进度条
android:dividerHeight="10dp"    //设置item间隔
android:cacheColorHint="#00000000"    //解决异常变黑问题

android:descendantFocusability="blocksDescendants"    //这个放在列表的第一个父布局,解决自动滑动问题

#ScrollView的属性
     当ScrollView嵌套LinearLayout,在某些手机上下面会留白,问题的解决办法是在第一层LinearLayout里面嵌套多个

LinearLayout,最重要的是将ScrollView中android:fillViewport设置为true。

    当ScrollView里的元素想填满ScrollView时,使用"fill_parent"是不管用的,必需为ScrollView设置:

android:fillViewport="true"。


     当ScrollView没有fillVeewport=“true”时, 里面的元素(比如LinearLayout)会按照wrap_content来计算(不论它是否设

了"fill_parent"),而如果LinearLayout的元素设置了fill_parent,那么也是不管用的,因为LinearLayout依赖里面的元素,而

里面的元素又依赖LinearLayout,这样自相矛盾.所以里面元素设置了fill_parent,也会当做wrap_content来计算。
 

发布了53 篇原创文章 · 获赞 14 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/liuxingyuzaixian/article/details/86666140