1.scrollview與recyclerview嵌套,滑動到底部:
項目中遇到頁面載入時總是滑動到最底部纵菌,原因是焦點在頁面底部铜靶;
解決方法就是在根布局設置Android:descendantFocusability="blocksDescendants" 僚匆;
android:descendantFocusability 有三種值:
beforeDescendants:viewgroup會優(yōu)先其子類控件而獲取到焦點
afterDescendants:viewgroup只有當其子類控件不需要獲取焦點時才獲取焦點
blocksDescendants:viewgroup會覆蓋子類控件而直接獲得焦點
2.盡量不要在循環(huán)中創(chuàng)建很多臨時變量带射,可以將大型的循環(huán)分拆同规、分段或者按需執(zhí)行,減少內存碎片
private Object result[]=new Object[100];
void foo(){
for(int i=0;i<100;++i){
byte[] temp=new byte[2000];
result[i] = new byte[4];
}
}
3.創(chuàng)建全局dialog:在創(chuàng)建Dialog時添加
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
并在AndroidManifest.xml中添加<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
如果API>23,增加權限申請
private static final int REQUEST_CODE = 1;
private void requestAlertWindowPermission() {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_CODE);
4.scrollview recyclerview滑動沖突
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false) {
@Override
public boolean canScrollVertically() {
return false;
}
};
5.畫虛線
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line">
<stroke
android:width="3px"
android:color="#FFFFFF"
android:dashWidth="10px"
android:dashGap="10px" />
</shape>
說明:
顯示一條虛線券勺,width為線條的高度绪钥,dashWidth為破折線的寬度,dashGap為破折線之間的空隙的寬度朱灿,當dashGap=0時,就是實線
注意:
1. 如果在<stroke>標簽中設置了android:width钠四,則在<View>標簽中android:layout_height的值必須大于android:width的值盗扒,否則虛線不會顯示。如果不設置缀去,默認android:width為0侣灶。
2. 關于4.0以上設備虛線會變實線的問題:
代碼中可以添加:android:layerType="software"
因為硬件加速導致虛線可能會被優(yōu)化成實線
6.edittext去掉下劃線可以在xml中android:background="@null",但是如果在代碼中setBackground(null),
雖然下劃線也會不見缕碎,但是跟xml中設置的區(qū)別是褥影,代碼中設置,下劃線只是顏色變透明了咏雌,但是并沒有從
布局中去除凡怎,仍然占用控件空間,導致字體不能居中顯示
7.PHP框架會把Java傳的空json串轉化為空數組
8.alertdialog會默認去除與軟鍵盤的交互赊抖,所以如果需要自定義帶輸入框的彈出框统倒,打開彈出框自動彈出輸入法的話
,有兩種方法:
a.繼承Alertdialog,在onCreate()時調用getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
b.在dialog.show()之前調用:
//只用下面這一行彈出對話框時需要點擊輸入框才能彈出軟鍵盤
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
//加上下面這一行彈出對話框時軟鍵盤隨之彈出
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
9.edittext maxLines在沒有設置inputType前無效氛雪,除非使用singLine
10.Gson解析房匆,如果返回的json串不是空字符串的時候,解析都不會返回空對象报亩,比如{}解析后會返回對象T浴鸿,只不過T
的屬性都為空而已。
11.Android在打包編譯的時候會將aar包中的資源文件一并打入包中弦追,這個時候第三方包的包名和類名都完全一致岳链,這會導致在尋找需要的類的時候出現問題。
所以這里我們就有兩個不同的解決方案劲件。
1宠页、引用jar包的源碼,修改源碼的包名寇仓。
2举户、使用gradle的配置exclude掉重復的jar包。
configurations {
compile.exclude module: 'okhttp'
compile.exclude module: 'fastjson'
compile.exclude module: 'glide'
}
gradle針對jar包重復的問題的解決遍烦,詳細的介紹可以看官方的文章
https://docs.gradle.org/current/userguide/dependency_management.html
11.沉浸式狀態(tài)欄:
1.Dialog和DialogFragment在設置style的時候api19及以上使用windowTranslucentStatus=true俭嘁,api21及以上的時候使用windowTranslucentNavigation=true, statusBarColor設置透明
2.PopupWindow需要調用setClippingEnabled(false)這個方法
12.自定義布局的dialog
ConstraintLayout的布局大小會有問題,縮成一團服猪。RelativeLayout也不能按設置的大小正常顯示,如果設置一個控件對父控件底部對齊會延伸到窗口底部供填。
其他的傳統布局沒問題