Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 创建顶部导航菜单_Android_Kotlin - Fatal编程技术网

Android 创建顶部导航菜单

Android 创建顶部导航菜单,android,kotlin,Android,Kotlin,如何根据屏幕截图制作顶部导航菜单 我希望顶部链接是可点击和滚动的,因为顶部导航中有更多的项目 实现xml视图,如: - CoordinatorLayout - LinearLayout - Toolbar - TabLayout - View Pager activity_main.xml 然后,在“活动/片段设置”视图页面和“表格布局”中,在“视图页面”中添加片段,并在“视图页面”片段中准备“回收器”视图 private TabLayout tabLayout;

如何根据屏幕截图制作顶部导航菜单

我希望顶部链接是可点击和滚动的,因为顶部导航中有更多的项目


实现xml视图,如:

 - CoordinatorLayout
  - LinearLayout
  - Toolbar
  - TabLayout
  - View Pager
activity_main.xml

然后,在“活动/片段设置”视图页面和“表格布局”中,在“视图页面”中添加片段,并在“视图页面”片段中准备“回收器”视图

 private TabLayout tabLayout;
        private ViewPager viewPager;    
         @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.your_layout);
             initialiseViews();
            setUpTabLayout();

        }

         public void initialiseViews() {   
            tabLayout = (TabLayout) findViewById(tab_layout);
            viewPager = (ViewPager) findViewById(R.id.view_pager);
        }
        private void setUpTabLayout() {
            ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
            adapter.add(new YourFragment1(), "Home");
            adapter.add(new YourFragment2(), "Trending");
            adapter.add(new YourFragment3(), "Friends");
            viewPager.setAdapter(adapter);
            viewPager.setPageMargin((int) getResources().getDimension(R.dimen.view_pager_gap));
            viewPager.setPageMarginDrawable(R.color.background);
            viewPager.setOffscreenPageLimit(2);
            tabLayout.setupWithViewPager(viewPager);
        }

        private class ViewPagerAdapter extends FragmentPagerAdapter {

            private List<Fragment> fragmentList = new ArrayList<>();
            private List<String> titleList = new ArrayList<>();

            private ViewPagerAdapter(FragmentManager fm) {
                super(fm);
            }

            void add(Fragment fragment, String title) {
                fragmentList.add(fragment);
                titleList.add(title);
            }

            @Override
            public Fragment getItem(int position) {
                return fragmentList.get(position);
            }

            @Override
            public CharSequence getPageTitle(int position) {
                return titleList.get(position);
            }

            @Override
            public int getCount() {
                return fragmentList.size();
            }

           @Override
           public int getItemPosition(Object object) {
               return POSITION_NONE;
           }
        }

您必须使用TabLayout和ViewPager来创建如上所述的用户界面。 请参阅:

还有一些开源github项目

例如:

我还看到了导航按钮,它通常在屏幕上操作NavigationDrawer,我想您将来可能需要它

为了实现您所说的最佳方法,您应该首先通过显示一些代码等来描述您正在使用的架构

让我们假设您将以常见的方式使用holder活动和少量页面。然后,基本上,您需要的是ViewPager的自定义适配器:

首先,您需要正确的布局,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="#464646"
        app:layout_scrollFlags="scroll|enterAlways|snap"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
        app:theme="@style/AppTheme"
        app:titleTextColor="#e1e1e1" />

    <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        tools:context=".ui.main.MainActivity">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <android.support.design.widget.TabLayout
                android:id="@+id/tabLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="#606060"
                android:minHeight="?attr/actionBarSize"
                android:theme="@style/AppTheme" />

            <android.support.v4.view.ViewPager
                android:id="@+id/viewPager"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

        </LinearLayout>

        <FrameLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <android.support.design.widget.NavigationView
            android:id="@+id/navigation_view"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:headerLayout="@layout/drawer_header"
            app:menu="@menu/drawer_menu_general" />

    </android.support.v4.widget.DrawerLayout>

</LinearLayout>

我不会解释你构建这段代码所需的每一步,因为有很多Tuto可以解释整个概念,但我直接鼓励你用谷歌搜索它,以避免将来碎片堆栈或标准android组件可能出现的问题。

最好的方法是自己研究并展示一些努力。如果您不知道,建议在堆栈溢出上只出现基于代码和/或错误的问题。至于你的答案,请研究查看寻呼机和片段;查看此链接:您应该将TabLayout与ViewPager一起使用。请参阅下面的链接:访问此链接
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="#464646"
        app:layout_scrollFlags="scroll|enterAlways|snap"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
        app:theme="@style/AppTheme"
        app:titleTextColor="#e1e1e1" />

    <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        tools:context=".ui.main.MainActivity">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <android.support.design.widget.TabLayout
                android:id="@+id/tabLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="#606060"
                android:minHeight="?attr/actionBarSize"
                android:theme="@style/AppTheme" />

            <android.support.v4.view.ViewPager
                android:id="@+id/viewPager"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

        </LinearLayout>

        <FrameLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <android.support.design.widget.NavigationView
            android:id="@+id/navigation_view"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:headerLayout="@layout/drawer_header"
            app:menu="@menu/drawer_menu_general" />

    </android.support.v4.widget.DrawerLayout>

