1.UI小課堂java
a.TextView行間距、字間距android
android:lineSpacingExtra
:設置行間距,如10dp。值爲正數表示增長行間距,爲負數表示減小行間距,爲0則沒有變化android:lineSpacingMultiplier
設置行間距的倍數,如1.5。值大於1.0表示增長行間距,小於1.0表示減小行間距android:textScaleX
,水平方向放大,至關於把文字拉長;能夠經過加空格的方式增長字間距b.EditText有光標不彈出軟鍵盤數組
網上不少方法都很差使,親測如下方法有用,不只有光標閃爍還不會彈出軟鍵盤。安全
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
try {
Class<EditText> cls = EditText.class;
Method setSoftInputShownOnFocus;
setSoftInputShownOnFocus = cls.getMethod("setShowSoftInputOnFocus", boolean.class);
setSoftInputShownOnFocus.setAccessible(true);
setSoftInputShownOnFocus.invoke(mEditText, false);
} catch (Exception e) {
e.printStackTrace();
}
複製代碼
c.EditText限定輸入字符的類型、最大數量bash
EditText.setInputType()
android:inputType
//例如,限定只能輸入數字
mEditText.setRawInputType(InputType.TYPE_CLASS_NUMBER);
//或者,在佈局文件添加屬性
android:inputType="number"
複製代碼
關於輸入類型可見文章:EditText輸入類型InputType值架構
EditText.setFilters()
android:maxLength
//好比,容許輸入的最大字符量爲11,等效於android:maxLength="10"
mEditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(11)});
複製代碼
更多屬性可見EditText屬性大全詳解框架
d.指定Dialog寬高less
Dialog有限制的最大寬高,可能會致使在佈局設置的寬高大小失效,這裏提升兩種解決辦法。ide
Dialog.show()
以後WindowManager.LayoutParams params = mDialog.getWindow().getAttributes();
params.width = 840;//單位爲px
mDialog.getWindow().setAttributes(params);
複製代碼
推薦閱讀:源碼分析Dialog自定義大小無效函數
//R.style.CustomDialog
<style name="CustomDialog" parent="Theme.AppCompat.Dialog">
<!-- dialog 寬度與屏幕比例-->
<item name="android:windowMinWidthMinor">80%</item>
<!-- dialog 背景顏色,默認是白色-->
<item name="android:colorBackground">@android:color/transparent</item>
</style>
//建立dialog時用有style參數的構造函數
AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.CustomDialog);
複製代碼
e.資源文件&系統文件
引用資源文件&系統文件有兩種方式,一種是在佈局文件:
① @type/name
:表示引用自定義的資源
//引用strings資源文件里名爲content對應的語句
android:text="@string/content"
複製代碼
② @android:type/name
:表示引用系統的public資源
//引用系統資源文件裏的顏色black
android:textColor="@android:color/black"
複製代碼
③ @*android:type/name
:表示引用系統的全部資源
④ ?
:表示引用主題屬性
//引用當前主題資源中名爲borderlessButtonStyle的屬性值
style="?android:attr/borderlessButtonStyle"
複製代碼
⑤ @+
:表示建立或引用資源。若是資源不存在表示建立、若是已存在表示引用。
@+id/資源ID名
:新建一個資源ID@id/資源ID名
:引用已定義的資源ID,包括系統ID@android:id/資源ID名
:引用系統ID,等效於@id/資源ID名
另外一種是在代碼中,經過Context.getResources().getXXX(資源ID)
獲取相應的資源,並將它做爲參數傳入相應的setXXX()
方法中從而設置控件的屬性。
//設置字體顏色
mTextView.setTextColor(getResources().getColor(R.color.colorPrimary));
//若是R.color.colorPrimary對應顏色是#FF0000,那麼等效寫法爲
mTextView.setTextColor(Color.parseColor("#FF0000"));
複製代碼
2.Java基礎之泛型&反射
a.泛型
//不使用泛型須要強制轉換
List list = new ArrayList();
list.add("hello");
String s = (String) list.get(0)
//使用泛型可避免強制轉換
List<String> list = new ArrayList<String>();
list.add("hello");
String s = list.get(0);
複製代碼
以上例子也能看到在集合類使用泛型的狀況很廣泛,並且相比於數組具備動態的特色。
public class 類名<泛型類型1,…>
public <泛型類型1,…> 返回類型 方法名(泛型類型1 參數名1,…)
public interface 接口名<泛型類型1,…>
下面分別舉例說明。
//泛型類:把泛型定義在類上
public class ObjectTool<T> {
private T obj;
public T getObj() {
return obj;
}
public void setObj(T obj) {
this.obj = obj;
}
}
//測試
public class ObjectToolDemo {
public static void main(String[] args) {
ObjectTool<String> ot1 = new ObjectTool<String>();
ot1.setObj(new String("minmin"));
System.out.println("姓名是:" + ot1.getObj()); //姓名是:minmin
ObjectTool<Integer> ot2 = new ObjectTool<Integer>();
ot2.setObj(new Integer(21));
System.out.println("年齡是:" + ot2.getObj()); //年齡是:21
}
}
複製代碼
//泛型方法:把泛型定義在方法上
public class ObjectTool {
public <T> T show(T t) {
if (t != null){
return t;
}else{
return null;
}
}
//測試
public class ObjectToolDemo {
public static void main(String[] args) {
ObjectTool ot = new ObjectTool();
System.out.println(ot.show("minmin"));//minmin
System.out.println(ot.show(21));//21
}
}
複製代碼
//泛型接口:把泛型定義在接口上
public interface ObjectTool<T,U> {
void show(T t,U u);
}
class ObjectToolTest implements ObjectTool<String,Date> {
@Override
public void show(String str,Date date) {
System.out.print(str);
System.out.print(date);
}
}
//測試
public class ObjectToolDemo {
public static void main(String[] args) {
ObjectToolTest test = new ObjectToolTest();
test.show("Hello",new Date());//Hello當前時間
}
}
複製代碼
extends
關鍵字,限定的是形式參數如
public class ObjectTool<T extends Number>
表示只接受Number類或其子類的參數
?
的邊界限定:並配合extends
和super
關鍵字,限定的是實際參數
List<?>
:等效於List<? extends Object>
List<? extends Number>
:表示不肯定參數類型,但必定是Number類或其子類的類型List<? super Number>
:表示不肯定參數類型,但必定是Number類或其父類的類型如
List<? extends Number> list =new ArrayList<Integer>();
表示建立元素對象都是Integer的List
//擦除前
class Pair<T> {
private T value;
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
//擦除後
class Pair {
private Object value;
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}
複製代碼
//不能用基本類型實例化泛型
Pair<int, char> p = new Pair<>(8, 'a'); // error
Pair<Integer, Character> p = new Pair<>(8, 'a'); // ok
複製代碼
//不能用static修飾泛型類型
public class MobileDevice<T> {
private static T os; // error
}
複製代碼
//不能對參數化類型使用Casts,除非是無界通配符類型
List<Integer> li = new ArrayList<>();
List<?> list = li; // ok
List<Number> ln = (List<Number>) li; // error
複製代碼
//不能對參數化類型使用instanceof,除非是無界通配符類型
public static <E> void rtti(List<E> list) {
if (list instanceof ArrayList<Integer>) { // error
}
if (list instanceof ArrayList<?>) { // OK
}
}
複製代碼
//不能建立參數化類型的數組
ArrayList<String>[] arrayOfList = new ArrayList<String>[3]; // error
複製代碼
//不能建立、捕捉或拋出參數化類型的對象
class MathException<T> extends Exception {} // error
class QueueFullException<T> extends Throwable {} // error
public static <T extends Exception, J> void execute(List<J> jobs) {
try {
} catch (T e) { // error
}
}
複製代碼
//不能重載參數類型爲相同原始類型的方法,由於擦除後是同樣的
public class Example { // error
public void print(List<String> list) {}
public void print(List<Integer> list) {}
}
複製代碼
b.反射
java.lang.Class
:實現反射的基礎
Class
對象,並把它保存在同名.class
文件。有關類加載機制java.lang.reflect
中的全部類都沒有public
構造方法,只能經過Class類得到這些類的實例.class
:經過類的類型,基本類型可使用Object.getClass()
:經過對象實例,注意基本數據類型沒法使用Class.forName()
:經過類的全限定名,注意基本數據類型沒法使用Class c1 = Test.class;
Class c2 = test.getClass();// test是Test類的一個對象
Class c3 = Class.forName("com.catchu.me.reflect.Test");
複製代碼
更多獲取方法見Java反射
java.lang.reflect.Member
:反射操做的對象。提供三個實現類可在運行時改變對象狀態:
Constructor
:對應類成員中的構造函數Field
:對應類成員中的變量Method
:對應類成員中的方法在Class提供多種方法能夠獲取給定類的Constructor、Field和Method,方法以下圖:
應用:Java反射徹底解析
3.一點小感悟
也是前幾天發現秋招號角已經吹響許久了,然而新一期開發排期比較緊,產品迭代也很快,此次還要獨立開發和維護新增的一整塊功能,加上實習以來沒睡過一天懶覺,週末不是約玩就是去公司,身體也開始抗議,忽然有些焦灼和緊張。
因此寫文的進度也只好放慢下來,暫時完結《深刻理解Java虛擬機》的讀書筆記板塊,也差很少把想看的章節整理完畢,後續閒時再把餘下的補全;目前計劃就是把以前Retrofit的坑填好,固然這不會是最後一個框架;週記大概不能叫週記了,半月記?月記?可是實習學到的看到的都會在小本本里記好,差很少攢夠了就會發出來。
這陣子事業部陸陸續續了開了三次大型會議 ,讓我更瞭解目前新零售在作什麼、爲何作、要怎麼作,清楚整個新零售事業羣的組織架構以及咱們閃購事業部的產品服務,還有身爲"工程師"而不是"碼農"的咱們要有什麼樣的素質和品質,每次都有格局放大、眼界放寬的成長。
忙碌的工做不時地組團聽個技術分享會、抽個晚上團建海底撈、下午再來個水果和可愛多,偶爾來個小插曲放鬆一下,真的很知足了。
終於等來了美團閃購品牌的發佈會,最後爲我大閃購打個廣告!🔥連接在此:美團閃購:一不當心就把你的生活採購需求都給安排妥了!