PS:在這之前也就是上一篇介紹了MaterialDesign一些滑動刪除、標題欄的懸浮效果等,如果沒看過第一篇的小火雞可以看一下,因為這篇是接着上一篇寫的,有一些東西上一篇寫過了這里就不在重復了(MaterialDesign應用技術一),這篇也是上一篇的升級版,在我們日常寫界面的時候,都想簡單並且界面美觀,這就少不了動畫效果,MaterialDesign我們一般用到的動畫,里面都有,不用我們自己寫,在這個強大的庫里,他都能夠做什么呢,讓我們來簡單看一下。
- 上滑 頂部背景圖片緩慢消失,標題懸浮
- 在標題 上欄加入布局,放一些搜索框
- 輸入框TextInputEditText的使用
1:上滑 頂部背景圖片緩慢消失,標題懸浮
1.1:CoordinatorLayout中設置
前面的添加依賴,在上一篇中已經說過,在這就不在重復了,協調者布局中這次又加入了一個新的布局CollapsingToolbarLayout(折疊工具欄布局),很明顯上面的效果圖中的工具欄上滑的同時把圖片折疊進去了,這是一個動畫效果,如果不是MaterialDesign庫的強大,這都是我們自己寫。我們來分析一下效果圖中都用到了什么,只看帶顏色的有文字,和一個蘋果背景圖、還有一個懸浮按鈕(吸附在CollapsingToolbarLayout的右下角)。我們來分析一下主要代碼
最外層-->里層還是:CoordinatorLayout-->AppBarLayout-->CollapsingToolbarLayout。竟然折疊的部分是toolbar和背景圖片,這就理所應當的把這兩個空間寫在CollapsingToolbarLayout中,因為上面協調者布局和appbar布局很簡單,這里就不在寫了,只貼出折疊布局代碼(里面的注釋有貼出后加的,用該代碼時要注意語法)。這里可以看出我在ImageView中加入了高度180dp,這里是一定要加上的,否側toolbar的會出現以下幾種錯誤,1:文字不顯示。2:只顯示標題欄。3:圖片過大充滿整個屏幕。當然這些問題不是每個人都有的。
<!--折疊toolbar布局--> <android.support.design.widget.CollapsingToolbarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/toolbar_layout" app:contentScrim="@color/colorPrimary" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <!--這里ContentScrim是實現上滑后由什么顏色作為標題背景色--> <ImageView android:layout_width="match_parent" android:layout_height="180dp" android:scaleType="fitXY" //圖片顯示方式,鋪滿xy軸 android:src="@drawable/img1" /> <android.support.v7.widget.Toolbar android:id="@+id/id_toolbar" android:layout_width="match_parent" android:layout_height="?actionBarSize" /> </android.support.design.widget.CollapsingToolbarLayout>
寫到這才是我們的折疊布局了,還有我們的懸浮按鈕FloatingActionButton,標紅的是重點。
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/add"
app:layout_anchor="@id/toolbar_layout"//固定在哪個控件
app:layout_anchorGravity="bottom|right"//的具體位置
/>
寫到這里基本上完成了,代碼少,效果好正是該庫的強大,在Activity中的使用基本和上一篇是一樣的。對於這個懸浮按鈕里面也有很多屬性,這里就不在一一寫出了,這里只是作為一個輔助,讓我們在視覺更舒服所加的。
2:在標題 上欄加入布局,放一些搜索框
2.1:布局書寫
這里的布局和上面是一樣的,只是把imageview換成了LinearLayout布局,在該布局中寫上我們熟悉的輸入框和圖片按鈕即可,
最外層-->里層還是:CoordinatorLayout-->AppBarLayout-->CollapsingToolbarLayout-->LinearLayout。
3:輸入框TextInputEditText的使用
在最平常的時候,我們寫輸入框,要加正則表達式來判斷是哪一行出現不符合要求的數據,然后用一個toast來提示用戶,這就顯得用戶體驗極差,有的用戶還沒看完toast就關掉了,而且具體哪一行錯誤也沒有標紅,這就很尷尬了,那么今天這個控件也是一個輸入框,但是外層加一個布局(TextInputLayout),就可以達到精確到一行提示具體錯誤。
TextInputLayout是22.2.0新添加的控件, 要和EditText(或EditText的子類)結合使用,並且只能包含一個EditText(或EditText的子類)。

<android.support.design.widget.TextInputLayout
android:id="@+id/id_inputtext"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="用戶名" />
</android.support.design.widget.TextInputLayout>
這里要注意的是Id是加在 TextInputLayout上,在Activity中獲取也是獲取的layout,那么怎么獲取edittext輸入的數據呢,有方法的。
viewById.getEditText().addTextChangedListener(this);
獲取里面的text文本並且添加文本變化監聽,這里要實現三個方法
public void afterTextChanged(Editable s) //內容改變后調用
這兩個方法簡單demo上都用不到,這里就不過多解釋了。
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { }
這里我們重點看afterTextChanged方法,這里只給第一個控件加上了該監聽(對比)。
@Override public void afterTextChanged(Editable s) { if(s.length()<4){ viewById.setError("必須大於4位"); viewById.setErrorEnabled(true); }else { viewById.setErrorEnabled(false); } }
完,
我的博客即將搬運同步至騰訊雲+社區,邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan