如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里
一、添加表頭:
復制代碼
二、設置表格屬性:
復制代碼
注:在進行表格設置時必須是“ui->tableView->setModel(model);”在前,屬性具體設置在后,
反之則設置不會生效。如上述代碼所示。
三、添加行(添加三行一樣的信息):
復制代碼
四、刪除行:
復制代碼
再舉一個例子:
在一個藥品劃價模塊中有這樣的操作流程:
檢索處方項目成功后,把該項目顯示到QTableView里,把需要編輯的數量字段提供給用戶輸入,用戶輸入確認后,該項目留在列表中,然后開始下一項目檢索錄入。
實現過程如下:
錄入的項目保留在臨時表tmp中,界面上的QTableView取名為tbList,與tbList關聯的Model取名為tb1。檢索成功后,把檢索結果插入到臨時表中,把需要編輯的字段提供給用戶。
復制代碼
程序中需要顯示的時候,
復制代碼
程序中需要提供編輯輸入的時候
復制代碼
有一個問題需要注意。向QTableView中添加記錄時,字段一定要完整,不能有空白字段,否則結果無法保存。切記。
如果需要對用戶輸入做限制,比如只能在指定的字段輸入指定的數據類型,可以通過QItemDelegate來實現。
貼一段代碼,說明QTableView基本用法
QT的MVC(View/Delegate)模型十分強大,可以利用各種控件來對表格的輸入進行限制,不過我以前一直沒有過,這幾天研究了一下,寫個小例子,希望大家喜歡。
如果看不懂這個例子,請先看QT的自帶例子:http://qt-project.org/doc/qt-4.8/itemviews-spinboxdelegate.html
思路:
1:為每一列定義委托:
A:第一列是編號列,使用只讀委托,令該列的單元格是只讀的
B:第三列是ID列,只能輸入1-12個數字,利用QLineEdit委托和正則表達式對輸入進行限制
C:第四年齡列,利用QSpinBox委托進行輸入限制,只能輸入1-100之間的數字
D:第五列是性別列,利用QComboBox委托對輸入進行限制,該列的單元格只能輸入Male或Female
E:第六列是頭像列,在該列的單元格中央放置一張頭像
2:定義代理類,把所有單元格中的字符居中顯示。
3:利用QSS,將表格的背景色弄成黃藍相間。
截圖:
上代碼:
1.#include <QtGui>
2.
3.//編號列,只讀委托
4.//這個方法我還真想不到,呵呵
5.class ReadOnlyDelegate : public QItemDelegate
6.{
7. Q_OBJECT
8.public:
9. ReadOnlyDelegate(QObject *parent = 0): QItemDelegate(parent) { }
10. QWidget *createEditor(QWidget*parent, const QStyleOptionViewItem &option,
11. const QModelIndex &index) const
12. {
13. return NULL;
14. }
15.};
16.
17.//ID列,只能輸入1-12個數字
18.//利用QLineEdit委托和正則表達式對輸入進行限制
19.class UserIDDelegate : public QItemDelegate
20.{
21. Q_OBJECT
22.public:
23. UserIDDelegate(QObject *parent = 0): QItemDelegate(parent) { }
24. QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
25. const QModelIndex &index) const
26. {
27. QLineEdit *editor = new QLineEdit(parent);
28. QRegExp regExp("[0-9]{0,10}");
29. editor->setValidator(new QRegExpValidator(regExp, parent));
30. return editor;
31. }
32. void setEditorData(QWidget *editor, const QModelIndex &index) const
33. {
34. QString text = index.model()->data(index, Qt::EditRole).toString();
35. QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
36. lineEdit->setText(text);
37. }
38. void setModelData(QWidget *editor, QAbstractItemModel *model,
39. const QModelIndex &index) const
40. {
41. QLineEdit *lineEdit = static_cast<QLineEdit*>(editor);
42. QString text = lineEdit->text();
43. model->setData(index, text, Qt::EditRole);
44. }
45. void updateEditorGeometry(QWidget *editor,
46. const QStyleOptionViewItem &option, const QModelIndex &index) const
47. {
48. editor->setGeometry(option.rect);
49. }
50.};
51.
52.//年齡列,利用QSpinBox委托進行輸入限制,只能輸入1-100之間的數字
53.class AgeDelegate : public QItemDelegate
54.{
55. Q_OBJECT
56.public:
57. AgeDelegate(QObject *parent = 0): QItemDelegate(parent) { }
58. QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
59. const QModelIndex &index) const
60. {
61. QSpinBox *editor = new QSpinBox(parent);
62. editor->setMinimum(1);
63. editor->setMaximum(100);
64. return editor;
65. }
66. void setEditorData(QWidget *editor, const QModelIndex &index) const
67. {
68. int value = index.model()->data(index, Qt::EditRole).toInt();
69. QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
70. spinBox->setValue(value);
71. }
72. void setModelData(QWidget *editor, QAbstractItemModel *model,
73. const QModelIndex &index) const
74. {
75. QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
76. spinBox->interpretText();
77. int value = spinBox->value();
78. model->setData(index, value, Qt::EditRole);
79. }
80. void updateEditorGeometry(QWidget *editor,
81. const QStyleOptionViewItem &option, const QModelIndex &index) const
82. {
83. editor->setGeometry(option.rect);
84. }
85.};
86.
87.//性別列,利用QComboBox委托對輸入進行限制
88.//這一列的單元格只能輸入Male或Female
89.class SexDelegate : public QItemDelegate
90.{
91. Q_OBJECT
92.public:
93. SexDelegate(QObject *parent = 0): QItemDelegate(parent) { }
94. QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
95. const QModelIndex &index) const
96. {
97. QComboBox *editor = new QComboBox(parent);
98. editor->addItem("Female");
99. editor->addItem("Male");
100. return editor;
101. }
102. void setEditorData(QWidget *editor, const QModelIndex &index) const
103. {
104. QString text = index.model()->data(index, Qt::EditRole).toString();
105. QComboBox *comboBox = static_cast<QComboBox*>(editor);
106. int tindex = comboBox->findText(text);
107. comboBox->setCurrentIndex(tindex);
108. }
109. void setModelData(QWidget *editor, QAbstractItemModel *model,
110. const QModelIndex &index) const
111. {
112. QComboBox *comboBox = static_cast<QComboBox*>(editor);
113. QString text = comboBox->currentText();
114. model->setData(index, text, Qt::EditRole);
115. }
116. void updateEditorGeometry(QWidget *editor,
117. const QStyleOptionViewItem &option, const QModelIndex &index) const
118. {
119. editor->setGeometry(option.rect);
120. }
121.};
122.
123.//頭像列,只是在單元格中央放一張小圖而已
124.class IconDelegate : public QItemDelegate
125.{
126. Q_OBJECT
127.public:
128. IconDelegate(QObject *parent = 0): QItemDelegate(parent) { }
129. void paint(QPainter *painter, const QStyleOptionViewItem &option,
130. const QModelIndex & index ) const
131. {
132. //show.bmp是在工程目錄中的一張圖片(其實就是QQ的圖標啦,呵呵)
133. QPixmap pixmap = QPixmap("show.bmp").scaled(24, 24);
134. qApp->style()->drawItemPixmap(painter, option.rect, Qt::AlignCenter, QPixmap(pixmap));
135. }
136.};
137.
138.//代理類,把所有單元格中的字符居中顯示
139.class VIPModel : public QStandardItemModel
140.{
141. Q_OBJECT
142.public:
143. VIPModel(QObject *parent=NULL) : QStandardItemModel(parent) { }
144. VIPModel(int row, int column, QObject *parent=NULL)
145. : QStandardItemModel(row, column, parent) { }
146. QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const
147. {
148. if( Qt::TextAlignmentRole == role )
149. return Qt::AlignCenter;
150. return QStandardItemModel::data(index, role);
151. }
152.
153.};
154.
155.#include "main.moc"
156.
157.int main(int argc, char *argv[])
158.{
159. QApplication app(argc, argv);
160.
161. VIPModel *model = new VIPModel(5, 5);
162. QTableView *tableView = new QTableView;
163.
164. //把表格的背景調成黃藍相間
165. //這種方法是在網上看到的,用起來還真方便啊
166. tableView->setAlternatingRowColors(true);
167. tableView->setStyleSheet("QTableView{background-color: rgb(250, 250, 115);"
168. "alternate-background-color: rgb(141, 163, 215);}");
169.
170. tableView->setWindowTitle("VIP List");
171. tableView->resize(700, 400);
172. tableView->setModel(model);
173. QStringList headerList;
174. headerList << "No." << "ID" << "Name" << "Age" << "Sex" << "Show";
175. model->setHorizontalHeaderLabels(headerList);
176. tableView->verticalHeader()->setVisible(false);
177. tableView->horizontalHeader()->setStretchLastSection(true);
178.
179. //為每一列加載委托
180. ReadOnlyDelegate readOnlyDelegate;
181. tableView->setItemDelegateForColumn(0, &readOnlyDelegate);
182. UserIDDelegate userIDDelegate;
183. tableView->setItemDelegateForColumn(1, &userIDDelegate);
184. AgeDelegate spinBoxDelegate;
185. tableView->setItemDelegateForColumn(3, &spinBoxDelegate);
186. SexDelegate comboBoxDelegate;
187. tableView->setItemDelegateForColumn(4, &comboBoxDelegate);
188. IconDelegate iconDelegate;
189. tableView->setItemDelegateForColumn(5, &iconDelegate);
190.
191. for(int i=0; i<10; i++)
192. {
193. QModelIndex index = model->index(i, 0, QModelIndex());
194. model->setData(index, i);
195. }
196.
197. tableView->show();
198. return app.exec();
199.}
藍藍設計( www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務
如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里
《名偵探柯南》中總是提到福爾摩斯的一段話:「When you have eliminated the impossible, whatever remains, however improbable, must be the truth.(排除一切不可能的,剩下的即使再不可能,那也是真相。)」這句話用干擾效應來解釋最好不過,本期我們來聊聊。
想看更多設計法則,這個專題里全都有:設計法則專題
干擾效應:一種現象,同時思考兩件或兩件以上的事情時,思考的過程會變得比較慢,也不準確。
有兩種或兩種以上的知覺或認知過程發生沖突時,就會產生干擾效應。
人們的知覺和認知的不同與心智模型有關,這些模式會獨立分析、處理收到的相關信息,處理后會傳送到工作記憶區,并作出詮釋。當輸出資料一致,詮釋過程會又快又好。當輸出資料不一致,就會產生干擾,需要一些其他的處理,以便更好地解決。解決這些問題需要浪費很多時間,對性能也會產生不好的影響。
1. 斯特魯普干擾
斯特魯普干擾(Stroop Interference):刺激物不相干的一面引發了思考過程,因而干擾了刺激物相關方面的思考。
圖標協同文字可以準確的向用戶傳遞所要表達的內容,二手在常用的 App 中截出了一些圖標,卻發現現在很多的圖標在信息傳達方面有所欠缺。
舉四個例子:
下面這組圖標,「地方菜系、美食、晚餐、大牌簡餐」幾個圖標沒有表達出所要傳達的信息,還有幾個圖標要借助文字才能表達出其含義。即使圖標設計的非常精美,但是圖標功能卻存在缺失,而且這幾個圖標不能刺激用戶對信息的理解,反倒是讓用戶更加迷惑。設計師也注意到了這個情況,所以最近改版后,信息傳達變的更加直接,減少了干擾。
接下來的這組圖標也存在同樣的問題,這組圖標想借助圖標上產品本身的含義來傳達給用戶要表達的信息,但是這需要用戶對這些產品本身的定位非常明確,如果不明確的話只能干擾用戶的行為,例如,用戶需要知道「呂」是個韓國洗發水之后才能拐彎抹角的聯想到「全球超市」,再例如:中間「輕奢」圖標,用的是勞力士綠水鬼,一款70000+還要靠等才能買到的奢華手表,二手認為跟輕奢的定義有矛盾,除非這并不是勞力士。
米家這套圖標二手認為可以準確傳達所描述的信息,因為米家有種類繁多的 loT 產品,有時候一款產品更是分為不同的版本,如果用戶只是根據名稱選擇的話不僅繁瑣而且十分耗時,所以在選擇產品時,米家把所有產品外形準確刻畫成圖標,用戶可以先根據自己產品的外形大致選擇型號,再根據文字提示準確的選擇自己產品的版本。
△ 米家App圖標
滴滴這套圖標表達也很準確,不同的服務通過不同的圖標可以準確傳達。
△ 滴滴圖標
2. 加納干擾
加納干擾(Garner Interference):刺激物一個無關的變化,引發了思考過程,干擾到跟刺激物相關的思考過程。
舉個例子:如下圖,指出單獨一排的形狀,比指出兩排其中一排的形狀要簡單。兩排形狀緊靠在一起,激發了想說出旁邊形狀的思考程序,造成干擾。
根據上面這個案例,二手聯想到了「個人中心」頁面,大部分「個人中心」頁面都選擇了豎排列表布局。列表布局就是以列表的形式展示具體內容,并且能夠根據數據的長度自適應顯示,Material Design 建議列表是「可快速掃描」,適合顯示類似的重復的內容。列表布局也是最快速的 app 布局方式。這種排列在某方面上就是降低了干擾。相比于列表布局,宮格導航是將主要入口全部聚合在頁面,讓用戶做出選擇。這樣的組織方式無法讓用戶在第一時間看到內容,選擇壓力較大,采用這種導航的應用已經越來越少,往往用在二級頁作為內容列表的一種圖形化形式呈現,或是作為一系列工具入口的聚合。
△ 列表布局和宮格導航
3. 前向干擾
前向干擾(Proactive Interference):現存記憶干擾了學習。
舉個例子:手淘的最近改版中,店鋪首頁頂部導航和底部自定義菜單結構化調整,但是有一個細節的變化讓二手不斷的犯錯——返回按鈕改成了關閉按鈕,二手習慣點擊左上角返回按鈕來返回上一級菜單,改版后依舊習慣點擊左上角,但是打開的是店鋪印象,僅僅是圖標左右位置簡單的調換,已經讓二手在使用的過程中挫敗感強烈。這就是現在的使用記憶已經嚴重干擾了學習。所以產品在改版迭代的時候,盡量不要干擾用戶已經熟悉的路徑或是破壞用戶使用習慣。
△ 手淘的店鋪首頁改版
4. 后向干擾
后向干擾(Retrosctive Interference):學習干擾了現存記憶。
這個正好跟上面相反,二手不斷培養現在的使用習慣,漸漸的就忘記了上一版的路徑。
要想預防干擾,就要避免輸出思考過程中相互沖突的設計。知覺的干擾效應,通常是因為信息的傳達過程中有歧義,或是因為把互相干擾的元素結合在一起。要把干擾效應降到,首先要求設計師用準確的設計語言傳達信息,如果這樣還是無法讓用戶很好的理解,其次可以考慮利用文字或者引導來告知用戶。
如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里
一、 前言
使用Sublime Text 也有幾個年頭了,版本也從2升級到3了,但猶如寒天飲冰水,冷暖盡自知。最初也是不知道從何下手,滿世界地查找資料,但能查閱到的資料,苦于它們的零碎、片面,不夠系統和全面,所以一路走來,耗費了本人大量的時間和精力。所以蒙生了寫這篇《Sublime Text 3 全程詳細指南》,一來對自己的經驗是一個總結,二來可以給初學者做個系統、全面的指引,讓他們少走我當時走過的彎路,從而能快速地掌握Sublime Text這個優秀的編輯器。
目前我正在使用的版本是Sublime Text 3 Build 3083的beta版本,已經相當穩定。所以本文所有講解均以此版本為準,并以windows 7 x64平臺為示例。至于其它的版本也不會有太大的差異。
二、 Sublime Text 特點
1、Sublime Text 是一款跨平臺代碼編輯器,在Linux、OS X和Windows下均可使用。
2、Sublime Text 是可擴展的,并包含大量實用插件,我們可以通過安裝自己領域的插件來成倍提高工作效率。
3、Sublime Text 分別是命令行環境和圖形界面環境下的最佳選擇,同時使用兩者會大大提高工作效率。
4、Sublime Text 為收費軟件,建議有能力的人付費使用,以支持開發者。不過不購買也可以一直使用。
三、下載與安裝
1、下載:目前官方的正式版本為v2.0.2,我們打開官網下載鏈接http://www.sublimetext.com/3,下載Sublime Text 3 Build 3083。
其中“Windows 64 bit”下載下來為“Sublime Text Build 3083 x64 Setup.exe”的安裝程序;“portable version”下載下來為“Sublime Text Build 3083 x64.zip”編輯器的包,解壓后無需安裝就能運行。
如果你的電腦平臺是windows x86,也就是32位的系統,請點擊“Windows”下載32位的安裝程序,如果不想安裝,就點擊其后的“portable version”下載它的32位編輯器包。
2、安裝:雙擊上一步下載下來的“Sublime Text Build 3083 x64 Setup.exe”,記得選擇“Add to explorer context menu”,把它加入右鍵快捷菜單。其它以默認設置安裝。
3、安裝完畢,雙擊桌面“Sublime Text 3”快捷圖標,打開程序,就可以見到“Sublime Tex的廬山真面目了。
4、如果你不是把“Sublime Text 3”安裝在默認路徑,比如你把它安裝在D盤,請你添加環境變量。
四、設置字體及字體大小
點菜單“Preferences--->Setting - User”,打開“Preferences.sublime-settings”。
如下圖添加所需代碼,根據自己的喜好進行設置。設置字體用"font_face":"字體名稱",設置字體大小用"font_size":"字體大小",注意它們之間需要用逗號隔開。
五、安裝插件
學習Sublime Text擴展插件的安裝前,讓我們來先了解一下它的插件官方網站:https://packagecontrol.io/。
當我們在搜索框中輸入插件的關鍵字,相關的插件就會在下面實時顯示出來,我們就可以選擇自己想要的插件進行了解。
1、安裝Package Control
Package Control為插件管理包,所以我們首先要安裝它。有了它,我們就可以很方便的瀏覽、安裝和卸載Sublime Text中的插件。
打開Package Control的網頁https://packagecontrol.io/,點擊右側的“Install Now”按鈕。
進入https://packagecontrol.io/installation#st3頁面,選擇“SUBLIME TEXT 3”選項卡,復制出里面的代碼段:
雙擊桌面“Sublime Text 3”打開程序,快捷鍵
等待其安裝完成后關閉程序,重新啟動“Sublime Text 3”,點開菜單“Preferences”可見“Package Control”項,說明插件管理包已安裝成功。
2、ConvertToUTF8 插件安裝
a)功能說明:ConvertToUTF8 能將除UTF8編碼之外的其他編碼文件在 Sublime Text 中轉換成UTF8編碼,在打開文件的時候一開始會顯示亂碼,然后一剎那就自動顯示出正常的字體,當然,在保存文件之后原文件的編碼格式不會改變。
b)安裝方法一:快捷鍵 Ctrl+Shift+p ,打開 “Command Palette” 懸浮對話框,在頂部輸入 “install”, 然后下選點擊 “Package Control:Install Package”。
在出現的懸浮對話框中輸入 “convert”, 然后點選下面的 “ConvertToUTF8” 插件,就會自動開始安裝,請耐心等待。
當插件安裝成功后,Sublime Text 3 編輯器底端的狀態欄會有安裝成功的提示。
c)安裝方法二:你還可以下載完整的插件包后解壓,放入 C:\Users\userName\AppData\Roaming\Sublime Text 3\Packages 目錄下,以達到安裝插件的目的。下載地址:https://github.com/seanliang/ConvertToUTF8。
如何找到 Packages 目錄?一個快捷的方法是:雙擊打開你的 “Sublime Text 3”,點菜單 “Preferences--->Browse Packages...”。
它會直接打開插件包存放的目錄 “Packages”。然后你就可以把下載后解壓好的插件包復制到這個 Packages 目錄下。
當然,如果你熟悉 git,你還可以用 git 從插件的 GitHub 庫直接克隆插件包到 Packages 目錄下。
備注: 以后所有插件都可以通過以上介紹的兩種方法安裝,將不再贅述,推薦方法一,使用“ Package Control”安裝插件。
3、BracketHighlighter 插件
功能說明:高亮顯示匹配的括號、引號和標簽。
插件地址:https://github.com/facelessuser/BracketHighlighter/tree/BH2ST3
4、LESS 插件
功能說明:LESS語法高亮顯示。
插件地址:https://github.com/danro/LESS-sublime
5、sublime-less2css 插件
功能說明:將less文件編譯成css文件。
插件地址:https://github.com/facelessuser/BracketHighlighter/tree/BH2ST3
輔助工具:安裝后從 https://github.com/duncansmart/less.js-windows 下載 less.js-windows,然后配置 less.js-windows 的環境變量。
6、Emmet 插件
功能說明:Emmet的前身是大名鼎鼎的Zen codin。前端開發必備,HTML、CSS代碼快速編寫神器。
使用方法:默認快捷鍵 Tab
插件地址:https://github.com/sergeche/emmet-sublime
輔助工具:PyV8 下載地址: https://github.com/emmetio/pyv8-binaries
注意:Emmet 插件需要 PyV8 插件的支持,所以在安裝 Emmet 時,會自動安裝 PyV8 插件,如果安裝后 Emmet 不能正常保用,很有可能是因為 PyV8 沒有安裝完全,Sublime Text 2 和 3 容易出現這個問題。你可以刪除它,然后手動下載,采用方法二安裝 PyV8 插件。
使用方法示例:書寫代碼 ul#nav>li.item$*8>a{Item $}
然后把光標定在這行代碼的最后面,按 Tab 鍵,就會自動生成:
<ul id="nav">
<li class="item1"><a href="">Item 1</a></li>
<li class="item2"><a href="">Item 2</a></li>
<li class="item3"><a href="">Item 3</a></li>
<li class="item4"><a href="">Item 4</a></li>
<li class="item5"><a href="">Item 5</a></li>
<li class="item6"><a href="">Item 6</a></li>
<li class="item7"><a href="">Item 7</a></li>
<li class="item8"><a href="">Item 8</a></li>
</ul>
更多更詳細的使用方法,請查閱 Emmet 官網:http://docs.emmet.io/
7、JsFormat 插件
功能說明:JavaScript代碼格式化。
使用方法:在打開的JavaScript文件里點右鍵,選擇JsFormat。
插件地址:https://github.com/jdc0589/jsformat
8、ColorHighlighter 插件
功能說明:顯示所選顏色值的顏色,并集成了ColorPicker
插件地址:https://github.com/Monnoroch/ColorHighlighter
在16進制的顏色值上點右鍵,選擇“Choose color”,會彈性顏色拾色器,在需要的色塊上單擊。
看看效果,顏色值和顯示顏色都相應做了改變。
9、Compact Expand CSS Command 插件
功能說明:使CSS屬性展開及收縮,格式化CSS代碼。
使用方法:按 Ctrl+Alt+[ 收縮CSS代碼為一行顯示,按 Ctrl+Alt+] 展開CSS代碼為多行顯示。
插件地址:https://gist.github.com/vitaLee/2863474 或者:https://github.com/TooBug/CompactExpandCss
快捷鍵 Ctrl+Alt+[ 收縮CSS代碼為效果:
快捷鍵 Ctrl+Alt+] 展開CSS代碼為多行顯示效果:
10、SublimeTmpl 插件
功能說明:快速生成文件模板。
使用方法:SublimeTmpl默認的快捷鍵如下,如果快捷鍵設置沖突可能無效。
Ctrl+Alt+h 新建 html 文件
Ctrl+Alt+j 新建 javascript 文件
Ctrl+Alt+c 新建 css 文件
Ctrl+Alt+p 新建 php 文件
Ctrl+Alt+r 新建 ruby 文件
Ctrl+Alt+Shift+p 新建 python 文件
插件地址:https://github.com/kairyou/SublimeTmpl
下圖為按快捷鍵 Ctrl+Alt+h 新建的一個 html 文件。
相應的模板為tmpl格式的文件,它們保存在C:\Users\ usersName\AppData\Roaming\Sublime Text 3\Packages\SublimeTmpl\templates下。
當然你可以根據自己的喜好來更改模板格式。例如把“html.tmpl”改為早期的html標準格式后保存。
現在按快捷鍵 Ctrl+Alt+H,新建一個 html 文件,其格式就和更改后模板格式完全一樣了。如下圖:
新增語言:你還可以增加模板文件夾中沒有的文件模板,并做相應的設置來使用這一功能。具體可以參考它的中文文檔:http://www.fantxi.com/blog/archives/sublime-template-engine-sublimetmpl/
11、Alignment 插件
功能說明:使代碼格式的自動對齊。
使用方法:快捷鍵Ctrl+Alt+A,可能與QQ截圖沖突,二者中的一個要重置快捷鍵。
插件地址:https://github.com/kevinsperrine/sublime_alignment
12、AutoFileName 插件
功能說明:自動補全文件(目錄)名。
插件地址:https://github.com/BoundInCode/AutoFileName
安裝好后就可以來測試如何使用AutoFileName,先以<link>css檔案來示范,當輸入href=””的同時,Sublime Text就會將現在編輯檔案的路徑為中心,判斷該路徑內的所有檔案。
a)以這個檔案為范本它會去抓取跟abc.html在同一層的檔案列表。
像我們這次要link的是在css資料夾內的auto.css,所以我們直接銜接打上css/,就會跑出css資料夾內的檔案,整個用法以此類推
b)像是<img src=””>的部分也是一樣的方式,沒什么困難了,弄懂一下路徑就好了。
c)再來看看是css檔中要用url,也是用同樣方式,只不過因為要連到上一層的images資料夾內的arrow.png,所以就前面打..(上層),依序去選擇路徑即可。
13、DocBlockr 插件
功能說明:快速生成JavaScript (including ES6), PHP, ActionScript, Haxe, CoffeeScript, TypeScript, Java, Groovy, Objective C, C, C++ and Rust語言函數注釋。
使用方法:在函數上面輸入/** ,然后按 Tab 就會自動生成注釋。
插件地址:https://github.com/spadgos/sublime-jsdocs
在函數上面輸入/** ,然后按Tab 就會自動生成注釋。
14、SublimeCodeIntel 插件
功能說明:智能提示。
插件地址:https://github.com/SublimeCodeIntel/SublimeCodeIntel
15、HTML-CSS-JS Prettify 插件
功能說明:HTML、CSS、JS格式化。
插件地址:https://github.com/victorporof/Sublime-HTMLPrettify
安裝方法:安裝這個套件前必須先安裝node.js,指定 node.exe 的執行檔所在位置。進而安裝HTML-CSS-JS Prettify。
使用方法一:View -> Show console 或者使用快捷鍵(Ctrl + `),在命令列的地方輸入:view.run_command("htmlprettify"),然后按下Enter。
使用方法二:默認快捷鍵:Ctrl+Shift+H。
你也可以自行設置快捷鍵,菜單 “Preferences---> Key Bindings – User” 里新增:
完成后保存,以上代碼設定執行此插件的快捷鍵是:Ctrl+Shfit+O,自己設定的話就要測試一下,不要跟其他快捷鍵沖突。
格式化前:
格式化后:
16、SideBarEnhancements 插件
功能說明:側欄菜單擴充功能。
插件地址:https://github.com/titoBouzout/SideBarEnhancements/tree/st3
17、View In Browser 插件
功能說明:Sublime Text保存后網頁自動同步更新。
插件地址:https://github.com/adampresley/sublime-view-in-browser
使用方法:在打開的文檔任一處點右鍵,選擇“View In Browser”,就會用默認的瀏覽器自動打開該文件。
如果你電腦裝有多個瀏覽器,你想換其它的作為此操作的默認瀏覽器,你可以按以下方法設置:
打開“View In Browser.sublime-settings”,寫入以下代碼:
這樣你就把它默認設置為“Chrome”瀏覽器了,當然你還可以改成“Firefox”、“Safari”等等,前提是你的電腦事先已安裝好了這些瀏覽器。
18、LiveReload 插件
功能說明:調試網頁實時自動更新。
使用說明:快捷鍵 Ctr+Alt+V
插件地址:https://github.com/dz0ny/LiveReload-sublimetext2
同時Chrome瀏覽器也要安裝LiveReload 的擴展插件。
19、TortoiseSVN 插件(win下需要安裝有TortoiseSVN客戶端支持)
功能說明:版本控制工具。
插件地址:https://github.com/dexbol/sublime-TortoiseSVN
20、Theme-Soda 插件
功能說明:的 Sublime Text 主題之一。
插件地址:https://github.com/buymeasoda/soda-theme
安裝完成后,點菜單 Preferences--->Settings - User,根據需要的主題效果,添加如下代碼。
Soda 亮色主題請添加:
Soda 暗色主題請添加:
要達到圖中的效果,你還需要下載與之搭配的 color scheme。下載地址:http://buymeasoda.github.com/soda-theme/extras/colour-schemes.zip,如果你喜歡 Soda Dark 和 Monokai,我建議你使用 Monokai Extended。這個 color scheme 是 Monokai Soda 的增強,再配合 Markdown Extended ,將大大改善 Markdown 的語法高亮。
如果加代碼 "soda_classic_tabs":true,文件標簽頁形狀會如下顯示:
如果不添加此行代碼,文件標簽頁形狀會如下顯示:
21、Theme-Flatland 插件
功能說明:的 Sublime Text 主題之一。
插件地址:https://github.com/thinkpixellab/flatland
22、Theme-Nexus 插件
功能說明:的 Sublime Text 主題之一。
插件地址:https://github.com/EleazarCrusader/nexus-theme
六、插件列表
快捷鍵 Ctrl+Shift+P,在對話框中輸入“list”,選擇“Package Control:List Packages”。
會列出所有已安裝的插件。這樣可以很方便地了解自己已經安裝了哪些插件。
七、移除插件
有時候我們需要移除自己不想要的插件,具體操作如下:快捷鍵 Ctrl+Shift+P,在對話框中輸入“remove”,選擇“Package Control: Remove Packages”。
然后在出現的插件列表中點選你要移除的插件。
八、Sublime Text 的窗口操作
1、分屏
Sublime Text有多種分屏形式,讓我來具體地看一看。菜單 “View-àLayout”就可以選擇你的分屏樣式。
對應的快捷鍵與分屏情況如下:
Alt+Shift+1 Single 獨屏
Alt+Shift+2 Columns:2 縱向二欄分屏
Alt+Shift+3 Columns:3 縱向三欄分屏
Alt+Shift+4 Columns:4 縱向四欄分屏
Alt+Shift+8 Rows:2 橫向二欄分屏
Alt+Shift+9 Rows:3 橫向三欄分屏
Alt+Shift+5 Grid 四格式分屏
2、創建新窗
快捷鍵Ctrl+Shift+N 創建一個新窗口。
九、使用技巧薈萃
(未完待續。。。。。。)
十、Sublime Text 快捷鍵列表
快捷鍵按類型分列如下:
1、通用
↑↓← → 上下左右移動光標
Alt 調出菜單
Ctrl + Shift + P 調出命令板(Command Palette)
Ctrl + ` 調出控制臺
2、編輯
Ctrl + Enter 在當前行下面新增一行然后跳至該行
Ctrl + Shift + Enter 在當前行上面增加一行并跳至該行
Ctrl + ←/→ 進行逐詞移動
Ctrl + Shift + ←/→ 進行逐詞選擇
Ctrl + ↑/↓ 移動當前顯示區域
Ctrl + Shift + ↑/↓ 移動當前行
3、選擇
Ctrl + D 選擇當前光標所在的詞并高亮該詞所有出現的位置,再次 Ctrl + D 選擇該詞出現的下一個位置,在多重選詞的過程中,使用 Ctrl + K 進行跳過,使用 Ctrl + U 進行回退,使用 Esc 退出多重編輯
Ctrl + Shift + L 將當前選中區域打散
Ctrl + J 把當前選中區域合并為一行
Ctrl + M 在起始括號和結尾括號間切換
Ctrl + Shift + M 快速選擇括號間的內容
Ctrl + Shift + J 快速選擇同縮進的內容
Ctrl + Shift + Space 快速選擇當前作用域(Scope)的內容
4、查找&替換
F3 跳至當前關鍵字下一個位置
Shift + F3 跳到當前關鍵字上一個位置
Alt + F3 選中當前關鍵字出現的所有位置
Ctrl + F/H 進行標準查找/替換,之后:
Alt + C 切換大小寫敏感(Case-sensitive)模式
Alt + W 切換整字匹配(Whole matching)模式
Alt + R 切換正則匹配(Regex matching)模式
Ctrl + Shift + H 替換當前關鍵字
Ctrl + Alt + Enter 替換所有關鍵字匹配
Ctrl + Shift + F 多文件搜索&替換
5、跳轉
Ctrl + P 跳轉到指定文件,輸入文件名后可以:
@ 符號跳轉 輸入@symbol跳轉到symbol符號所在的位置
# 關鍵字跳轉 輸入#keyword跳轉到keyword所在的位置
: 行號跳轉 輸入:12跳轉到文件的第12行。
Ctrl + R 跳轉到指定符號
Ctrl + G 跳轉到指定行號
6、窗口
Ctrl + Shift + N 創建一個新窗口
Ctrl + N 在當前窗口創建一個新標簽
Ctrl + W 關閉當前標簽,當窗口內沒有標簽時會關閉該窗口
Ctrl + Shift + T 恢復剛剛關閉的標簽
7、屏幕
F11 切換至普通全屏
Shift + F11 切換至無干擾全屏
Alt+Shift+1 Single 切換至獨屏
Alt+Shift+2 Columns:2 切換至縱向二欄分屏
Alt+Shift+3 Columns:3 切換至縱向三欄分屏
Alt+Shift+4 Columns:4 切換至縱向四欄分屏
Alt+Shift+8 Rows:2 切換至橫向二欄分屏
Alt+Shift+9 Rows:3 切換至橫向三欄分屏
Alt+Shift+5 Grid 切換至四格式分屏
import urllib.request,os,hashlib; h = 'eb2297e1a458f27d836c04bb0cbaf282' + 'd0e7a3098092775ccb37ca9d6b2e4b7d'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)
Ctrl + `
打開Sublime Text控制臺,將之前復制的代碼粘貼到控制臺里,按下“Eenter”鍵。
{
"keys": ["ctrl+shift+o"],
"command": "htmlprettify"
}
{
"browser": "chrome64"
}
{
"soda_classic_tabs": true,
"theme": "Soda Light 3.sublime-theme",
}
{
"soda_classic_tabs": true,
"theme": "Soda Dark 3.sublime-theme",
}
如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里
香港理工大學教授John Heskett認為,作為設計師有三個階段性的價值:修飾者,區分者,設計驅動。在信息爆炸的今天,設計師每天閱讀大量的設計文章、作品,但卻依然提升緩慢。一個優秀的設計作品:到底好在那里?背后思考是什么?品牌價值有哪些?…為了幫助設計師提升基礎審美。每周我們會挑選全球優秀拔尖的設計,幫你解讀每個設計背后的思考!讓基礎審美養成設計好習慣的第一步。
------------------任何設計問題添加微信:uiskyss---------------------------
藍藍設計( www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務。
如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里
一、首先看下什么是JSON
JSON:JavaScript Object Natation,JavaScript對象的表現形式,已經發展成一種輕量級的數據交換格式。
JavaScript對象的表現形式,指定義JS對象的一種方式。
數據交換格式,即用于交換的數據格式。
JSON是種格式:
數據在鍵值對中, 數據由逗號分隔, 花括號保存對象, 方括號保存數組.
鍵值對組合中的名稱寫在前面,值對寫在后面,中間用冒號隔開
JSON 值可以是: 數字, 字符串, 邏輯值, 數組, 對象, null
JSON與XML相比,JSON更輕量級,XML更重量級,目前XML更多的用作配置文件。
二、再來看下什么是javascript對象
雖然有人說JavaScript 中的所有事物都是對象,但是 javascript 中,并不是所有的值都是對象,而有兩種值類型:原始值和對象。
(參考:http://blog.csdn.net/justjavac/article/details/8432989 JavaScript 并非所有的東西都是對象)
JavaScript原始值:
字符串,數字,布爾值,null,正則表達式
注:在 JavaScript 中所有的數字都是浮點數
JavaScript內置對象:
Object(基礎對象),
Array(數組),
Function(函數構造器),
Math(數學對象),
String(字符串對象),
Number(數值對象),
Boolean(布爾對象),
Date(日期時間),
Error(異常對象),
RegExp(正則表達式對象),
Arguments(函數參數集合)
(參考:http://www.cnblogs.com/lianzi/archive/2011/08/26/2154253.html javascript內置對象列表及Array和String的常用方法)
其中 Boolean, Number, String 是原始值的包裝器,很少直接使用
JavaScript 創建對象的方法:
1)使用內置對象
var person=new Object();//創建基礎對象實例,然后為其添加屬性
person.firstname="Bill";
person.lastname="Gates";
person.age=56;
2)自定義對象構造
function Person(firstname,lastname,age){//自定義對象構造器,然后創建實例
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
}
var person=new Person("Bill","Gates",56);
//定義對象構造器,可以使用“this”關鍵字構造、也可以使用原型prototype構造
(參考:http://www.jb51.net/article/20428.htm JavaScript 三種創建對象的方法)
3)使用直接量(literals 有直接量、字面量、常量等詞義)
var arr = [obj.a, 0, obj.a+1];
var obj = {name: 'John' + 'McCarthy'};
注:
準確的說不叫直接量(literals),而叫初始器(Initialiser),可以在里面使用表達式
初始器有對象和數組兩種,所以有“對象直接量”,“數組直接量”這樣的說法
初始器基于JSON,要符合JSON語法格式,
因此有人說JSON是JavaScript的原生格式,
在JavaScript中處理JSON數據不需要任何特殊的API或者工具包
但是初始器里面是可以有表達式的,就像例子里的一樣
(參考:http://www.cnblogs.com/snandy/p/3439790.html JavaScript中的直接量與初始器的區別)
原始值只包括字符串,數字,布爾值,null,正則表達式,不包括 Undefined 和 Initialiser
三、JavaScript對象、JSON對象、JSON字符串
javascript對象:javascript中,除開JavaScript原始值(字符串,數字,布爾值,null,正則表達式)的都是javascript對象
JSON對象:JSON對象這種叫法不太準確,可以理解為使用基于JSON的初始器定義的javascript對象
JSON字符串:符合JSON語法格式的字符串
javascript對象和JSON字符串相互轉換:
1:jQuery插件支持的轉換方式
$.parseJSON( jsonstr );$("xxx").serializeArray();
2:瀏覽器支持的轉換方式(Firefox,chrome,opera,safari,ie9,ie8)等瀏覽器
JSON.parse(jsonstr);JSON.stringify(jsonobj);
3:Javascript支持的轉換方式
eval('(' + jsonstr + ')');//不推薦
4:JSON官方的轉換方式
引入 json.js 或 json2.js,用法同第二種
(參考:http://www.cnblogs.com/luminji/p/3617160.html JS中對象與字符串的互相轉換)
JAVA對象和JSON字符串相互轉換:
可以用jackson、Gson和json-lib等
(參考:http://www.blogjava.net/bolo/archive/2014/04/16/412533.html 使用jackson對Java對象與JSON字符串相互轉換的一些總結)
如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里
小時候我們很多經驗都是來自于寓言故事,故事總能幫你更好地理解一些事情和道理。關于設計,這個道理同樣適用。今天的文章,我們就跟著一個設計師的經歷來學點什么吧。我有一個朋友,名字叫做 Jimmy,這的確是一個很普遍的名字。當我認識他的時候,他正供職于一家名為 Shmuckle 的公司,而他正是這家公司的設計師。和所有的設計師一樣,他日思夜想夢寐以求的,是成為一名著名的設計師,而喬布斯的經歷對他有著不可磨滅的影響。Jimmy 和很多設計師一樣,著迷喬教主。好在 Jimmy 的崇拜并不是停留在嘴上,而是身體力行,力圖在公司里面推行好的設計。在 Jimmy 的眼中,好的設計應該是直觀的、創新且令人愉悅的。
當然,故事的發展如果總是一帆風順就沒有意思了。Jimmy 果然一如正常的劇情推進……他碰到障礙了。
這一次,Jimmy 正在執行一個重要的項目,這個項目的成敗將會直接影響到他的職業生涯。這次的任務,他需要為他們公司的一款產品,重新設計整個控制面板。而就在這次的項目當中,Jimmy 發現他沒有辦法拿出一套足夠優秀的解決方案。好在他還有 Plan B,那就是重新找靈感。Jimmy 開始重新播放他最喜歡的設計類的視頻,閱讀曾經給他啟發的文章,收聽其他同行所開設的播客,以期在其中找到感覺或者靈感。
可惜,靈感并沒有如期而至。局面尷尬了。
就在此刻,援手到了。Sarah 是公司的資深設計師,正巧這個時候路過 Jimmy 的工位,看到了 Jimmy 糾結掙扎的樣子。這是多么熟悉的場景啊,她早年入行的時候,同樣經歷過這樣的狀態,為求一好設計而痛苦不已。如今,她已經能夠輕松駕馭不同的需求,足以應對復雜多變的設計項目。
「Hey Jimmy,老遠就看到你正在揪頭發,看樣子正在構思新設計吧,瞧你這個狀態,應該不太順利吧?」
「誒,客戶說讓我給他們重新設計整個控制面板。他們覺得不夠好使,希望新的控制面板能夠更好展示信息,提升效率,最好再把幾個比較明顯的可訪問性問題給解決一下。但是我怎么設計……都覺得不對。客戶那邊有不少人參與了測試,有人覺得挺棒的,有人又非常討厭,還有一部分直接說還得接著改?,F在,我覺得無能為力,不知道要怎么弄了?!笿immy 保持著撓頭的姿勢,盯著屏幕說道。
「別糾結,」Sarah 微笑道:「如果一直盯著問題解決問題是常常會陷入這樣的困境的,解決方案其實并不復雜,你需要從根子上來想辦法。只要讓整個設計方案貼合規則基礎穩固了,問題就會迎刃而解了。其實,關鍵也就是幾個基本的設計原則?!?
「雖然這話經常聽到,但是真的能行?」Jimmy 狐疑地盯著 Sarah,思忖兩秒感覺到大姐頭這是要傳授秘籍,便摸過小本子,端正坐姿,準備做筆記:「那么,都有哪些原則呢?」
Sarah 拍了拍 Jimmy 的肩膀,端了杯咖啡,說道:「下樓散步吧,咱們邊走邊聊?!?
「其實,在產品完成之后,是需要基于幾個基本的原則來重新審視和調整設計的?!筍arah 喝了一口咖啡,慢慢地開始說。
Jimmy,如果腦子里面的思路沒有梳理清晰,很難做出條理清晰的產品的。因此,在設計產品之前,先應當消除思維中的混亂,有幾個事情,在設計的過程中要始終保持關注:
產品的外觀最終都是在清晰的設計(或者不夠清晰的設計)之下的副產物。清晰的設計意圖,最終會轉化為清晰的產品設計。——Massimo Vignelli
「我記得 Massimo Vignelli 在他的《The Vignelli Canon》中寫道,一個混亂而復雜的產品始終是源自于制造者本身的混亂,說明這個人本身內心深處心態復雜而想法混亂。」Sarah 說道。Jimmy 此刻若有所思。
「接下來的這一點也同樣很重要。我們設計的數字產品必須清晰,也要專注于當前的任務,一個交互性強、可操作性優秀的 APP 才是用戶所需要的,而要做到這一點,屏幕上的內容應當始終是的,并且始終保持較高的相關性。與此同時,APP 也應當作為用戶意圖的延伸。如果用戶打開了你的 APP,想要解決某個問題,執行某個任務,而你的 APP 做不到這一點,那么情況就很糟糕了?!筍arah 說道。
她停了幾秒鐘,梳理了一下思路,繼續說道:「你看,我們所做的一切都是為了確保我們的方案,能夠在正確的環境中,面對著對的用戶,解決亟需解決的問題。當然,我們要經歷很多次的迭代,才能靠近這一目標?!?
「許多設計師和開發者都在說,APP 應該靈活,應該滿足所有客戶的需求。好吧,Jimmy,這些說法都是胡說八道的。但是有一個說法很真實,也需要你時刻謹記:試圖取悅每個人只會帶來無盡的壓力和痛苦,讓你沮喪,失去資源。所以,不要害怕失去一部分用戶,真正需要擔心的是失去愿景和遠見?!?
「一個偉大的而足夠優秀的數字產品,必須始終清楚它到底是服務于誰的。只有牢記真正的用戶,明白他們的需求,才能開發出真正有效的解決方案。最好的數字產品當中,都是藏著愿景的?!筍arah 和 Jimmy 走到了大樓的窗戶附近,看著外面來往的人流,Jimmy 忍不住問到:「那其他的用戶呢?」Sarah 笑著回答:「當我們滿足目前的目標之后,才能顧的上其他的人。我們的目標用戶才是核心,其他的人不喜歡,和我們的愿景不匹配,也不用操心。市場上會有其他的應用或者服務能夠滿足他們,讓他們高興,而我們總是只能身處一個陣營,你不可能什么都擁有?!筍arah 笑著回答 Jimmy 的疑問。
當人們尋找軟件和服務的時候,他們要的并不是功能,他們要的是解決問題的方法,一個和自己相匹配的愿景?!?7Signals《Getting Real》
下一個原則,也是一個很重要的注意事項,那就是反饋。反饋能夠幫用戶確定操作是否執行了,明白結果是否發生,讓用戶明白當前的情況:
「我想你應該知道,即使技術如此的進步,人類本身的生物性決定了我們依然是依靠反饋來確知互動的結果和狀態的。我們的身體(視覺或者觸感)需要感受到反饋,再像大腦發出信號,而虛擬的界面背后到底在發生什么,需要全面的交互設計傳遞出來,只有這樣用戶才不會費勁巴拉地去思考之前的點擊或者滑動交互是否操作成功了。反饋給用戶的信息也應該是能夠被輕松理解的,用戶不應該在這個事情上再費勁去思考了。因此,你手邊應該有關于心理學、行為學這類能夠揭示人類思考的圖書,因為它們能夠幫你提升技能?!筍arah 喝了一口咖啡,潤了潤嗓子,帶著 Jimmy 又溜達上樓,回到了辦公室。
「隱喻——我這里說的并不是文學中的隱喻,」Sarah 又提到了一個看似無用但是經常被說起的概念:「你看,UI界面中的設計元素和交互方式和我們的現實生活中的元素和交互方式是如此的相似,這就是借用隱喻將我們的熟悉的元素和交互都投射到虛擬的數字產品當中。這樣一來,用戶會更快地學會和理解?!?
「正是因為隱喻的存在,現實的經驗和虛擬的交互產生了關聯,用戶交互因此而更加自然地發生。視線隨著被精心設計的布局而游移到重點上,用戶會下意識地點擊被高亮顯示的、和現實按鈕差不多的交互控件,他們還會下意識地在虛擬的屏幕上滑動,在界面之前自然游走。因此,你有必要了解你的核心用戶每天都在使用哪些 APP,他們都是如何交互的。這有助于你吸收經驗,消除不良的體驗,創造舒適的交互,降低學習的壓力,更好地轉化?!筍arah 一邊說著,一邊下意識地模擬著交互并解釋道。
「接下來我們還是用案例來說明一下,會更容易理解?!拐f著 Sarah 坐到椅子上,并且打開電腦屏幕,說道:「比如我們要做一個日歷,你認為它應該是網格,還是做成列表?」Jimmy 撓頭想了一下,遲疑道:「恩……我們應該堅持使用網格的樣式。它更加緊湊也更加有條理,我說的對嗎?」
「其實這取決于用戶的主要目標是什么。如果這個日歷元素是出現在報告文檔當中,應該是用網格的樣式還是列表的樣式呢?一樣的,這要看情況。我們是否要在每個應用中都使用全局導航?同樣是需要基于上下文情況來決定的。一致的設計不止是表面樣式上的一致,還需要從需求、內容、用戶使用場景和體驗上來保持一致性。如果在特定的情況下,獨特的設計能夠帶來更大的價值,那么這是有意義的,這種特殊情況下不同是有必要的?!筍arah 細心地為 Jimmy 解釋道。
良好的設計,應該是特定語境經過評估后定制的副產物,而不是脫離使用場景而憑空創造出來的,否則,無論多么炫酷都是不合時宜的。——Massimo Vignelli
「最后要說的,是防御性設計?!筍arah 轉身對著 Jimmy,然后說道最后一個規則。
「防御性設計?什么東西?」Jimmy 感覺今天學到了不少,最后這個原則也被他寫到小本子上了?!高@個啊,也就是大家常說的直覺性設計?!筍arah 微微一笑。
「我知道!喬布斯以前就經常說這個概念!」Jimmy 終于找到一個他足夠熟悉的概念,興奮不已。
「可是,你真的知道什么是直覺性的設計么?」Sarah 看著興奮的 Jimmy 賣了個關子。
「預測用戶行為?然后在用戶要執行下一個操作之前幫他解決需求?」Jimmy 狐疑地問道。
「是也不是。它并不是讓你去預測用戶的行為,防御性設計是為了避免出錯。無論你如何謹慎地去做設計,總會有錯誤發生,無論你做過多少調研,你計劃有多么妥帖,你的產品總會需要一個備用方案來規避問題?!筍arah 說道:「防御性設計,是讓你找到可能會出現的問題?!?
相信我,你的產品如果給了用戶負面的體驗,他們絕對不會忘記。
「我還是沒明白你的意思……」Jimmy 習慣性地撓頭。Sarah 耐心地開始解釋:「以開車為例來說明這個事兒吧。當你開車的時候,總會盡量避免道路上各種可能出現的危險情況,比如魯莽駕駛的大貨車,三心二意橫穿馬路的行人,懵懂無知在路邊打鬧的兒童,甚至野外竄上馬路的野鹿,等等。同樣的,作為設計師,我們需要預料到可能會出現的問題,以及始終保持專注來修復這些問題。這樣我們就不會破壞整個用戶體驗。我們要有良好的防御性的設計意識,維持住體驗,改善體驗?!筍arah 說到這個地方的時候,Jimmy 感覺她身上散發著某種光芒。
然后 Sarah 起身,帶著 Jimmy 回到他的工位。「怎么樣,這些東西你都記下來了嗎?」Sarah 打趣地歪著頭看著低著頭還在琢磨的 Jimmy,如同大男孩一樣的 Jimmy 驚訝地抬頭問道:「什么意思?這就是全部嘛?難道只有這些?」
Sarah 呼出一口氣,微笑著對 Jimmy 說道:「好了好了,設計原則、規則、規范、技巧有太多,可是對于每個人,每個公司而言,都有屬于自己的一套方法和策略。你可以盡興地去探索,但是即使你不知道全部,也可以借助你所熟知的幾個原則和策略,拿出足夠優秀的設計。我把我最熟悉的、掌握地最嫻熟、體會最深刻的幾個原則分享給你,它們足以幫你開啟一條走向好設計的道路,我覺得你要是真的體會到了,就已經能夠拿出比別人更好的東西了。其他的設計原則,只要你有耐心和時間,還可以繼續探索。該工作啦?!?
就像 Sarah 說的,設計原則太多了,誰又規定死了具體有幾條呢?每個人心中的哈姆雷特都不一樣,每個人眼里的哈利波特又何嘗是一樣的呢?
最重要的問題在于,許多人知道原則,卻并不會在設計項目當中運用它們。洞悉每個設計項目當中的重點,了解客戶的需求,明白首要的設計目標,在產品和用戶之間,找到平衡點,用心地思考,利用好設計原則這一利器。
藍藍設計( www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務。
如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里
慈心積善融學習,技術愿為有情學。善心速造多好事,前人栽樹后乘涼。我今于此寫經驗,愿見文者得啟發。
xml文件挺常用的,用程序自動生成的xml文件最好,引號和尖括號等標點符號肯定是全的。把事情交給擅長它的人去做。知人善任!
xml file - 正確的文件
<?xml version="1.0" encoding="utf-8"?> <cultures> <taoists count="100" comment="good-t"> <book> <name>道德經</name> <author>老子</author> </book> <book> <name>文始真經</name> <author>關尹子</author> </book> </taoists> <buddhism count="321" comment="good-d"> <book> <name>金剛經</name> <author>釋迦牟尼</author> </book> <book> <name>地藏菩薩本愿經</name> <author>地藏</author> </book> </buddhism> </cultures>
使用瀏覽器進行校驗
xml file - 錯誤的
<?xml version="1.0" encoding="utf-8"?> <cultures> <taoists count="100 comment="good-t" <book> <name>道德經</name> <author>老子</author> </book> <book> <na>文始真經</name> <author>關尹子</author> </book> </taoists> <buddhism count="321" comment="good-d"> <book> <name>金剛經</name> <author>釋迦牟尼</author> </book> <book> <name>地藏菩薩本愿經</name> <author>地藏</author> </book> </buddhism> </cultures>
使用瀏覽器進行校驗
感想
如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里
隨著消費升級的步伐,商家總結出在帶動消費能力上小孩>女人>寵物>男人的規律,爸爸們作為商家最不重視的一個角色,該如何在父親節以爸爸為主角制作一款 H5 呢?手機充值作為一個日活數千萬的工具型產品,親密充作為多號碼充值的首要場景,對話費充值的生態與成長起到至關重要的作用。未來,在新用戶增速放緩環境下,發揮親密充功能沉淀的用戶充值關系,將成為我們新的探索方向。
所以此次在父親節進行發力,制作一款可以對手機充值親密充有拉動作用的 H5 品宣。
相對于每年母親節的聲勢浩大,但是一到父親節世界就都安靜了。這是機會也是挑戰,機會在于因為父親節平均聲量較小,所以產出較容易被大家所看到,同時也面臨著關注度不夠的客觀情況的挑戰。
這個用戶的狀態反映了許多人父親節送禮物的常態,送來送去好像什么都不合適,最終還是充了一筆話費,這恰好也是此次話費充值父親節品宣的落腳點。此次品宣的雛形就初現了,一個在老家缺少關心的空巢父親與一個在外地工作費盡心思送禮物的兒子,他們之間發生的火花。
但若單單如此,則略顯單調,如何增加趣味性與可玩性呢?
確定了主題后開始具體著手項目具體制作,由于第一次制作劇情動畫、配音與答題三者相結合的故事性交互 H5,下面會每一步說明,我們在這些地方都是怎么做的。
劇本是故事性交互 H5 的重中之重,也是其對用戶是否吸引的關鍵因素,若缺乏吸引力用戶則無法到達最后看到品牌曝光,一個劇本最基本的需要一個通順且合理的劇情,更高的要求是要充分利用用戶好奇心,獲取用戶注意力,完成品牌與功能的曝光。按照寫文章的方法,一個飽滿的劇本需要有三部分組成。
具體的配音工作交給配音外包商就好,我們要做的就是對最后效果的把控。
首先要了解匹配原理,為了節省開發時間與資源,六種方言動畫全部采用同一種幀數與時間,所以需要匹配每一句的配音時長。
配音時長可以通過三種方法控制:
確定好玩法流程后,進入視覺階段,這次整體的設定是不同區域的爸爸形象,要表現出各區域的特色,結合好配音,才會達到比較理想的效果。
在人物的刻畫上,視覺是有很多表現形式的,但會根據整體方案的氣質去選擇合適的視覺呈現。由于這次的方案會有人物配音,為了使整體效果更自然,更接近用戶的想象,加上對產品用戶群的定位,我們摒棄了低齡卡通的設計方向,在人物設計上選擇了寫實的設計風格,更符合用戶心理對父親這個嚴肅、嚴謹的心理印象。
結合對話的內容以及動畫的表現形式,在細節刻畫顏色搭配上增加復古的味道,使人物更活潑不呆板將字體圖形化設計,結合中國元素,提煉各省市的簡稱加上有特點的人物設計,能更快速的幫用戶選擇以及增加親切感,以下就是各區域的爸爸形象設計,有沒有一款打動你呀。
人物的設定出來后,主頁面的視覺風格就比較好把控了,復古的老式畫報風格,是一個很好的選擇~既能突出人物形象,又能把內容很好的劃分整合。
板式設定:
主頁面整體視覺風格確立以及版式布局,畫面主體還是以人物形象為主,配合動畫讓整個畫面更有動感,強調打電話的動作,更貼近產品。
在動畫的設計上,也是遇到了很多困難,因為6個區域人物分為獨白、對話、聽電話3個部分的動畫,而為了防止圖片過多文件過大每個動作都要控制在6/7幀的范圍內,又要保證形態的自然有趣,又要能對上字幕配音。
這里的難度非常非常的大,需要每個步驟都配合的剛剛好,非常感謝開發哥哥耐心打磨,最后的呈現還是很滿意的。
動畫效果,頁面過多就選一部分進行展示:
最后整體數據效果還是比較理想,用戶完成全部選項占比整體 UV 34.89%,說明 H5 內容對用戶吸引度較高,能夠用內容本身吸引用戶到達廣告落地頁,完成運營目標。也帶來較高的親密充數據,相較平時有顯著提升,給親密充帶來綁定與充值。
第一次制作配音動畫相關的運營 H5,制作初期既期待又緊張,中間也遇到了幾次看似無法逾越的難題,最終呈現結果也還較為滿意。
藍藍設計( www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務。
如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里
Alex Schleifer 是 Airbnb 的設計副總裁。在加入 Airbnb 之前,他曾在 Say Media 擔任設計創意部高級副總裁。他在這篇文章中分享了目前設計行業在發展中存在的一些問題與挑戰,并分析了背后的原因,同時還分享了解決問題的方法以及打造一個設計友好型公司的三大秘訣。我的設計師同仁們,我發現我們進入設計這個行業都是非常偶然的。以 Airbnb 的設計團隊為例,在 Airbnb 目前的設計團隊的設計師里,有人之前是做圖書館管理員的,有人之前是技工,還有人之前是壽險代理或理療師的??傊诔蔀樵O計師之前,他們從事過的職業是五花八門,做什么的都有。由于他們內心是喜歡創意方面的工作的,這推動他們最終走上了設計這條道路。我對這一切是非常欣慰的,然而我總會忍不住去想,究竟還有多少有設計天賦的人才最終沒能走上設計這條職業道路。我知道未被挖掘的設計人才非常多,這也是我們現在想招聘優秀的設計師如此艱難的重要原因之一。
Airbnb 以設計驅動型文化著稱,公司的兩位聯合創始人也都畢業于聞名全球的設計學院:羅德島設計學院,對于這樣的一家公司,想招聘優秀的設計師都非常難,你可能會覺得難以置信,但事實確實如此。其實不光是 Airbnb,我曾經和包括 Apple、Google 和 Facebook 在內的很多非常注重設計的大公司高管都交流過,他們也同樣面臨類似的問題?,F在看似是沒有足夠多的設計師滿足市場需求,設計師人才供不應求。早期創業公司對這個問題應該感觸更深。每周,我都會從擁有很好發展前景的創業公司或中等規模公司的人那里聽說他們正在為招不到設計師而發愁。
即使設計不是公司最重要的部門,要想讓公司、尤其是資金資源有限的創業公司坐著等設計師在自己需要的時候自動出現是不現實的。如果我母親不是一位堅信設計是能成為一個職業的藝術家的話,我可能也不會進入設計師這個行當。能通往設計師的路徑有很多,設計師的角色也千變萬化。如果設計師沒有一個清晰的職業發展通道的話,要想找到下一代優秀的設計人才,我們依然只能靠意外的好運氣。
在各個行業的公司能為設計師從業者創造一種融洽的工作環境和清晰的職業發展通道之前,有必要和大家分析一下目前阻礙設計行業發展的幾大主要挑戰和障礙。
1. 缺乏對設計全面而深入的理解
在設計行業之外,有些人會知道一點 UI 和 UX,但總的來說,相比大眾對產品研發的理解,人們對設計是缺乏全面的認識與理解的。電子產品已成為每個人生活中必不可少的一部分,在一個設計能決定交互型電子產品與平臺體驗的行業,在功能之外還要更加注重整個產品的流暢性。對設計全面而深入的理解有助于設計師走出自己的小世界,從而打造一個更偉大的產品。
2. 缺乏標準化的組織架構
工程技術和產品管理團隊的組織架構非常清晰,也有清晰明確的匯報體系,相比而言,設計師團隊的組織架構形式各異。有的公司采用代理模式,在這種模式下,設計師會不停地從一個項目轉向下一個項目,為全公司提供設計支持,很多公司都會默認采用這種模式。有的公司的設計師會全程參與產品的所有開發過程,從最開始到完成,這種模式下,設計主管和產品主管、工程主管一樣向同一個領導匯報。還有一些公司,它的設計團隊會向產品、工程或市場團隊主管匯報工作。在設計領域,我們越早建立一個行業統一、清晰流暢的組織結構,那么在公司內部就越容易打造一種設計文化和清晰的設計師職業發展通道。
3. 缺少被大眾熟知的設計師行業的榜樣
在工程技術領域,大家熟知的行業榜樣很多,包括 Bill Gates、Mark Zukerberg 和 Marissa Mayer 等。在產品領域,也有 Sundar Pichai、Reid Hoffman 和 Kevin Systrom 等眾多行業榜樣。如果讓大家列舉一些知名的設計師出身的人擔任公司創始人或高管的例子,我敢肯定,在設計圈之外,除了 Jony Ivee 和 Yves Béhar 這極少數名字外,大家應該列不出其他人了,而這兩個人還都是工業設計師。當然,我們并不是為了樹立這些行業榜樣而樹立行業榜樣,但是我們是可以能從為大眾熟知的行業榜樣的多少來了解設計師行業的是否成熟,以及設計師的職業發展通道是否清晰暢通。只有有足夠多的行業榜樣,設計師行業才能得到更好地發展。
如果一個國家全由設計師構成,那么我們會將哪個設計師的頭像放在這個國家的法定貨幣上呢?
設計師行業所面臨的問題挑戰和設計師的薪資待遇沒有多大關聯,它主要和設計師團隊在公司里的位置有關系。對設計師的需求一直在那里,但設計師的職業發展通道卻一直不清晰。下面就給大家分享幾種方法,所有公司都可以采用這些方法去吸引優秀的設計人才,設計主管也可以更好地帶領大家前進。
1. 從一開始就融合工程、產品和設計
在一些科技公司,包括 Airbnb 在內,工程(engineering)、產品(product)和設計(design)團隊是捆綁在一起的,它們三者通常被合稱為 EPD。以設計團隊來說,團隊里負責各個領域的所有設計師都會參與到從產品開始開發到發布的全過程。如果一個項目組負責一項新功能開發、產品營銷或用戶反饋,那么工程、產品和設計這三個團隊都會分別至少指派一個人去參與其中。這種三者聯合不僅能聚集產品的主要開發負責人,同時有助于所有三個團隊成員職業發展通道的正規化。
這種三者融合的團隊度就像下面這個三條腿的凳子,三條腿分別代表開發產品所需的三個不同團隊,即工程、產品和設計團隊。只有從產品開發伊始就做到三條腿協同并進(如Figure A圖),那么在公司規模擴張的過程中才能保證三條腿一樣長(如Figure B 圖)。
我發現,從一開始就在工程、產品和設計三者的協調平衡方面做得比較好的公司一般都會做以下兩項工作:
如果你不在一開始遵循這個原則,那么最后你只能做出一個蹩腳的產品,就會像下面的凳子那樣不穩固。如果產品開發之初一個設計師都沒有,那么你的產品就會像下面 Figure C圖里的凳子一樣,少一條腿。如果你在產品已經開發到一定階段且比較成熟之后再讓設計師參與,那么你做出的產品可能就會像 Figure D圖中的凳子那樣,三條腿不一樣長。
要想避免自己的產品像上面的凳子那樣蹩腳,最好的方法就是從一開始就同時打造三條腿(工程、產品和設計)。在實際操作中,要從一開始就招聘設計、工程和產品主管,三者向同一個人匯報工作。以 Airbnb 為例,Airbnb 的設計、工程與產品主管是平級的,而且都直接向創始人匯報工作。其實不光是工程、產品和設計部門的主管需要緊密協同,在涉及到每一個具體的項目時也需要三個部門的協同配合。
一款產品主要由以下三個要素來定義的:商務、代碼與像素。在所有的產品決策中,要讓每一個要素都有發言的機會。
在 Airbnb 的設計團隊,我們采取了以下幾項措施來明確設計師是能夠引導公司發展的,同時讓設計師能有一個清晰的職業發展通道。
2. 為資深設計師開辟一條清晰的職業發展路徑
公司里的資深員工尤其是資深設計師所面臨的一個問題是,隨著他們在所負責的具體工作領域變得越來越資深,他們就會觸碰到職業「天花板」,然而處于相應管理位置的人員卻不會遇到這個問題。一般來說,這和他們的能力、工作表現或影響力沒有太大關系,主要是因為他們掌握的技能組合是封閉、無法轉移共享的。我們在 Airbnb 主要采取以下幾項措施來抑制這種負面影響:
只要能將上面兩種做法結合,那么你就能提高下面這個地方的表現:
3. 發現和使用新工具,創建一個自己的設計術語庫
我承認,直到今天我依然無法擺脫對 Photoshop 的依賴。使用 Photoshop 已經成為我的一種習慣,就好比是設計師們曾將鉛筆看做是他們的手的延伸一樣。有些工具我們已經使用了20年,我們通常會根據自己的習慣和肌肉記憶來選擇使用的軟件,所以新工具能否適應設計師的使用習慣是至關重要的。
在新工具挖掘方面,我們有自己的實驗人員,但最好能有人專門負責嘗試和整合新設計工具。這就是為什么 Airbnb 會在設計運營團隊上進行了大量投入,這個團隊主要負責幫助設計團隊在公司擴張過程能能更地開展工作。設計運營團隊要確保設計工具能和工程、產品及其它部門使用的工具保持協調。
即使你現在還無法組建一支專門的設計運營團隊,你同樣可以采取一些小措施去進行工具整合和結構調整,讓設計師更加便捷地工作。要從最基礎的層面進行整合,盡可能統一大家的使用規范和語言。這不僅適用于開發一個設計系統,同時還適用于一些更常規的工作中,如何為文件命名、在哪里存儲文件、如何管理版本等等。所有人都能遵循同一個規范要遠比找到一種完美的規范重要得多。
這種規范與整合也為打造一套屬于我們自己的設計語言系統(DLS)奠定基礎。DLS 系統不光是一個視覺選擇和設計模式語言,同時也是一個設計師和開發者協同開發產品的系統。DLS 的主要目的之一就是讓設計師和開發者共同定新功能組件,一旦定義之后,這個組件名稱將會同時應用在 iOS、安卓和 web平臺上。盡管這些功能組件是不同開發人員在不同開發環境下開發的,但他們的名字都一樣,而且它們對公司所有人而言都有同樣的核心概念。
△ Airbnb的設計語言系統組件頁面
這個系統打造完成之后,公司就可以在所有部門中打造一個共同的術語庫。這不僅能提高溝通效率,同時也能讓每一個人都能對公司的所有設計流程有更清晰的了解。Airbnb 內部開發的一些產品,如原生組件瀏覽器和 Airshots,能讓公司的任何員工瞬間獲取上千個設計界面。所有同事都可以在我們支持的任何語言與設備上看到任何應用版本的界面圖。對于設計師,這有助于消除設計和最終產品之間的抽象層,最大限度減少設計師的困惑與混亂。
工程師通常都會快速更新自己所使用的工具與語言,設計師在這方面向工程師學習的東西有很多。工程師之所以快速更新所使用的工具,這是因為他們需要在競爭日趨激烈的市場中更快地發布代碼。有些公司有上千個工程師,他們就像一群魚一樣在一個共享代碼庫里游,并可根據同伴的狀況進行調整姿勢。作為設計師的我們,現在在使用工具方面還沒有達到這種同步性,要想達到這種同步性,首先需要嘗試市場上現有的工具,如果找不到自己需要的工具,也不要擔心需要自己開發。
一個行業標準的術語庫有助于推動我們設計師的職業發展,而不是會限制它。在 Airbnb,除了統一規范我們設計界面的方式之外,我們還統一了我們工作語言。未來,我們希望公司內部討論產品設計的方式在 Airbnb 外部同樣適用,也希望 Google 和 Facebook 這樣的巨頭聯合起來共同打造一個設計行業通用的術語庫。
在字典里,每個字都有一些特定的含義,而詩歌所需要的所有要素都蘊含在其中。
可能是因為設計是一種視覺效果工作,所以我們很容易將其想象成一種唯美浪漫的工作。設計師往往很容易陷入色彩、字體、動畫與圖案中,而忘記設計是可以成為公司核心部門,并可以有更好的職業發展。在電影行業里,每當有新工具出現,如電影制作流程或硬件升級,電影行業都會專門召開一次會議對新工具展開討論。如今,我自己也只參加那些不光討論靈感與創意過程,同時還會討論新出現的設計工具的會議。
在不限制設計師創作自由的情況下,設計部門最好有一個清晰的標準流程。在我看來,一位優秀的設計師是不僅能夠和工程、產品部門同事一起讓整個產品開發過程更加流程,同時還能積極學習工程、產品方面的專業知識。我發現能這么做的設計師少之又少,然而這是非常必要的,為了公司,也為了自己的職業發展。
在設計創意魔法的背后有工具在起作用,未來的設計需要同時依賴這兩者。
藍藍設計( www.syprn.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務。
如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里
移動跨平臺框架React Native經過4年的發展,其生態已經變得異常豐富,在使用React Native開發項目的過程中,為了提高開發效率,我們經常會借鑒一些使用使用率比較高的開源庫,根據大眾的需求,對這些使用較高的 React-Native UI 庫,我們做一個簡單的總結和歸類,方便大家更好地入門 React Native。
本文只是收集了一些常見的UI庫和功能庫,除了上面介紹的知名第三方庫之外,還有很多實現小功能的庫,這些庫可以大大的提高我們的開發效率,并且可以在此基礎上進行二次開發。并且歡迎大家關注我的《React Native移動開發實戰》,第二版修改版會再近期再版,歡迎持續關注。
NativeBase 是一個廣受歡迎的 UI 組件庫,為 React Native 提供了數十個跨平臺組件。在使用 NativeBase 時,你可以使用任意開箱即用的第三方原生庫,而這個項目本身也擁有一個豐富的生態系統,從有用的入門套件到可定制的主題模板。
React Native Elements是一個高度可定制的跨平臺 UI 工具包,完全用 Javascript 構建。該庫的作者聲稱“React Native Elements 的想法更多的是關于組件結構而不是設計,這意味著在使用某些元素時可以減少樣板代碼,但可以完全控制它們的設計”,這對于開發新手和經驗豐富的老手來說都很有吸引力。
Shoutem也是一個 React Native UI 工具包,由 3 個部分組成:UI 組件、主題和組件動畫。該庫為 iOS 和 Android 提供了一組跨平臺組件,所有組件都是可組合和可定制的。每個組件還提供了與其他組件一致的預定義樣式,這樣可以在無需手動定義復雜樣式的情況下構建復雜的組件。
項目地址:https://shoutem.github.io/ui/
UI Kitten這個庫提供了一個可定制和可重復使用的 react-native 組件工具包,該工具包將樣式定義移到特定位置,從而可以單獨重用組件或為組件設置樣式。通過傳遞不同的變量,可以很容易地“動態”改變主題樣式。
React Native Material UI是一組高度可定制的 UI 組件,實現了谷歌的 Material Design。請注意,這個庫使用了一個名為 uiTheme 的 JS 對象,這個對象在上下文間傳遞,以實現最大化的定制化能力。
React Native Material UI 項目地址:
React Native Material Kit是一套很有用的 UI 組件和主題,實現了谷歌的 Material Design。不過需要說明的是, React Native Material Kit在2017 年 12 月之后就停止維護了。
Nachos UI 是一個 React Native 組件庫,提供了 30 多個可定制的組件,這些組件也可以通過 react-native-web 在 Web 上運行。它通過了快照測試,支持格式化和 yarn,提供了熱火的設計和全局主題管理器。
Wix 工程公司正致力于開發這個進的 UI 工具集和組件庫,它還支持 react-native-animatable 和 react-native-blur。這個庫附帶了一組預定義的樣式預設(轉換為修飾符),包括 Color、Typography、Shadow、Border Radius 等。
React Native Paper是一個跨平臺的 UI 組件庫,它遵循 Material Design 指南,提供了全局主題支持和可選的 babel 插件,用以減少捆綁包大小。
Expo 示例應用程序:
React Native Vector Icons是一組 React Native 的可定制圖標,支持 NavBar/TabBar/ToolbarAndroid、圖像源和完整樣式。它非常有用,而且被數千個應用程序以及其他 UI 組件庫(如 react-native-paper)所使用。
Teaset是一個 React Native UI 庫,提供了 20 多個純 JS(ES6)組件,用于內容顯示和動作控制。雖然它的文檔不夠詳盡,但它簡潔的設計吸引了我的眼球。
antd-mobile是由螞蟻金融團隊推出的一個開源的react組件庫,這個組件庫擁有很多使用的組件。
react-native-button是github上一個開源的button組件,目前仍保持比較快的更新頻率,提供比較豐富的Button功能。
react-native-image-viewer是一個圖片大圖瀏覽的庫,點擊圖片可以放大縮小。
react-native-image-picker是實現多個圖像選擇、裁剪、壓縮等功能的第三方庫,可以使用該庫實現圖片、照相等操作。
react-native-picker是React native最常見的滾輪控件,可以實現單滾輪、雙滾輪和三滾輪效果。
react-native-scrollable-tab-view是一個帶有TabBar和可切換頁面的控件。,在Android中可以看成是ViewPager和TabLayout的結合。
react-native-app-intro是實現引導頁的庫,當然開發者也可以自己手動實現。
項目地址:https://github.com/fuyaode/react-native-app-intro
3D Touch是實現React native 3D Touch的庫,可以用此庫很方便的實現3D Touch。效果如下:
react-native-snap-carousel是可以實現復雜效果的輪播圖庫,實現的效果如下:
react-native-blur是專門用于實現毛玻璃效果的。
react-native-actionsheet是實現底部彈框的組件,可以在Android和iOS平臺上共用,當然也可以自己封裝實現。
react-native-popover是React Native開發中常見的彈出提示框操作,其效果如下圖所示:
圖表在移動開發中應用的場景可謂非常多,這里介紹一款使用的比較多的庫。
react-native-spinkit是一個很炫的加載動畫第三方庫,可以根據實際情況定制加載的動畫。
Facebook Design-iOS 10 iPhone GUI是iOS 10 公開版的 GUI 元素模板,包括 Sketch、Photoshop、Figma、XD 和 Craft。
第三方庫
UI套件
1, NativeBase
NativeBase 項目地址: https://github.com/GeekyAnts/NativeBase
入門學習地址: https://reactnativeseed.com/
2,React Native Elements
React Native Elements 項目地址:
https://github.com/react-native-training/react-native-elements
React Native Elements 示例項目:
https://react-native-training.github.io/react-native-elements/
3,Shoutem
4, UI Kitten
項目地址: https://github.com/akveo/react-native-ui-kitten
項目體驗地址:https://expo.io/@akveo/ui-kitten-explorer-app
5,React Native Material UI
https://github.com/xotahal/react-native-material-ui
包含庫組件及示例的清單:
https://github.com/xotahal/react-native-material-ui/blob/master/docs/Components.md
6,React Native Material Kit
項目地址: https://github.com/xinthink/react-native-material-kit
7,Nachos UI
項目地址: https://github.com/nachos-ui/nachos-ui
8,React Native UI Library
項目地址: https://github.com/wix/react-native-ui-lib
9,React Native Paper
React Native Paper 項目地址:
https://github.com/callstack/react-native-paper
https://expo.io/@satya164/react-native-paper-example
10,React Native Vector Icons
項目地址: https://github.com/oblador/react-native-vector-icons
示例項目:https://oblador.github.io/react-native-vector-icons/
11,Teaset
項目地址:https://github.com/rilyu/teaset
其他庫
1,antd-mobile
項目地址:https://github.com/ant-design/ant-design-mobile
2,react-native-button
項目地址:https://github.com/ide/react-native-button
3,react-native-image-viewer
項目地址:https://github.com/ascoders/react-native-image-viewer
4,react-native-image-picker
項目地址:https://github.com/react-community/react-native-image-picker
5,react-native-picker
項目地址:https://github.com/beefe/react-native-picker
6,react-native-scrollable-tab-view
項目地址:https://github.com/happypancake/react-native-scrollable-tab-view
7,react-native-app-intro
8,3D Touch
項目地址:https://github.com/jordanbyron/react-native-quick-actions
9,react-native-snap-carousel
除此之外,還可以實現Galley效果等多種效果。
項目地址:https://github.com/archriss/react-native-snap-carousel
10,react-native-blur
項目地址:https://github.com/react-native-community/react-native-blur
11,react-native-actionsheet
項目地址:https://github.com/beefe/react-native-actionsheet
12,react-native-popover
13,react-native-charts-wrapper
項目地址:https://github.com/wuxudong/react-native-charts-wrapper
14,react-native-spinkit
https://github.com/maxs15/react-native-spinkit
15,Facebook Design-iOS 10 iPhone GUI
藍藍設計的小編 http://www.syprn.cn