Material Design學習之 Dialog(順便把前兩天AppBarLayout沒講的部分提一提)
繼續之前的MD系列的內容,今天說Dialog,不知道還能翻幾篇,反正這一系列都說完了話就找點別的內容整整。
Dialogs (提示框)用於提示使用者作一些決定,或者是完成某個任務時需要的一些其它額外的資訊。 Dialog可以是用一種 取消/確定 的簡單應答模式,也可以是自定義佈局的複雜模式,比如說一些文字設定或者是文字輸入 。
官方的呈現,像這樣
Dialog 包含了一個標題(可選),內容 ,事件。
標題:主要是用於簡單描述下選擇型別。它是可選的,要需要的時候賦值即可。
內容:主要是描述要作出一個什麼樣的決定 。
事件:主要是允許使用者通過確認一個具體操作來繼續下一步活動。
當然,dialog也和其他控制元件一樣,有自身的尺寸標準和排列樣式。
這裡著重提一點 觸控提示框外面的區域可以關閉提示框,谷歌對事件的業務邏輯也進行了規範,從而“希望”提升各個手機廠商的統一性。
理論的噼裡啪啦不多說,大致瞭解下就行了,具體的尺寸分佈還是需要走API好好讀的,下面貼一下例子的效果。
例子想把2個部分要呈現給大家,1是 自定義的Dialog,另一個就是來回收縮的Bar,先說下Dialog部分
how to use ?
Grade:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar' ])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.2.0'
compile 'com.android.support:design:23.2.0'
compile 'com.android.support:cardview-v7:23.2.0'
compile 'com.mikepenz:iconics-core:[email protected]'
compile 'com.mikepenz:material-design-iconic-typeface: [email protected]'
compile('com.github.afollestad.material-dialogs:core:[email protected]') { transitive = true }
}
然後記得在主Module的build配置加
allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
}
}
Eclipse的話。。。。。。。。。。。。
這個包的依賴比平時那些庫確實多不少,但是com.android.support:cardview
,com.android.support:design
什麼的在別的地方也要用也就還好。
因為這是一個純正的Diaolg,不是那些自定義控制元件也不需要放在XML裡然後 隱藏掉了全部java程式碼實現,直接貼MainActivity
關鍵的設定步驟程式碼裡已經寫好了,一看就懂,還有幾個沒放進去的我再說下
.withIconAnimation(false) //設定ICON出現時是否有動畫
.setHeaderColor(R.color.dialog_header) //設定Header顏色,例子設定的是圖片
.setCancelable(false) //設定外部點選是否消失
public class MainActivity extends AppCompatActivity {
Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// 構建Dialog物件
final MaterialStyledDialog dialogHeader_1 = new MaterialStyledDialog(MainActivity.this)
//設定上方Header為圖片
.setHeaderDrawable(R.drawable.flash)
//設定Header中間的Icon,也可不設
.setIcon(new IconicsDrawable(MainActivity.this).icon(MaterialDesignIconic.Icon.gmi_github).color(Color.WHITE))
//設定出現動畫
.withDialogAnimation(true)
//設定Title
.setTitle("我是Title!")
//設定具體文字資訊
.setDescription("我是一段文字內容")
//設定確認按鈕並添加回調
.setPositive("確定", new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(MaterialDialog dialog, DialogAction which) {
dialog.dismiss();
}
})
//設定取消按鈕添加回調
.setNegative("取消", new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(MaterialDialog dialog, DialogAction which) {
dialog.dismiss();
}
})
.build();
CardView dialogHeaderView_1 = (CardView) findViewById(R.id.dialog_1);
dialogHeaderView_1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialogHeader_1.show();
}
});
}
}
再來提一下AppBarLayout
首先先說下如何實現效果
1.CoordinatorLayout包住AppBarLayout
2.頂部區域的View都放在AppBarLayout裡面
3.在AppBarLayout裡面的View,通過app:layout_scrollFlags屬性來控制,滾動時候的表現
例子中是app:layout_scrollFlags="scroll|exitUntilCollapsed"
Scroll 表示向下滾動時,這個View會被滾出螢幕範圍直到隱藏.
enterAlways 表示向上滾動時,這個View會隨著滾動手勢出現,直到恢復原來的位置.
4.在可以滾動的View上設定屬性 app:layout_behavior.
例子中是這樣那個的
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_main">
......
我們包裹CardView的父控制元件整體被設定為被拉伸部分,這個Behavior的class是真正控制滾動時候View的滾動行為