1. 程式人生 > >Material Design學習之 Dialog(順便把前兩天AppBarLayout沒講的部分提一提)

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:cardviewcom.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的滾動行為