不定期更新,大多是一些老忘記的屬性,奇怪的細節,奇技淫巧之類的
TextView限制行數及末尾已省略號顯示
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="我是好長的文字我是好長的文字我是好長的文字我是好長的文字我是好長的文字我是好長的文字"
android:maxLines="3"
android:ellipsize="end"
android:maxLines=”3” 限制最大行數
android:ellipsize=”end” 末尾省略號
android:lines=”2” 顯示兩行,如果內容用一行就可以全部顯示了,這時候TextView還是會占用兩行的高度空間
tools屬性,用來預覽
例如text屬性,在預覽的時候會顯示 tools:text 的內容,在正式運行的時候會顯示 android:text 的內容。
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="我是實際的文字"
tools:text="我是預覽文字"
tools屬性在所有屬性上都生效
使用時,系統會自動導入
xmlns:tools="http://schemas.android.com/tools"
命名空間
限制輸入字符
設置EditText的android:digits 屬性。
比如要限制只能輸入數字和字母
android:digits="0123456789abcdefghijklmnopqrstuvwxyz"
不支持區間操作符~或-
TextView粗體
android:textStyle="bold"
ScrollView去掉拉到頂的動畫跟滾動條
android:overScrollMode="never"
android:scrollbars="none"
RecycleView 嵌套慣性滑動問題
解決方法1:
LinearLayoutManager layoutManager = new LinearLayoutManager(mContext){
@Override
public boolean canScrollVertically() {
return false;
}
};
recyclerView.setLayoutManager(layoutManager);
解決方法2:
使用NestedScrollView替換ScrollView
TextView文字,數字上下留白的問題
android:includeFontPadding="false"
即可消除
Dialog背景顏色深度
Dialog自帶50%透明度的灰色遮罩層,若想修改遮罩層顏色深度,有兩個思路
- 通過修改Style
<style name="DialogCustomStyle" parent="@android:style/Theme.Dialog">
<!-- 是否半透明 -->
<item name="android:windowIsTranslucent">true</item>
<!--是否無標題-->
<item name="android:windowNoTitle">true</item>
<!-- 背景透明 -->
<item name="android:windowBackground">@color/color_00000000</item>
<!-- 去除黑色邊框的關鍵設置項,模糊 -->
<item name="android:backgroundDimEnabled">true</item>
<!-- 背景緩存顏色 -->
<item name="android:colorBackgroundCacheHint">@null</item>
<!-- 控制灰色遮罩顏色深度為70% -->
<item name="android:backgroundDimAmount">0.7</item>
</style>
通過 backgroundDimAmount來修改背景遮罩顏色深度,推薦這種方式,比較自然
- 通過取消遮罩層顏色,全屏dialog來做
<!-- 控制灰色遮罩顏色深度 -->
<item name="android:backgroundDimAmount">0</item>
getWindow().setBackgroundDrawable(new ColorDrawable(mContext.getResources().getColor(/*你的顏色*/)));
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
這種方式好處是更加靈活,但是遮罩層效果是跟隨dialog出現效果,需要處理的東西比較多
CircleImageView + Glide 第一次展示只顯示holder圖片的問題
Glide.with(context.getApplicationContext())
.load(url)
.crossFade()
.placeholder(holder)
.error(holder)
.dontAnimate()
.into(iv);
重點 dontAnimate()
圖片Uri
圖片Uri跟文件的Uri格式不同,圖片Uri為“content”開頭的數據庫資源文件,文件的Uri為“file”開頭的文件,圖片Uri不能直接轉成文件,拿不到數據
可以參考博客
改變軟鍵盤右下角的按鍵
android:imeOptions="actionDone"
可選項有
<!--actionDone:確定/完成-->
<!--actionGo:前進-->
<!--actionNext:下一項-->
<!--actionNone:默認-->
<!--actionPrevious:上一項-->
<!--actionSearch:搜索-->
<!--actionSend:發送-->
直接使用可能不會生效,需要配合
android:singleLine="true"
圖片的scaleType
scaleType
獲取通知欄高度
int notificationBar = Resources.getSystem().getDimensionPixelSize(Resources.getSystem().getIdentifier("status_bar_height", "dimen", "android"));
Fragment嵌套時,程序崩潰重啟后內部Fragment白屏
內部Fragment應該使用 getChildFragmentManager ,而不是getFragmentManager,否則在重啟之后會因為拿不到FragmentManager而白屏
Activity執行recreate()方法,dialog自動消失/不自動消失
public class MyDialog extends Dialog {
...
@Override
public void show() {
...
// 如果先執行show方法,再執行set params方法,當activity執行recreate重啟的時候,dialog的顯示狀態不受影響
super.show();
getWindow().setAttributes(layoutParams);
}
}
...
public class MyDialog extends Dialog {
...
@Override
public void show() {
...
// 如果先執行set params方法,再執行show方法,當activity執行recreate重啟的時候,dialog回自動銷毀
getWindow().setAttributes(layoutParams);
super.show();
}
}
...
這個目前不知道是一個新特性,還是一個bug,謹慎使用