安卓疑難雜症積累

# 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來計算。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章