簡述
Material Design從Android 5.0開始引入,是一種全新的設計語言,稱為“原材料設計”,是谷歌提倡的一種設計風格、理念、原則。結合擬物設計和扁平化設計風格,融入了一些科技理念。
想深入瞭解的話,可以查這篇wiki:Material Design 中文版
*注:使用下文中介紹的控制元件,需在專案中引入v7包的支援。正如上面所說,Material Design從Android 5.0開始引入,故低版本的系統沒有這類控制元件。
如:使用Android Studio可以在gradle的dependencies中寫入:
compile 'com.android.support:appcompat-v7:25.3.0'複製程式碼
Eclipse的請自行百度吧,畢竟就算匯入了v7包,若編譯版本和v7包的版本存在新舊問題時,v7包工程自身會報錯的,還有其他一些細節要注意,這裡就不做介紹了。
一、SwipeRefreshLayout
1、使用
SwipeRefreshLayout是谷歌推出的一個下拉重新整理控制元件,符合MD設計,使用方便,可通過其提供的方法設定控制元件的尺寸、顏色、重新整理距頂懸浮距離等,具體使用如下:
//設定 SwipeRefreshLayout 的尺寸
mSrl.setSize(SwipeRefreshLayout.LARGE);
//設定 SwipeRefreshLayout 重新整理時的顏色切換(可以有無數種)
mSrl.setColorSchemeColors(Color.RED, Color.YELLOW, Color.GREEN);
//設定 SwipeRefreshLayout 的背景色
mSrl.setBackgroundColor(Color.GRAY);
//設定 SwipeRefreshLayout 的下拉距離
mSrl.setDistanceToTriggerSync(100);
//設定 SwipeRefreshLayout 正在重新整理監聽
mSrl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
...
重新整理資料來源
...
}
});
//手動停止重新整理
mSrl.setRefreshing(false);複製程式碼
2、效果預覽:
二、ListPopupWindow
popupWindow大家都知道,是Android中彈出式選單,而ListPopupWindow顧名思義就是列表型的彈出式選單,使用該控制元件可以做到類似下拉選單的功能,但不限如此。
1、使用
mListPopupWindow = new ListPopupWindow(this);
//設定 ListPopupWindow 的資料介面卡
mListPopupWindow.setAdapter(mAdapter);
//設定 ListPopupWindow 的顯示位置(在指定控制元件下方)
mListPopupWindow.setAnchorView(view);
//設定 ListPopupWindow 的寬度
mListPopupWindow.setWidth(200);
//設定 ListPopupWindow 的高度
mListPopupWindow.setHeight(500);
//設定 ListPopupWindow 的條目點選事件(必須在show方法前設定,否則無效)
mListPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(getApplicationContext(), mItemArr[position], Toast.LENGTH_SHORT).show();
mListPopupWindow.dismiss();
}
});
mListPopupWindow.show();複製程式碼
2、效果預覽:
三、PopupMenu
PopupMenu代表彈出式選單,它會在指定元件上彈出PopupMenu,預設情況下,PopupMenu會顯示在該元件的下方或上方。與ListPopupWindow的區別在於,ListPopupWindow使用介面卡來填充條目,而PopupMenu則是使用menu佈局來填充條目。
1、使用
PopupMenu popupMenu = new PopupMenu(this, view);
//設定 PopupMenu 的顯示選單項
popupMenu.inflate(R.menu.main);
// popupMenu.getMenuInflater().inflate(R.menu.main, popupMenu.getMenu());//與一行沒什麼區別
//預設 PopupMenu 不顯示條目icon,可以通過反射來強制使其顯示icon
Field field = popupMenu.getClass().getDeclaredField("mPopup");
field.setAccessible(true);
MenuPopupHelper mHelper = (MenuPopupHelper) field.get(popupMenu);
mHelper.setForceShowIcon(true);
//設定 PopupMenu 的條目點選事件(點選後會自動dismiss)
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(getApplicationContext(), item.getTitle(), Toast.LENGTH_SHORT).show();
return false;
}
});
//顯示 PopupMenu
popupMenu.show();複製程式碼
2、效果預覽:
四、LinearLayoutCompat
LinearLayoutCompat是對LinearLayout的擴充套件,可以為此佈局中的子View之間新增分割線divider。可以通過自定義屬性divider來指定分割線的樣式,通過自定義屬性showDividers來指定分割線的顯示位置。
1、使用
<android.support.v7.widget.LinearLayoutCompat
android:id="@+id/llc"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:orientation="vertical"
app:divider="@drawable/line"
app:showDividers="beginning">
...
子控制元件
...
</android.support.v7.widget.LinearLayoutCompat>複製程式碼
2、效果預覽:
五、RecyclerView
RecyclerView是v7包中最重要、最常用的控制元件之一,可實現線性列表、網格列表、瀑布流列表效果,卻具有高度解耦、效能優化的優勢,可以說是ListView、GridView的增強版。
1、使用
RecyclerViewr的使用大體分兩步:
- 設定介面卡Adapter
- 設定佈局管理器LayoutManager
1)設定介面卡Adapter
RecyclerView使用的介面卡必須繼承RecyclerView.Adapter,並指定RecyclerView.ViewHolder,在onCreateViewHolder()中建立自定義的RecyclerView.ViewHolder,在onBindViewHolder()中對條目進行設定,理解上相對簡單,程式碼如下:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private List<String> mData;
public MyAdapter(List<String> data) {
mData = data;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = View.inflate(parent.getContext(), android.R.layout.simple_list_item_1, null);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.mTv.setText(mData.get(position));
}
@Override
public int getItemCount() {
return mData.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView mTv;
public MyViewHolder(View itemView) {
super(itemView);
mTv = (TextView) itemView.findViewById(android.R.id.text1);
}
}
}複製程式碼
2)設定佈局管理器LayoutManager
RecyclerView可以使用佈局管理器有三種:
- LinearLayoutManager:線性列表
- GridLayoutManager:網格列表
- StaggeredGridLayoutManager:瀑布流列表
以LinearLayoutManager為例:
LinearLayoutManager(Context context, int orientation, boolean reverseLayout)複製程式碼
在建立LinearLayoutManage時,可以通過引數二指定列表的方向,通過引數三指定資料是否反轉(本來資料是從上到下進行填充,當設定了reverseLayout為true時,資料則從下到上進行填充),GridLayoutManager及StaggeredGridLayoutManager的使用也差不多。
呼叫RecyclerView的setLayoutManager()即可設定佈局管理器
mRv.setLayoutManager(new LinearLayoutManager(this));複製程式碼