当前位置: 首页 > 知识库问答 >
问题:

DrawerLayout和AppBarLayout出现问题[重复]

司空丰
2023-03-14

我在DrawerLayout和AppBarLayout上有问题。我需要添加DrawerLayout来制作NavigationDrawer。当我添加DrawerLayout时,整个布局用蓝色绘制。而导航抽屉只能通过滑动打开,不能通过单击按钮来工作。我不明白问题出在哪里。请帮帮我。

这是我的主要布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:expanded="false">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="@color/colorPrimary"
                app:layout_scrollFlags="scroll|enterAlways"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

            <android.support.design.widget.TabLayout
                android:id="@+id/tabs"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                app:tabMode="scrollable" />
        </android.support.design.widget.AppBarLayout>

        <android.support.v4.view.ViewPager
            android:id="@+id/viewPager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

        <android.support.design.widget.NavigationView
            android:id="@+id/nav_view"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:fitsSystemWindows="true"
            app:menu="@menu/drawermenu" />
    </android.support.v4.widget.DrawerLayout>
</android.support.design.widget.CoordinatorLayout>

而这就是我的主要活动代码:

package com.jeffe.tabstest;

import android.content.Intent;
import android.support.design.widget.NavigationView;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    private Toolbar toolbar;
    private TabLayout tabLayout;
    private ViewPager viewPager;
    private DrawerLayout drawerLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        toolbar = (Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        drawerLayout = (DrawerLayout) findViewById(R.id.drawer);

        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar,
                R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawerLayout.addDrawerListener(toggle);
        toggle.syncState();

        viewPager = (ViewPager)findViewById(R.id.viewPager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout)findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        assert navigationView != null;
        navigationView.setNavigationItemSelectedListener(this);
    }

    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        int id = item.getItemId();

        drawerLayout.closeDrawer(GravityCompat.START);
        return true;
    }

    @Override
    public void onBackPressed() {
        assert drawerLayout != null;
        if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
            drawerLayout.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new MusicTab(), "Tab1");
        adapter.addFragment(new AnimeTab(), "Tab2");
        adapter.addFragment(new ArtistTab(), "Tab3");
        adapter.addFragment(new AlbumTab(), "Tab4");
        adapter.addFragment(new FavoritesTab(), "Tab5");
        viewPager.setAdapter(adapter);
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

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

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

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

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

布局有问题,因为AppBar中的按钮都不起作用。但在我添加抽屉布局之前,一切都很完美。

共有1个答案

华景焕
2023-03-14

不要使用ActionBardrawerToggleNavigationView,这是最古老的方式。

试试这个-

 toolbar = (Toolbar)findViewById(R.id.toolbar);
 toolbar.setNavigationIcon(YOUR_MENU_ICON);  //set your navigation icon
 setSupportActionBar(toolbar);


 toolbar.setNavigationOnClickListener(new View.OnClickListener() {

     @Override
     public void onClick(View v) {
           drawerLayout.openDrawer(drawerLayout);  
        }
     });

希望能有所帮助:)

 类似资料:
  • 首先,我为我的英语水平不太好而道歉。我正在实习,我的任务是继续为公司开发一个内联网网站。我在实习开始时就拿到了代码,并开发了本地版本,具有本地网络服务器和本地数据库。这是我在公司服务器上部署更改版本的时候了,一旦我这样做了,到目前为止一直使用旧版本的站点会显示“ 内部服务器错误 500”。它来自什么,有人有解决方案吗?PS :该网站是用CakePhp开发的。

  • 我正在尝试 我得到的输出是。但预期的是。

  • 我希望连接的文件夹中有大约500个数据集。它们都有相同的列名:“年”、“邮政编码”、“Var1”、“Var2”、“Var3”。 我使用以下代码循环浏览文件夹中的文件: 当我输出数据集时,仅显示2019年的数据集和邮政编码000001。我打印了整个文件列表,我想要连接的数据集都在那里。有没有洞察到为什么会出现这种情况?谢谢

  • 问题内容: SQL … 如您所见,它占用了文章的所有页面(每个页面均以长文本形式存储在单独的行中),并通过GROUP_CONCAT将它们分成单个长文本行。问题在于结果只有太多的字符,然后它被完全截断,丢失了大约90%的内容。CONCAT是否不能很好地处理长文本,还是我做错了其他事情? 问题答案: 根据MySQL手册,最大长度由系统变量定义,默认为1024。 可以使用以下命令来增加此值: 但是,应注

  • 问题内容: 我已经使用timer_create()API实现了POSIX计时器,当计时器到期时,我将为其放置处理程序代码,这将生成SIGUSR1。现在的问题是,如果此程序收到另一个SIGUSR1,则将调用并捕获相同的信号处理程序。 有什么方法可以防止这种情况,以便处理程序可以捕获仅由计时器生成的信号? 问题答案: 这对您有用吗?(修改了手册页中示例中的代码。) 当捕捉到来自定时器的信号时,将显示。

  • 问题内容: 我在package.json中添加了proxy,效果很好,但是在npm run build之后,CORS问题再次浮出水面,有人知道在React中npm run build之后如何处理CORS问题。 我试图使用各种方法在axios请求中添加标头。但是,我未能在axios请求中添加’Access-Control-Allow- Origin’:’*’。我的代码如下: package.json