這是一個系列,咱們將其命名爲android最佳實踐,若是你尚未看以前的文章:android
android最佳實踐(三)github
android最佳實踐(四)segmentfault
在2016年的2月24日,google的Android開發團隊發佈了:佈局
compile 'com.android.support:appcompat-v7:23.2.0'
那麼其和咱們現階段用的23.1有什麼區別呢,在這篇博客中,將會講解appcompat23.2的新特性以及編寫相關實驗代碼,供你們一塊兒學習。學習
那麼,就從我最喜歡的AppCompat DayNight theme和 Bottom Sheets講起吧gradle
其提供了日夜模式,其對應有四種狀態:
public static final int MODE_NIGHT_NO = 1; public static final int MODE_NIGHT_YES = 2; public static final int MODE_NIGHT_AUTO = 0; public static final int MODE_NIGHT_FOLLOW_SYSTEM = -1;
其分別對應的是:不使用夜間模式,使用夜間模式,根據地理位置推算白天夜晚自動進入夜間或白天模式,根據Android系統設置的模式。
首先你須要在你的gradle文件中加入該版本的依賴包,而後修改主題爲Theme.AppCompat.DayNight,一樣的你能夠添加以night爲後綴的value文件,例如:
定義完主題後,你能夠在整個應用程序中設置默認值,好比:
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO);
或者你能夠經過setLocalNightMode方法,動態的設定主題。例如:
mButtonDay.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_NO); recreate(); } }); mButtonNight.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES); recreate(); } });
是否是很簡單!你也能夠查看源碼 https://github.com/neuyu/android-support-new-features
相信大部分同事都有過模仿ios的bottomsheet吧,如今Android的material design來了。
如今你僅僅須要將design包加入到你的項目:
compile 'com.android.support:design:23.2.0'
而後:
BottomSheetDialog dialog = new BottomSheetDialog(context); View view = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_list, null); RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.bottom_sheet_recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(context)); recyclerView.setAdapter(new SimpleAdapter()); dialog.setContentView(view); dialog.show();
其用法相似DialogFragment,須要自定義佈局,具體的如何爲其爲其添加點擊事件等。
經過附加一個BottomSheetBehavior到子視圖的CoordinatorLayout(添加app:layout_behavior =「android.support.design.widget.BottomSheetBehavior」),經過對BottomSheet的操做咱們能夠獲得它的五種狀態。
STATE_COLLAPSED:關閉Bottom Sheets,高度可控屬性app:behavior_peekHeight(默認爲0)
STATE_DRAGGING:在用戶直接拖動Bottom Sheets向上或向下的中間狀態
STATE_SETTLING:當Bottom Sheets被釋放和沉降到其最終位置記錄的狀態
STATE_EXPANDED:Bottom Sheets展開時的狀態
STATE_HIDDEN:默認狀況下禁用(和啓用應用程序:behavior_hideable屬性),這使得用戶能夠向下滑動Bottom Sheets徹底隱藏底部。
關於矢量圖和動畫以及bottom sheets的事件監聽會在github中以代碼的形式給出,歡迎你們fork和star,謝謝。