美團實習| 周記(五)

本周知識清單如下:ps文末有驚喜鏈接↓↓↓

  • UI小課堂
    • TextView行間距、字間距
    • EditText有光標不彈出軟鍵盤
    • EditText限定輸入字符的類型誊册、最大數(shù)量
    • 指定Dialog寬高
    • 資源文件&系統(tǒng)文件
  • Java基礎之泛型&反射
  • 一點小感悟

1.UI小課堂

a.TextView行間距、字間距

  • 設置行間距的兩個屬性:
    • android:lineSpacingExtra:設置行間距盒使,如10dp趾访。值為正數(shù)表示增加行間距留储,為負數(shù)表示減少行間距,為0則沒有變化
    • android:lineSpacingMultiplier設置行間距的倍數(shù)咙轩,如1.5获讳。值大于1.0表示增加行間距,小于1.0表示減少行間距
  • 設置字間距的屬性:android:textScaleX活喊,水平方向放大丐膝,相當于把文字拉長;可以通過加空格的方式增加字間距

b.EditText有光標不彈出軟鍵盤

網(wǎng)上很多方法都不好使钾菊,親測以下方法有用帅矗,不僅有光標閃爍還不會彈出軟鍵盤。

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限定輸入字符的類型煞烫、最大數(shù)量

  • 限定輸入字符的類型兩種方式
    • 在代碼中設置EditText.setInputType()
    • 在布局中設置android:inputType
//例如损晤,限定只能輸入數(shù)字
mEditText.setRawInputType(InputType.TYPE_CLASS_NUMBER);
//或者,在布局文件添加屬性
android:inputType="number"

關(guān)于輸入類型可見文章:EditText輸入類型InputType值

  • 限定輸入字符的最大數(shù)量兩種方式
    • 在代碼中設置EditText.setFilters()
    • 在布局中設置android:maxLength
//比如红竭,允許輸入的最大字符量為11尤勋,等效于android:maxLength="10"
mEditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(11)});

更多屬性可見EditText屬性大全詳解

d.指定Dialog寬高

Dialog有限制的最大寬高,可能會導致在布局設置的寬高大小失效茵宪,這里提高兩種解決辦法最冰。

  • 代碼設置,特別注意以下代碼一定要在Dialog.show()之后
WindowManager.LayoutParams params = mDialog.getWindow().getAttributes();
params.width = 840;//單位為px
mDialog.getWindow().setAttributes(params);

推薦閱讀源碼分析Dialog自定義大小無效

  • style文件設置
//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>

//創(chuàng)建dialog時用有style參數(shù)的構(gòu)造函數(shù)
AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.CustomDialog);

e.資源文件&系統(tǒng)文件

引用資源文件&系統(tǒng)文件有兩種方式暖哨,一種是在布局文件:

@type/name:表示引用自定義的資源

//引用strings資源文件里名為content對應的語句
android:text="@string/content"

@android:type/name:表示引用系統(tǒng)的public資源

//引用系統(tǒng)資源文件里的顏色black
android:textColor="@android:color/black"

@*android:type/name:表示引用系統(tǒng)的所有資源

:表示引用主題屬性

//引用當前主題資源中名為borderlessButtonStyle的屬性值
style="?android:attr/borderlessButtonStyle"

@+:表示創(chuàng)建或引用資源凰狞。如果資源不存在表示創(chuàng)建篇裁、如果已存在表示引用。

  • @+id/資源ID名:新建一個資源ID
  • @id/資源ID名:引用已定義的資源ID赡若,包括系統(tǒng)ID
  • @android:id/資源ID名:引用系統(tǒng)ID达布,等效于@id/資源ID名

另一種是在代碼中,通過Context.getResources().getXXX(資源ID)獲取相應的資源逾冬,并將它作為參數(shù)傳入相應的setXXX()方法中從而設置控件的屬性黍聂。

//設置字體顏色
mTextView.setTextColor(getResources().getColor(R.color.colorPrimary));
//如果R.color.colorPrimary對應顏色是#FF0000,那么等效寫法為
mTextView.setTextColor(Color.parseColor("#FF0000"));

2.Java基礎之泛型&反射

a.泛型

  • 含義:是JDK1.5的新特性,本質(zhì)是參數(shù)化類型,即所操作的數(shù)據(jù)類型被指定為一個參數(shù)服鹅,使用時通過傳參來指定具體的類型。
  • 好處安全簡單例驹。具體體現(xiàn)在提供編譯時的強類型檢查,而不用等到運行;可避免類類型強制轉(zhuǎn)換;增強代碼可讀性牛隅。
