📜  如何在 Android 应用中创建滑动导航

📅  最后修改于: 2021-10-28 02:16:51             🧑  作者: Mango

在谈论 Android 应用程序时,首先想到的是多样性。有很多种类的 Android 应用程序为用户提供漂亮的动态 UI。其中一项功能是使用左右滑动而不是单击按钮在我们的 Android 应用程序中导航。它不仅看起来更简单和优雅,而且还为用户提供了轻松访问。有许多应用程序使用此滑动功能来滑动应用程序中的不同活动。例如,流行的聊天应用 Snapchat 使用它来浏览镜头、聊天和故事。在这里,我们将学习如何在我们自己的 Android 应用中实现滑动视图。

我们可以通过使用两个功能来实现这一点:

  1. 片段片段只是活动的一部分。我们可以让一个片段占据屏幕的一部分或整个屏幕。或者我们可以同时显示多个片段来组成一个完整的屏幕。在一个活动中,我们还可以相互交换不同的片段。
  2. ViewPager ViewPager 是Java中的一个类,它与 Fragments 一起使用。它主要用于设计应用程序的 UI。

它是如何工作的?
首先,我们需要使用setAdapter()方法在ViewPager上设置一个适配器。我们设置的适配器称为FragmentPagerAdapter ,它是Java的一个抽象类。因此,我们创建了我们自己的SampleFragmentPagerAdapter ,它从FragmentPagerAdapter扩展并在屏幕上显示我们的 Fragment。当我们在设备中启动应用程序时,ViewPager 会询问 SampleFragmentPagerAdapter 有多少页面可以滑动。适配器的getCount()方法将此答案返回给 ViewPager。然后 ViewPager 请求位于第 0 个位置的 Fragment 并且适配器返回该特定片段,然后 ViewPager 将其显示在我们的屏幕上。当我们向左滑动时,ViewPager 向适配器请求第 1 个位置的 Fragment,类似地,它显示在屏幕上并继续下去。

分步实施:
我们将创建三个片段,即用户可以滑动的三个屏幕。然后我们将这些片段添加到我们的FragmentPagerAdapter并最终设置在 ViewPager 上。
注意:要运行这些代码,您需要将它们复制并粘贴到 Android Studio 中,因为它不会在 IDE 上运行!

  • 步骤 1:创建片段:
    要创建片段,请单击app > Java > com.example.android (右键单击) > New > Fragment > Fragment(Blank)

    我们可以创建任意数量的 Fragment,但由于我们将只显示三个屏幕,因此我们将创建三个 Fragment。
    现在我们将打开我们的 Fragments 并将此代码复制到那里:

    Java
    package com.example.android.gfg;
      
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
      
    public class Fragment1 extends Fragment {
      
        @Override
        public View onCreateView(
            LayoutInflater inflater,
            ViewGroup container,
            Bundle savedInstanceState)
        {
            return inflater
                .inflate(
                    R.layout.fragment_1,
                    container, false);
        }
    }


    XML
    
      
        
      
        
    


    Java
    package com.example.android.gfg;
      
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentPagerAdapter;
      
    public class SimpleFragmentPagerAdapter
        extends FragmentPagerAdapter {
      
        public SimpleFragmentPagerAdapter(
            FragmentManager fm)
        {
            super(fm);
        }
      
        @Override
        public Fragment getItem(int position)
        {
            if (position == 0) {
                return new Fragment1();
            }
            else if (position == 1) {
                return new Fragment2();
            }
            else {
                return new Fragmnet3();
            }
        }
      
        @Override
        public int getCount()
        {
            return 3;
        }
    }


    activity_main.xml
    
      
    
      
        
      
    


    MainActivity.Java
    package com.example.android.gfg;
      
    import android.os.Bundle;
    import android.support.v4.view.ViewPager;
    import android.support.v7.app.AppCompatActivity;
      
    public class MainActivity
        extends AppCompatActivity {
      
        @Override
        protected void onCreate(
            Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
      
            // Set the content of the activity
            // to use the activity_main.xml
            // layout file
            setContentView(R.layout.activity_main);
      
            // Find the view pager that will
            // allow the user to swipe
            // between fragments
            ViewPager viewPager
                = (ViewPager)findViewById(
                    R.id.viewpager);
      
            // Create an adapter that
            // knows which fragment should
            // be shown on each page
            SimpleFragmentPagerAdapter
                adapter
                = new SimpleFragmentPagerAdapter(
                    getSupportFragmentManager());
      
            // Set the adapter onto
            // the view pager
            viewPager.setAdapter(adapter);
        }
    }


    解释:

    • 我们正在使用 BuildTools 版本23.0.2导入v4片段。如果我们在导入中遇到错误,我们必须确保我们的 BuildTools 和 SDK 版本与我们导入的库相对应。
    • 我们将 Fragment 命名为 Fragment1。
    • Fragment1 显示我们现在要做的布局 fragment_1.xml。
  • 第 2 步:为 Fragment 创建布局:
    每个 Fragment 都需要显示一个布局。我们可以随心所欲地设计这种布局。这是我们如何实现此布局的代码:

    XML

    
      
        
      
        
    
    

    这看起来像:

    同样,我们将为每个片段创建另外两个 Fragment 和相应的布局。

  • 第 3 步:创建我们的 FragmentPageAdapter:
    现在我们拥有了所有三个 Fragment 并且三个布局都与它们中的每一个相关联,我们现在将构建我们的FragmentPageAdapter并将其命名为 SimpleFragmentPageAdapter 。这可以通过首先创建一个新的Java类并将其命名为 SimpleFragmentPageAdapter 来完成。这是它将包含的代码:

    Java

    package com.example.android.gfg;
      
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentPagerAdapter;
      
    public class SimpleFragmentPagerAdapter
        extends FragmentPagerAdapter {
      
        public SimpleFragmentPagerAdapter(
            FragmentManager fm)
        {
            super(fm);
        }
      
        @Override
        public Fragment getItem(int position)
        {
            if (position == 0) {
                return new Fragment1();
            }
            else if (position == 1) {
                return new Fragment2();
            }
            else {
                return new Fragmnet3();
            }
        }
      
        @Override
        public int getCount()
        {
            return 3;
        }
    }
    

    解释:

    • getItem()方法返回指定位置的 Fragment。所以首先是 Fragment1,向左滑动时,我们会以相同的顺序获得其他 Fragment。
    • getCount()方法返回要显示的 Fragment 的数量,在本例中为 3。
  • 第 3 步:创建 MainActivity。 Java和 activity_main.xml :
    现在我们已经准备好了一切,最后一步就是制作我们的 MainActivity。 Java和 activity_main.xml 文件。它们可能会因我们正在制作的应用程序而异,但在这种情况下,文件非常简单,如下所示:

    活动_main.xml

    
      
    
      
        
      
    
    

    主要活动。Java

    package com.example.android.gfg;
      
    import android.os.Bundle;
    import android.support.v4.view.ViewPager;
    import android.support.v7.app.AppCompatActivity;
      
    public class MainActivity
        extends AppCompatActivity {
      
        @Override
        protected void onCreate(
            Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
      
            // Set the content of the activity
            // to use the activity_main.xml
            // layout file
            setContentView(R.layout.activity_main);
      
            // Find the view pager that will
            // allow the user to swipe
            // between fragments
            ViewPager viewPager
                = (ViewPager)findViewById(
                    R.id.viewpager);
      
            // Create an adapter that
            // knows which fragment should
            // be shown on each page
            SimpleFragmentPagerAdapter
                adapter
                = new SimpleFragmentPagerAdapter(
                    getSupportFragmentManager());
      
            // Set the adapter onto
            // the view pager
            viewPager.setAdapter(adapter);
        }
    }
    

    输出: