Android Material Design的FloatingActionButton,Snackbar和CoordinatorLayout
本文介紹Android Material Design引入的三個元件:FloatingActionButton,Snackbar和CoordinatorLayout。如果是為了相容低版本的Android系統,則需要引用Android Material Design的擴充支援庫,我在之前的一篇文章張,較為詳細的說明了如何導入Android Material Design依賴的庫:android-support-v7-appcompat和design庫,文章連結位址:
http://blog.csdn.net/zhangphil/article/details/48859961Android Material Design的FloatingActionButton是一個“懸浮”的按鈕。Snackbar有一些類似于Android過去的Toast,但有很多自己獨特的特點(比如支援選項事件,選擇事件鍵等)。CoordinatorLayout是一個新的布局,實作在布局上各個元件之間的協調。
現在給出一個例子,對以上三個元件的使用加以說明:
測試的MainActivity.java:
package zhangphil.tablayout;
import java.util.ArrayList;
import android.app.Activity;
import android.app.ListActivity;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends ListActivity {
private ArrayList<String> data = null;
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
data = new ArrayList<String>();
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);
setListAdapter(adapter);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.floatingActionButton);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int len = data.size();
adapter.add("資料" + len);
adapter.notifyDataSetChanged();
}
});
}
@Override
public void onListItemClick(ListView l, View v, final int position, long id) {
final Activity activity = this;
Snackbar.make(v, "選擇資料 " + position + " ?", Snackbar.LENGTH_SHORT).setAction("是", new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(activity, "選擇了 " + position, Toast.LENGTH_SHORT).show();
}
}).show();
}
}
MainActivity.java需要的布局檔案:activity_main.xml檔案:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
<android.support.design.widget.FloatingActionButton
android:id="@+id/floatingActionButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|bottom"
android:layout_marginBottom="10dip"
android:layout_marginRight="10dip"
android:src="@drawable/ic_launcher"
app:backgroundTint="#e57373"
app:borderWidth="10dp"
app:elevation="10dip"
app:fabSize="normal"
app:pressedTranslationZ="10dp"
app:rippleColor="#c62828" />
</android.support.design.widget.CoordinatorLayout>
運作結果如圖所示:
需要說明的一點是,假設将activity_main.xml布局檔案最外層的布局改寫成FrameLayout,那麼,當選擇ListView中某一項時候,彈出的Snackbar将會遮掩住FloatingActionButton。是以使用CoordinatorLayout可以使Snackbar和FloatingActionButton協調工作,不會出現遮掩的問題。