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