Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android(Lollipop/5.0) Material Design(一) 簡介

Android(Lollipop/5.0) Material Design(一) 簡介

編輯:關於Android編程

 

使用Material Design 需要api21,即Lollipop/5.0以上

Material Design 為應用提供了:一個新的主題,一些組合View的新Widget,一些自定義陰影和動畫的新Api

 

Material 主題

 

在manifest.xml 中<... android:theme=@android:style/Theme.Material /> 提示一下有很多相關的主題

Lists和Cards

5.0提供了兩個新的Widget,它們使用了Material Design 的style和animation:

RecyclerView 一個更可插拔式的ListView,它支持不同的布局類型,並且性能有了改進。 列表式

CardView 一個能讓你在其內顯示重要信息,並保持連貫的視覺和感覺的卡片 卡片式

它兩位於 sdk/extras/android/support/v7/cardview 和 sdk/extras/android/support/v7/RecyclerView

View的陰影

View現在除了x、y屬性外還有z,z代表一個view的仰角(elevation, 姑且這麼翻譯吧)

z越大,陰影越大;z越大,view會出現在其他view的頂部

 

動畫

新的動畫Api,讓你在UI控件裡能創建觸摸反饋,改變View的狀態,切換activity的一系列自定義動畫

具體有:

響應View的touch事件的觸摸反饋動畫

隱藏和顯示View的循環展示動畫

兩個Activity間的切換動畫

更自然的曲線運動的動畫

使用View的狀態更改動畫,能改變一個或多個View的屬性

在View的狀態更改時顯示狀態列表動畫

這些new animations Api,已內置在標准Widget中,如Button。在自定義view時也可使用這些api

 

圖片

可伸縮的矢量圖片不會丟失清晰度,並且單一顏色的app-icon是完美的

可定義一個bitmap作為透明度(alpha)和運行時的顏色

可對一個bitmap image取色,會取出它比較顯眼的顏色

 

附RecyclerView的例子:

 

[java] view plaincopyprint?在CODE上查看代碼片派生到我的代碼片
  1. import android.app.Activity;
  2. import android.os.Bundle;
  3. import android.support.v7.widget.GridLayoutManager;
  4. import android.support.v7.widget.RecyclerView;
  5. import android.support.v7.widget.RecyclerView.LayoutParams;
  6. import android.view.LayoutInflater;
  7. import android.view.ViewGroup;
  8. import android.widget.TextView;
  9.  
  10. public class RecyclerViewActivity extends Activity {
  11. /*
  12. * recyclerview提供這些內置的布局管理器:
  13. * linearlayoutmanager 顯示垂直滾動列表或水平的項目。
  14. * gridlayoutmanager 顯示在一個網格項目。
  15. * staggeredgridlayoutmanager 顯示在交錯網格項目。
  16. * 自定義的布局管理器,需要繼承recyclerview.layoutmanager類。
  17. *
  18. * add/remove items時的動畫是默認啟用的。
  19. * 自定義這些動畫需要繼承RecyclerView.ItemAnimator,並實現RecyclerView.setItemAnimator()
  20. */
  21. private RecyclerView mRecyclerView;
  22. private RecyclerView.Adapter mAdapter;
  23. private RecyclerView.LayoutManager mLayoutManager;
  24. private String[] myDataset;
  25.  
  26. @Override
  27. protected void onCreate(Bundle savedInstanceState) {
  28. super.onCreate(savedInstanceState);
  29.  
  30. setContentView(R.layout.recycler_view);
  31. mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
  32.  
  33. // use this setting to improve performance if you know that changes
  34. // in content do not change the layout size of the RecyclerView
  35. mRecyclerView.setHasFixedSize(true);
  36.  
  37. // use a linear layout manager
  38. // mLayoutManager = new LinearLayoutManager(this);
  39.  
  40. // mLayoutManager = new GridLayoutManager(this, 3, GridLayoutManager.VERTICAL, true);
  41. //true 表示,將layout內容反轉
  42. mLayoutManager = new GridLayoutManager(this, 3, GridLayoutManager.VERTICAL, false);
  43. //HORIZONTAL 橫向滾動顯示內容 VERTICAL縱向
  44. // mLayoutManager = new GridLayoutManager(this, 3, GridLayoutManager.HORIZONTAL, false);
  45.  
  46. //方向也是指示滾動方向,例子中橫向開頭的數據交錯了一點, 縱向的無交錯
  47. // mLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.HORIZONTAL);
  48. // mLayoutManager = new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL);
  49.  
  50. mRecyclerView.setLayoutManager(mLayoutManager);
  51. // mRecyclerView.setLayoutManager(new MyLayoutMnager()); //數據不顯示,可能還需要重寫什麼東西。。
  52.  
  53. // specify an adapter (see also next example)
  54.  
  55. setDatas();
  56. mAdapter = new MyAdapter(myDataset);
  57. mRecyclerView.setAdapter(mAdapter);
  58. }
  59.  
  60. private void setDatas() {
  61. int len = 200;
  62. myDataset = new String[len];
  63. for (int i = 0; i < len; i++) {
  64. switch (i%3) {
  65. case 0:
  66. myDataset[i] = 中國 + i;
  67. break;
  68. case 1:
  69. myDataset[i] = 美國 + i;
  70. break;
  71. case 2:
  72. myDataset[i] = 澳大利亞 + i;
  73. break;
  74. }
  75. }
  76. }
  77.  
  78. class MyLayoutMnager extends RecyclerView.LayoutManager {
  79.  
  80. @Override
  81. public LayoutParams generateDefaultLayoutParams() {
  82. LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  83. params.topMargin = 5;
  84. return params;
  85. }
  86. }
  87.  
  88. class MyAdapter extends RecyclerView.Adapter {
  89. private String[] mDataset;
  90.  
  91. // Provide a reference to the views for each data item
  92. // Complex data items may need more than one view per item, and
  93. // you provide access to all the views for a data item in a view holder
  94.  
  95. // Provide a suitable constructor (depends on the kind of dataset)
  96. public MyAdapter(String[] myDataset) {
  97. mDataset = myDataset;
  98. }
  99.  
  100. // Create new views (invoked by the layout manager)
  101. @Override
  102. public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  103. // create a new view
  104. TextView tv = (TextView) LayoutInflater.from(parent.getContext())
  105. .inflate(R.layout.my_text_view, parent, false);
  106. // set the view's size, margins, paddings and layout parameters
  107. //...
  108. ViewHolder vh = new ViewHolder(tv); //構建一個ViewHolder
  109. return vh;
  110. }
  111.  
  112. // Replace the contents of a view (invoked by the layout manager)
  113. @Override
  114. public void onBindViewHolder(ViewHolder holder, int position) {
  115. // - get element from your dataset at this position
  116. // - replace the contents of the view with that element
  117. holder.mTextView.setText(mDataset[position]);
  118.  
  119. }
  120.  
  121. // Return the size of your dataset (invoked by the layout manager)
  122. @Override
  123. public int getItemCount() {
  124. return mDataset.length;
  125. }
  126. }
  127.  
  128. static class ViewHolder extends RecyclerView.ViewHolder {
  129. // each data item is just a string in this case
  130. public TextView mTextView;
  131. public ViewHolder(TextView v) {
  132. super(v);
  133. mTextView = v;
  134. }
  135. }
  136. }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved