【问题标题】:ActionBarDrawerToggle is visible but onClick is not workingActionBarDrawerToggle 可见但 onClick 不起作用
【发布时间】:2017-05-31 17:23:57
【问题描述】:

我一直在尝试将自己的图标添加到 ActionBarDrawerToggle (android.support.v7.app.ActionBarDrawerToggle)。自定义图标可见,但没有响应点击。当我从左向右滑动手指但单击不起作用时,我可以看到我的侧边菜单。 我已经尝试过这个解决方案,但它正在工作,我不想使用工具栏。我想要添加此图标而不使用工具栏的解决方案,like this

这是我的代码。对不起,太多行了。

      @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        getSupportActionBar().setCustomView(R.layout.layout_for_title);
        CustomTextViewToolbar head=(CustomTextViewToolbar)findViewById(getResources().getIdentifier("mytext", "id", getPackageName()));
        head.setText("Home");
        ImageView gender = (ImageView)findViewById(getResources().getIdentifier("gender" , "id" , getPackageName()));
        gender.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final Dialog dialog = new Dialog(MainActivity.this);

                dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                dialog.setContentView(R.layout.custom_dialog_gender);


                dialog.show();
                CircularImageView male = (CircularImageView)dialog.findViewById(R.id.male) ;
                male.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        dialog.dismiss();
                    }
                });
                CircularImageView female = (CircularImageView)dialog.findViewById(R.id.female) ;
                female.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        dialog.dismiss();
                    }
                });
                CircularImageView kids = (CircularImageView)dialog.findViewById(R.id.kids) ;
                kids.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        dialog.dismiss();
                    }
                });
            }
        });
        ImageView imageView = (ImageView)findViewById(getResources().getIdentifier("show_cart" , "id" , getPackageName()));
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(getBaseContext() ,  CustomerCartActivity.class));
            }
        });

        setContentView(R.layout.customer_home_screen);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mActivityTitle = getTitle().toString();
        mExpandableListView = (ExpandableListView) findViewById(R.id.navList);

        initItems();

        LayoutInflater inflater = getLayoutInflater();
        View listHeaderView = inflater.inflate(R.layout.nav_header, null, false);
        mExpandableListView.addHeaderView(listHeaderView);

        mExpandableListData = ExpandableListDataSource.getData(this);
        mExpandableListTitle = new ArrayList(mExpandableListData.keySet());

        addDrawerItems();
       setupDrawer();



        if (savedInstanceState == null) {
            selectFirstItemAsDefault();
        }
        mDrawerToggle.setDrawerIndicatorEnabled(false);
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        mDrawerToggle.setHomeAsUpIndicator(R.drawable.menu_icon);
        coverFlow = (FeatureCoverFlow) findViewById(R.id.coverflow);

        mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
                if (drawer.isDrawerOpen(GravityCompat.START)) {
                    drawer.closeDrawer(GravityCompat.START);
                } else {
                    drawer.openDrawer(GravityCompat.START);
                }
            }
        });
        mDrawerLayout.setDrawerListener(mDrawerToggle);
        horizontal_recycler_view= (RecyclerView) findViewById(R.id.horizontal_recycler_view);
        data = fill_with_data();
        horizontalAdapter=new HorizontalAdapter(data, getApplication());
        LinearLayoutManager horizontalLayoutManager = new LinearLayoutManager(MainActivity.this, LinearLayoutManager.HORIZONTAL, false);
        horizontal_recycler_view.setLayoutManager(horizontalLayoutManager);
        horizontal_recycler_view.setAdapter(horizontalAdapter);


        coverFlowOne = (FeatureCoverFlow) findViewById(R.id.coverflow_one);
        coverFlowTwo = (FeatureCoverFlow) findViewById(R.id.coverflowtwo);
        settingDummyData();
        adapter = new CoverFlowAdapter(this, games);
        coverFlow.setAdapter(adapter);
        coverFlow.setOnScrollPositionListener(onScrollListener());
        coverFlowOne.setAdapter(adapter);
        coverFlowOne.setOnScrollPositionListener(onScrollListener());
        coverFlowTwo.setAdapter(adapter);
        coverFlowTwo.setOnScrollPositionListener(onScrollListener());
        myHome = (LinearLayout)findViewById(R.id.c_home);
        myOrder  = (LinearLayout)findViewById(R.id.c_my_order);
        myAccount = (LinearLayout)findViewById(R.id.c_profile);


        myHome.setOnClickListener(this);
        myOrder.setOnClickListener(this);
        myAccount.setOnClickListener(this);


    }

    private void selectFirstItemAsDefault() {
        if (mNavigationManager != null) {
            String firstActionMovie = getResources().getStringArray(R.array.actionFilms)[0];
            mNavigationManager.showFragmentAction(firstActionMovie);
        }
    }

    private void initItems() {
        items = getResources().getStringArray(R.array.film_genre);
    }

    private void addDrawerItems() {
        mExpandableListAdapter = new CustomExpandableListAdapter(this, mExpandableListTitle, mExpandableListData);
        mExpandableListView.setAdapter(mExpandableListAdapter);


        mExpandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
            @Override
            public boolean onChildClick(ExpandableListView parent, View v,
                                        int groupPosition, int childPosition, long id) {
                String selectedItem = ((List) (mExpandableListData.get(mExpandableListTitle.get(groupPosition))))
                        .get(childPosition).toString();


                mDrawerLayout.closeDrawer(GravityCompat.START);
                return false;
            }
        });
    }

    private void setupDrawer() {
        mDrawerToggle = new ActionBarDrawerToggle(this,
                mDrawerLayout,
                R.string.drawer_open,
                R.string.drawer_close) {

            /** Called when a drawer has settled in a completely open state. */
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);

                invalidateOptionsMenu(); 
            }

            /** Called when a drawer has settled in a completely closed state. */
            public void onDrawerClosed(View view) {
                super.onDrawerClosed(view);
                getSupportActionBar().setTitle(mActivityTitle);
                invalidateOptionsMenu(); 
            }
        };
        mDrawerToggle.setHomeAsUpIndicator(R.drawable.menu_icon);
        mDrawerToggle.setDrawerIndicatorEnabled(false);
        mDrawerLayout.setDrawerListener(mDrawerToggle);
        mDrawerLayout.requestLayout();
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mDrawerToggle.onConfigurationChanged(newConfig);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

【问题讨论】:

  • 你有没有试过删除这行mDrawerToggle.setDrawerIndicatorEnabled(false);
  • 是的,我尝试删除mDrawerToggle.setDrawerIndicatorEnabled(false);,但没有任何反应,然后我尝试了mDrawerToggle.setDrawerIndicatorEnabled(true);,但这给出了默认的切换火腿图标,使用mDrawerToggle.setDrawerIndicatorEnabled(false);,我可以看到我的自定义图标,但它没有收到任意点击

标签: java android


【解决方案1】:

您是否在 xml 中将新图标设置为“可点击”? 启用调试 GPU 过度绘制工具。它可能告诉您您的图标是否与另一个消耗点击的元素重叠(如果是这样,您需要将该重叠元素设置为 false)。

在您的移动设备上,转到“设置”并点按“开发者选项”。

在硬件加速渲染部分,选择调试 GPU Overdraw。

在“调试 GPU 过度绘制”弹出窗口中,选择“显示过度绘制区域”。

https://developer.android.com/studio/profile/dev-options-overdraw.html

或者将调试 onClick 函数添加到可能重叠或冲突的元素。

【讨论】:

  • @Sam Boychuk 你的建议对我很有帮助,我按照你的要求做了同样的事情,但我可以清楚地看到我的自定义图标没有被任何其他元素重叠并且它正在显示触摸当我点击它时,关键是它没有关闭和打开侧边菜单
  • @Sam Boychuk 将您的答案标记为已接受,因为它帮助我寻找更好的解决方案,我发现此link 有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多