Android 開發中的注意點

前言

我們平常在開發Android的時候,經常會遇見命名感覺代碼是對的,但是效果確實不盡人意的時刻.其實很多時候都是自己的代碼或者其他地方沒有注意到引起的.所以博主把博主開發的時候遇到的坑全都記錄下來,方便自己查閱也做一個分享.會不斷的更新

代碼編寫方面


  • Fragment

add fragment到Activity上的時候注意了,這個方法內部有一些異步的操作,導致你add之後立馬通過getFragmentByTag方法拿到的是Null


  • 自定義控件實現拖動的效果注意點

有時候我們需要一個View可以拖動,我們拖動的時候拿到的差值dx,dy一般是通過onTouchEvent回調方法中計算出來的,但是這裏有一個注意點,如果當你要改變自身view的位置的時候,千萬不要使用Event對象的getX()和getY()方法,因爲這兩個方法是和自身View息息相關的,獲取到的值是從自身View的left和top計算的
所以這時候你如果要得到準確的值你可以將getX()得到的值加上getLeft()的值,這時候值就是和自身View位置無關的值了
或者你可以使用Event中的getRawX()和getRawY()方法
當你自定義的View中不會改變自身的位置的時候,你就可以使用Event的getX()和getY()


  • xml中控件隱藏的問題

xml 的編寫在我們的開發中實在是太常用了,但是不知道有沒有人遇到下面的情況.
對於一個維護的界面,你可能想要知道這個界面是如何實現的,那麼一般都是看運行的效果和看界面對應的xml開始.但是很多的xml中會有隱藏的控件,其實就是界面剛加載的時候需要隱藏.
但是就是這麼一點細節導致你看xml是比較吃力的.因爲xml有預覽界面,你把一些控件都隱藏了,直接加深了理解的難度.

所以這裏發表下博主的見解.平時開發xml的時候所有控件都不要隱藏,這樣子別人再看這個界面的時候能從預覽界面一眼看到所有的控件.如果有需要隱藏的控件,請在Activity初始化的時候去隱藏控件!


  • 界面之間的跳轉

有些人覺得這一點有什麼可講的,一個跳轉而已,是呀,對於那些入口不多的界面來說,跳轉這點是沒必要,但是一旦有些界面跳轉的入口多了,比如電商的商品詳情界面,入口可以是一個h5,首頁推薦,購物車,訂單列表,訂單詳情,甚至可以是任何可以推薦商品的地方。那麼如果你每個地方還是像下面一樣把這段代碼寫的到處都是

Intent intent = new Intent(this, ProductDetailAct.class);
startActivity(intent);

那麼有人會說,我寫了一個工具類來實現這種入口非常多的界面的跳轉,這樣子就方便日後的維護了.這麼做是沒什麼問題,但是會多出來一個所謂的工具類,博主的建議是直接在商品詳情的Activity中寫一個靜態的方法即可,這樣即可以統一管理,也符合設計.既不會多一個工具類,同時也有一種誰的界面跳轉誰自己管的意思.博主覺得這種方式是比較好的.


  • 組件的封裝
    在項目中總有很多組合控件是類似的,或者基本都是一樣的,所以我們平時可以用include便籤來抽取封裝一些一樣的視圖,比如標題欄、顯示頭像的組件、比如項目中大範圍用到的一種或者兩種或者更多樣式的按鈕之類的控件
    include 標籤只適用靜態的視圖,什麼意思?比如標題欄這個xml,A界面include了,你需要在A Activity中找到標題欄控件設置標題,那麼如果B界面也 include了,也要重新做一遍,其實這是很傻的一種行爲,爲什麼不能在A的xml中就把標題欄的標題給指定呢?那麼你在A Activity中就根本不需要寫任何代碼,B界面亦是如此
    所以針對上述的情況,我們在A 界面的xml中就不應該 使用include,而是直接使用自己封裝的titlebar,雖然裏面的佈局依舊是你 include進來的xml,但是這裏面有一個很大的區別是,你在A界面的xml中就可以通過自定義屬性指定標題了,指定返回圖標,等等.就相當於在A的xml中就完成了標題欄的初始化,當然了,對於那種滑動要改變標題欄的透明度之類的效果,當然還要寫額外的代碼,但是我們界面基本都不是這樣的,所以你能少寫很多代碼!

資源文件方面


selector選擇器爲什麼不生效?

如果你寫的是點擊反饋的選擇器,那麼做到下面兩點就肯定生效了
  • 狀態是android:state_pressed
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/om_solid_shape8"/>
    <item android:drawable="@drawable/om_solid_shape2"/>
</selector>
  • 使用的控件註冊了點擊事件,否則沒有效果!(博主之前就是因爲這個被坑的要死)
發佈了119 篇原創文章 · 獲贊 275 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章