导航抽屉 - Header 使用 ListView 查看
Navigation drawer - Header View with ListView
我目前正在创建和定义导航抽屉。我现在想要一个 header 视图,就像它们在 google 应用程序上一样,位于项目行上方。我只找到了 RecyclerViews 的示例,我不想使用它。我已经完成了 ListView 和所有其他东西。也许有人可以帮助我 :) 提前致谢
您可以使用 android 设计支持库创建 NavigationView
而无需创建 listview 或 RecyclerView,它们都是由 android 创建的。
要将它添加到您的项目中,您需要将 android 设计支持库添加到您的项目中,在 build.gradle
中添加以下行
compile 'com.android.support:design:22.2.0
查看 android 设计支持功能 here
先创建一个header(header.xml)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="190dp"
android:background="@drawable/background_material"
android:orientation="vertical"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="nyname"
</RelativeLayout>
接下来创建一个菜单资源文件,菜单中的项目将是抽屉中显示的项目(drawer.xml)
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/first1"
android:checked="false"
android:icon="@drawable/icon1"
android:title="@string/string1" />
<item
android:id="@+id/second2"
android:checked="false"
android:icon="@drawable/icon2"
android:title="@string/string2" />
</menu>
接下来创建一个 DrawerLayout
文件,在 drawerlayout 中你可以看到我已经包含了一个 Toolbar
和一个 'FrameLayout`。单击抽屉布局中的项目时,您可以替换片段。
其中还有具有以下参数的 NavigationView:
app:headerLayout="@layout/header"
app:menu="@menu/drawer"
android:layout_gravity="start"
app:headerLayout
是我们在步骤 1 中创建的 header.xml。
app:menu
是菜单资源项,即 drawer.xml
<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".MainActivity">
<LinearLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
>
<include
android:id="@+id/toolbar"
layout="@layout/tool_bar"
/>
<FrameLayout
android:id="@+id/frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</LinearLayout>
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="start"
app:headerLayout="@layout/header"
app:menu="@menu/drawer"
/>
</android.support.v4.widget.DrawerLayout>
接下来在你的 MainActivity 中扩展 AppcompatActivity,
public class MainActivity extends AppCompatActivity {
............................................
初始化 NavigationView 并调用 setNavigationItemSelectedListener 获取点击事件,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initializing Toolbar and setting it as the actionbar
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//Initializing NavigationView
navigationView = (NavigationView) findViewById(R.id.navigation_view);
//Setting Navigation View Item Selected Listener to handle the item click of the navigation menu
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
// This method will trigger on item Click of navigation menu
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
//Checking if the item is in checked state or not, if not make it in checked state
if(menuItem.isChecked()) menuItem.setChecked(false);
else menuItem.setChecked(true);
//Closing drawer on item click
drawerLayout.closeDrawers();
//Check to see which item was being clicked and perform appropriate action
switch (menuItem.getItemId()){
//Replacing the main content with ContentFragment
case R.id.first1:
SomeFragment fragment = new SomeFragment();
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame,fragment);
fragmentTransaction.commit();
return true;
...................
创建导航视图的分步过程 here
它看起来如何:
我目前正在创建和定义导航抽屉。我现在想要一个 header 视图,就像它们在 google 应用程序上一样,位于项目行上方。我只找到了 RecyclerViews 的示例,我不想使用它。我已经完成了 ListView 和所有其他东西。也许有人可以帮助我 :) 提前致谢
您可以使用 android 设计支持库创建 NavigationView
而无需创建 listview 或 RecyclerView,它们都是由 android 创建的。
要将它添加到您的项目中,您需要将 android 设计支持库添加到您的项目中,在 build.gradle
中添加以下行compile 'com.android.support:design:22.2.0
查看 android 设计支持功能 here
先创建一个header(header.xml)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="190dp"
android:background="@drawable/background_material"
android:orientation="vertical"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="nyname"
</RelativeLayout>
接下来创建一个菜单资源文件,菜单中的项目将是抽屉中显示的项目(drawer.xml)
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/first1"
android:checked="false"
android:icon="@drawable/icon1"
android:title="@string/string1" />
<item
android:id="@+id/second2"
android:checked="false"
android:icon="@drawable/icon2"
android:title="@string/string2" />
</menu>
接下来创建一个 DrawerLayout
文件,在 drawerlayout 中你可以看到我已经包含了一个 Toolbar
和一个 'FrameLayout`。单击抽屉布局中的项目时,您可以替换片段。
其中还有具有以下参数的 NavigationView:
app:headerLayout="@layout/header"
app:menu="@menu/drawer"
android:layout_gravity="start"
app:headerLayout
是我们在步骤 1 中创建的 header.xml。
app:menu
是菜单资源项,即 drawer.xml
<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".MainActivity">
<LinearLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
>
<include
android:id="@+id/toolbar"
layout="@layout/tool_bar"
/>
<FrameLayout
android:id="@+id/frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</LinearLayout>
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="start"
app:headerLayout="@layout/header"
app:menu="@menu/drawer"
/>
</android.support.v4.widget.DrawerLayout>
接下来在你的 MainActivity 中扩展 AppcompatActivity,
public class MainActivity extends AppCompatActivity {
............................................
初始化 NavigationView 并调用 setNavigationItemSelectedListener 获取点击事件,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initializing Toolbar and setting it as the actionbar
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//Initializing NavigationView
navigationView = (NavigationView) findViewById(R.id.navigation_view);
//Setting Navigation View Item Selected Listener to handle the item click of the navigation menu
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
// This method will trigger on item Click of navigation menu
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
//Checking if the item is in checked state or not, if not make it in checked state
if(menuItem.isChecked()) menuItem.setChecked(false);
else menuItem.setChecked(true);
//Closing drawer on item click
drawerLayout.closeDrawers();
//Check to see which item was being clicked and perform appropriate action
switch (menuItem.getItemId()){
//Replacing the main content with ContentFragment
case R.id.first1:
SomeFragment fragment = new SomeFragment();
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.frame,fragment);
fragmentTransaction.commit();
return true;
...................
创建导航视图的分步过程 here
它看起来如何: