UI——Material Design設計之滑動選單詳解
滑動選單
滑動選單是Material Design 中最常見的效果之一。
所謂的滑動選單就是將一些選單選項隱藏起來,而不是放置在主螢幕上,然後可以通過滑動的方式將選單顯示出來。這種方式既節省了螢幕空間,又實現了非常好的動畫效果,是Material Design中推薦的做法。
DrawerLayout
藉助這個控制元件,實現滑動選單簡單又方便。首先它是一個佈局,在佈局中允許放入兩個直接子控制元件,第一個子控制元件是主螢幕中顯示的內容,第二個子控制元件是滑動選單中顯示的內容。因此,我們可以對activity_main.xml中的程式碼做如下修改:
<!-- 第二部分 隱藏部分-->
<TextView android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
android:text="This is menu"
android:textSize="30sp"
android:background="#fff"/>
</android.support.v4.widget.DrawerLayout>
可以看出,最外層使用了DrawerLayout,這個控制元件是由support-v4庫提供的。DrawerLayout中放置了兩個直接子控制元件,第一個子控制元件是FrameLayout,用於作為主螢幕中顯示的內容;第二個子控制元件這裡使用了一個TextView,用於作為滑動選單中顯示的內容,其實使用什麼都可以。
但是,關於第二個子控制元件有一點需要注意,layout_gravity這個屬性是必須指定的,用於說明滑動控制元件所處位置。指定left表示在左邊,right表示在右邊,這裡我指定了start,表示會根據系統語言進行判斷,如果系統語言是從左往右的,比如英語、漢語,滑動選單就在左邊,如果系統語言是從右往左的,比如阿拉伯語,滑動選單就在右邊。
現在,就可以執行程式了!!!
上圖,因為只有在螢幕的左側邊緣進行拖動時才能將選單拖出來,但是很多使用者根本就不知道?
Material Design 建議的做法是在Toolbar的最左邊加入一個導航按鈕,點選按鈕也會將滑動選單的內容展示出來。防止一些使用者不知道螢幕左側邊緣是可以拖動的。
下面開始實現這個功能,修改MainActivity中的程式碼,如下所示:
public class MainActivity extends AppCompatActivity{ private DrawerLayout mDrawerLayout; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar); setSupportActionBar(toolbar); mDrawerLayout=(DrawerLayout)findViewById(R.id.drawer_layout); //獲取ActionBar ActionBar actionBar=getSupportActionBar(); if(actionBar != null){
//顯示導航按鈕 actionBar.setDisplayHomeAsUpEnabled(true); //設定圖片 actionBar.setHomeAsUpIndicator(R.drawable.ic_menu); } } 。 。 。 @Override public boolean onOptionsItemSelected( MenuItem item ){ switch(item.getItemId()){
//HomeAsUp按鈕id永遠是android.R.id.home case android.R.id.home: //顯示滑動選單 mDrawerLayout.openDrawer(GravityCompat.START); break; ... default: } return true; } }
製作滑動選單:
NavigationView
是Design Support 庫中提供的一個控制元件,它不僅是嚴格按照Material Design的要求進行設計的,而且還可以將
滑動選單頁面的實現變得非常簡單。下面我們來學習:
首先,要將Design Support庫引入到專案中才行。開啟app/build.gradle檔案,在dependencies閉包中新增如下
內容:
dependencies{
compile fileTree(dir: 'libs', include:['*.jar'])
compile 'com.android.support:appcompat-v7:24.2.1'
testCompile 'junit:junit:4.12'
compile 'com.android.support:design:24.2.1'
compile 'de.hdodenhof:circleimageview:2.1.0'
}