整體Layout的調整:
- Margin影響的是與上一層layout的距離。但是listview除外。
- Layout_Gravity是指該Layout在上一層layout所偏重的位置。
- layout_weight是以倒數的方式來判斷。 0=無限大,同一層的其他widget都會被蓋掉而消失。數值越大,佔的權重越小。
- 使用imageview或是textview當作onclick的觸發條件,而且該view的長寬小於40dp的話,建議指定view padding,可達到加大該view的可按範圍的效果。
關於TextView:
- 自動換行:parent要固定長度(match_parent也可),設定single_line為false, layout_weight要指定一個數值。
- 用code設定layout_weight的方法為xxxxx.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1f));
- 不希望文字過多的時候會自動換行的話,Padding不要指定left跟right。文字過多時會切字。
關於listview:
- cell之間需要空隙,發現指定最外層layout的padding沒用的話,可以在cell layout的最外層再套另一個layout,然後指定原本的最外層layout的margin.
- setHeaderLayout / setFooterLayout 要在setadapter之前,要不然不會顯示
- 滑動的時候偶而會出現黑底的問題:在listview的properties加上android:cacheColorHint="@color/transparent"
-
讓listview點選的時候不會反白:android:listSelector="@color/transparent"
- 在cell上面的view object掛上onclicklistener之後,listview的onitemclicklistener失效: 在cell的root layout上面加上這個參數:android:descendantFocusability="blocksDescendants"或是直接改採在root layout上面掛onclicklistener的方法解決。
關於Fragment:
- 頁面的layout xml檔案內容請勿直接擺一個widget。最外層一定要指定一個Layout。
關於scrollview
- 建議不要直接當activity的root用,前面套一個layout才能自動調整垂直scroll的長度。
- scrollview下一層的layout,其margin的設定是不會有作用的。請再套一層layout去設定margin。
- 頁面有EditText等等會彈出輸入框的Layout,即使不會scroll,都強烈建議套上scrollview。這樣輸入框彈出的時候,layout可以捲動,不會導致layout下半部的輸入框無法輸入。
關於edittext:
- 防止autofocus: 在上一層layout指定下面兩個參數:
android:focusable="true" android:focusableInTouchMode="true" - 單航,游標自動游移:在android 6.0以後,andrid:singleLine的參數被停用。之後要靠設定「android:maxLines=1」還有設定「android:inputType="text"」跟「android:nextFocusForward=widget id」來啟用鍵盤的enter自動跳下一個EditText的動作。
RelativeLayout:
- 作為定位點的widget要寫在前面。要不然指定相對位置的參數的時候會抓不到widget。(相對id: 「@id/xxxx」。 可以改採絕對id「@+id/xxxx」就可以避開layout描述順序的問題)
- 從重要的定位點開始layout,依序描述。到最後就可以採用match_parent擺定位置。
- 尤其是中分型的design最為好用,可得奇效。
- 要讓widget的高度自動拉長,有時高度指定為match_parent會得不想要的效果(或是android studio顯示正確,但是實機上面顯示錯誤)。建議指定高度為wrap_content,先定義一個需要的高度的元件,然後指定layout_alignTop跟layout_alignBottom都是這個元件。此問題經確認是android 4.4.4版本以前的手機會產生。
- layout_centerInParent這個屬性在某些手機上面會把toLeftOf / toRightOf / toStartOf / toEndOf等等屬性給吃掉。請小心使用或是改用layout_centerVertical / layout_centerHorizontal 。
RadioGroup:
- 等同於LinearLayout。可用等分的方法去指定radiobutton的位置,不需使用過大的layout_margin導致在螢幕較小的device上面會跑版。