</LinearLayout>
class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener {

    private val pageTitles = arrayOf("TITLE_ONE", "TITLE_TWO")
    private lateinit var mDrawer: DrawerLayout
    private lateinit var mNavigationView: NavigationView
    private lateinit var mDrawerToggle: ActionBarDrawerToggle
    private lateinit var mActionBar: ActionBar
    private var mToolBarNavigationListenerIsRegistered = false

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        mDrawer = findViewById(R.id.drawer_layout)

        val toolbar: Toolbar = findViewById(R.id.toolbar)
        setSupportActionBar(toolbar)
        mActionBar = supportActionBar!!

        for (i in 0..YOUR_VIEWS_COUNT) { tabLayout.addTab(tabLayout.newTab().setText(pageTitles[i])) }

        tabLayout.tabGravity = TabLayout.GRAVITY_FILL

        mDrawerToggle = ActionBarDrawerToggle(this, mDrawer, toolbar,
                R.string.navigation_drawer_open, R.string.navigation_drawer_close)
        mDrawer.addDrawerListener(mDrawerToggle)
        mDrawerToggle.syncState()

        mNavigationView = findViewById(R.id.navigation_view)
        mNavigationView.setNavigationItemSelectedListener(this)


        val pagerAdapter = ViewPagerAdapter(supportFragmentManager)
        viewPager.adapter = pagerAdapter

        viewPager.addOnPageChangeListener(TabLayout.TabLayoutOnPageChangeListener(tabLayout))
        tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
            override fun onTabSelected(tab: TabLayout.Tab) {
                viewPager.currentItem = tab.position
            }
            override fun onTabUnselected(tab: TabLayout.Tab) {}
            override fun onTabReselected(tab: TabLayout.Tab) {}
        })

        if(savedInstanceState != null){
            resolveUpButtonWithFragmentStack()
        } else {

        }
    }

    override fun onNavigationItemSelected(item: MenuItem): Boolean {
        when(item.itemId){
            R.id.your_first_item_view -> {
                supportFragmentManager.beginTransaction().hide(getCurrentFragment())
                        .add(R.id.content_frame, YourFragment(), Integer.toString(getFragmentCount()))
                        .addToBackStack("fragBack").commit()
                showUpButton(true)
                title = "YourFragment"
            }
        }
        mDrawer.closeDrawer(GravityCompat.START)
        return true
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when (item.itemId) {
            android.R.id.home -> {
                mDrawer.openDrawer(GravityCompat.START)
                return true
            }
        }
        return super.onOptionsItemSelected(item)
    }

    override fun onBackPressed() {
        if (mDrawer.isDrawerOpen(GravityCompat.START)) {
            mDrawer.closeDrawer(GravityCompat.START)
        } else {
            val backStackCount = getFragmentCount()
            if (backStackCount >= 1) {
                supportFragmentManager.popBackStack()
                if (backStackCount == 1) {
                    showUpButton(false)
                }
            } else {
                super.onBackPressed()
            }
        }
    }

    private fun showUpButton(show: Boolean) {
        if (show) {
            mDrawerToggle.isDrawerIndicatorEnabled = false
            mActionBar.setDisplayHomeAsUpEnabled(true)
            if (!mToolBarNavigationListenerIsRegistered) {
                mDrawerToggle.toolbarNavigationClickListener = View.OnClickListener { onBackPressed() }
                mToolBarNavigationListenerIsRegistered = true
            }
        } else {
            mActionBar.setDisplayHomeAsUpEnabled(false)
            mDrawerToggle.isDrawerIndicatorEnabled = true
            mDrawerToggle.toolbarNavigationClickListener = null
            mToolBarNavigationListenerIsRegistered = false
        }
    }

    private fun resolveUpButtonWithFragmentStack() {
        showUpButton(supportFragmentManager.backStackEntryCount > 0)
    }

    fun getFragmentCount(): Int {
        return supportFragmentManager.backStackEntryCount
    }

    fun getFragmentAt(index: Int): Fragment {
        return if (getFragmentCount() > 0)
            supportFragmentManager.findFragmentByTag(Integer.toString(index)) else NearbyPlaceTypesFragment()
    }

    fun getCurrentFragment(): Fragment {
        return getFragmentAt(getFragmentCount() - 1)
    }


    // Your adapter for ViewPager
    class ViewPagerAdapter(val fragmentManager: FragmentManager) : FragmentStatePagerAdapter(fragmentManager) {

        override fun getItem(position: Int): Fragment {
            return when (position) {
                0 -> {
                    YourFragment()
                }
                else -> {
                    YourOtherFragment()
                }
            }
        }

        override fun getCount(): Int {
            return 2
        }
    }
}