//不使用泛型需要強制轉(zhuǎn)換
List list = new ArrayList();
list.add("hello");
String s = (String) list.get(0)
//使用泛型可避免強制轉(zhuǎn)換
List<String> list = new ArrayList<String>();
list.add("hello");
String s = list.get(0);

以上例子也能看到在集合類使用泛型的情況很普遍炕柔,而且相比于數(shù)組具有動態(tài)的特點。

  • 類型:通過創(chuàng)建位置的不同倔叼,分可為
    • 泛型類public class 類名<泛型類型1,…>
    • 泛型方法public <泛型類型1,…> 返回類型 方法名(泛型類型1 參數(shù)名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關(guān)鍵字宫莱,限定的是形式參數(shù)

public class ObjectTool<T extends Number>表示只接受Number類或其子類的參數(shù)

  • 通配符?的邊界限定:并配合extendssuper關(guān)鍵字丈攒,限定的是實際參數(shù)
    • 未受限List<?> :等效于List<? extends Object>
    • 上邊界限定List<? extends Number> :表示不確定參數(shù)類型,但一定是Number類或其子類的類型
    • 下邊界限定List<? super Number> :表示不確定參數(shù)類型授霸,但一定是Number類或其父類的類型

List<? extends Number> list =new ArrayList<Integer>();表示創(chuàng)建元素對象都是Integer的List

  • 泛型擦除:清除泛型類型參數(shù)的相關(guān)信息巡验,并且在必要的時候添加類型檢查和類型轉(zhuǎn)換的方法。即泛型java代碼->普通java代碼
//擦除前
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
}
//不能對參數(shù)化類型使用Casts碘耳,除非是無界通配符類型
List<Integer> li = new ArrayList<>();
List<?> list = li; // ok
List<Number> ln = (List<Number>) li; // error
//不能對參數(shù)化類型使用instanceof显设,除非是無界通配符類型
public static <E> void rtti(List<E> list) {
    if (list instanceof ArrayList<Integer>) {  // error
    }
    if (list instanceof ArrayList<?>) {  // OK
    }
}
//不能創(chuàng)建參數(shù)化類型的數(shù)組
ArrayList<String>[] arrayOfList = new ArrayList<String>[3]; // error
//不能創(chuàng)建、捕捉或拋出參數(shù)化類型的對象
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
    }
}
//不能重載參數(shù)類型為相同原始類型的方法,因為擦除后是一樣的
public class Example { // error
    public void print(List<String> list) {}
    public void print(List<Integer> list) {}
}

b.反射

  • 含義:在運行狀態(tài)中辛辨,對于任意一個類都能知道它的所有屬性和方法捕捂,對于任何一個對象都能夠調(diào)用它的任何一個方法和屬性。
  • 功能:動態(tài)性
    • 在運行時判斷任意一個類所具有的屬性和方法
    • 在運行時判斷任意一個對象所屬的類
    • 在運行時構(gòu)造任意一個類的對象
    • 在運行時調(diào)用任意一個對象的方法
    • 生成動態(tài)代理
  • java.lang.Class:實現(xiàn)反射的基礎
    • 原因
      • JVM每創(chuàng)建一個類都會產(chǎn)生一個對應Class對象斗搞,并把它保存在同名.class文件指攒。有關(guān)類加載機制
      • Java反射包java.lang.reflect中的所有類都沒有public構(gòu)造方法,只能通過Class類獲得這些類的實例
    • 獲取Class對象的方法
      • .class:通過類的類型僻焚,基本類型可以使用
      • Object.getClass():通過對象實例允悦,注意基本數(shù)據(jù)類型無法使用
      • Class.forName():通過類的全限定名,注意基本數(shù)據(jù)類型無法使用
Class c1 = Test.class; 
Class c2 = test.getClass();// test是Test類的一個對象
Class c3 = Class.forName("com.catchu.me.reflect.Test"); 

更多獲取方法見Java反射

  • java.lang.reflect.Member:反射操作的對象虑啤。提供三個實現(xiàn)類可在運行時改變對象狀態(tài):
    • Constructor :對應類成員中的構(gòu)造函數(shù)
    • Field :對應類成員中的變量
    • Method :對應類成員中的方法

在Class提供多種方法可以獲取給定類的Constructor隙弛、Field和Method,方法如下圖:

應用Java反射完全解析


3.一點小感悟

也是前幾天發(fā)現(xiàn)秋招號角已經(jīng)吹響許久了狞山,然而新一期開發(fā)排期比較緊全闷,產(chǎn)品迭代也很快,這次還要獨立開發(fā)和維護新增的一整塊功能萍启,加上實習以來沒睡過一天懶覺室埋,周末不是約玩就是去公司,身體也開始抗議伊约,突然有些焦灼和緊張姚淆。

所以寫文的進度也只好放慢下來,暫時完結(jié)《深入理解Java虛擬機》的讀書筆記板塊屡律,也差不多把想看的章節(jié)整理完畢腌逢,后續(xù)閑時再把余下的補全;目前計劃就是把之前Retrofit的坑填好超埋,當然這不會是最后一個框架搏讶;周記大概不能叫周記了佳鳖,半月記?月記媒惕?但是實習學到的看到的都會在小本本里記好系吩,差不多攢夠了就會發(fā)出來。

這陣子事業(yè)部陸陸續(xù)續(xù)了開了三次大型會議 妒蔚,讓我更了解目前新零售在做什么穿挨、為什么做、要怎么做肴盏,清楚整個新零售事業(yè)群的組織架構(gòu)以及我們閃購事業(yè)部的產(chǎn)品服務科盛,還有身為"工程師"而不是"碼農(nóng)"的我們要有什么樣的素質(zhì)和品質(zhì),每次都有格局放大菜皂、眼界放寬的成長贞绵。

忙碌的工作不時地組團聽個技術(shù)分享會、抽個晚上團建海底撈恍飘、下午再來個水果和可愛多榨崩,偶爾來個小插曲放松一下,真的很滿足了章母。

終于等來了美團閃購品牌的發(fā)布會母蛛,最后為我大閃購打個廣告!??鏈接在此:美團閃購:一不小心就把你的生活采購需求都給安排妥了胳施!

美團閃購品牌發(fā)布會

為期兩個月的短暫的美團實習隨著秋招的開始也就告一段落了溯祸,最后對這段日子進行了小總結(jié),詳見2019Android秋招提前批面試總結(jié)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末舞肆,一起剝皮案震驚了整個濱河市焦辅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌椿胯,老刑警劉巖筷登,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異哩盲,居然都是意外死亡前方,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門廉油,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惠险,“玉大人,你說我怎么就攤上這事抒线“喙” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵嘶炭,是天一觀的道長抱慌。 經(jīng)常有香客問我逊桦,道長,這世上最難降的妖魔是什么抑进? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任强经,我火速辦了婚禮,結(jié)果婚禮上寺渗,老公的妹妹穿的比我還像新娘匿情。我一直安慰自己,他們只是感情好户秤,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布码秉。 她就那樣靜靜地躺著逮矛,像睡著了一般鸡号。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上须鼎,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天鲸伴,我揣著相機與錄音,去河邊找鬼晋控。 笑死汞窗,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的赡译。 我是一名探鬼主播仲吏,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蝌焚!你這毒婦竟也來了裹唆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤只洒,失蹤者是張志新(化名)和其女友劉穎许帐,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毕谴,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡成畦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了涝开。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片循帐。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖舀武,靈堂內(nèi)的尸體忽然破棺而出拄养,到底是詐尸還是另有隱情,我是刑警寧澤奕剃,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布衷旅,位于F島的核電站捐腿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏柿顶。R本人自食惡果不足惜茄袖,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嘁锯。 院中可真熱鬧宪祥,春花似錦、人聲如沸家乘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仁锯。三九已至耀找,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間业崖,已是汗流浹背野芒。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留双炕,地道東北人狞悲。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像妇斤,于是被迫代替她去往敵國和親摇锋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理站超,服務發(fā)現(xiàn)荸恕,斷路器,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • Scala與Java的關(guān)系 Scala與Java的關(guān)系是非常緊密的G瓯唷戚炫! 因為Scala是基于Java虛擬機,也就是...
    燈火gg閱讀 3,421評論 1 24
  • 簡書:天仙中學七六高同學畢業(yè)40年周年聚會 石墨L天仙中學七六高同學畢業(yè)40年周年聚會http://suo.im/...
    新綠_b853閱讀 1,228評論 0 0
  • 心障難解媳纬! 自狠狠地把自己的第一個蘋果手機拍在桌上起已經(jīng)三個小時了双肤。結(jié)果是:1,手機可能壞了钮惠,目前運行不怎么正常茅糜;...
    楓霜寒客閱讀 808評論 1 5
  • 坐在車上……念想…… 偶爾懷念以前寫文字的痛快,不是因為寫得好素挽,因為寫下來了蔑赘,告訴你心底的自己,有...
    笨小賢閱讀 319評論 0 0