Android:更改操作栏高度后,导航指示器(图标)不垂直居中

Posted

技术标签:

【中文标题】Android:更改操作栏高度后,导航指示器(图标)不垂直居中【英文标题】:Android: After changing action bar height, the navigation indicator(icon) not centered vertical 【发布时间】:2015-05-20 17:54:37 【问题描述】:

我用 Navigation Drawer 编写了一个 android 应用(使用 android.support.v4.widget.DrawerLayout 和 android.support.v4.app.ActionBarDrawerToggle)

这是带有自定义导航指示器(图标)的屏幕截图,它是垂直居中的。

更改操作栏高度后,导航指示器(图标)未垂直居中。

我在 style.xml 中更改操作栏高度

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="android:actionBarStyle">@style/CustomActionBar</item>
    <item name="actionBarStyle">@style/CustomActionBar</item>
</style>

<!-- ActionBar styles -->
<style name="CustomActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@drawable/actionbar_bar</item>
    <item name="android:height">@dimen/action_bar_height</item>
    <item name="android:actionBarSize">@dimen/action_bar_height</item>

    <!-- Support library compatibility -->
    <item name="background">@drawable/actionbar_bar</item>
    <item name="height">@dimen/action_bar_height</item>
    <item name="actionBarSize">@dimen/action_bar_height</item>
</style>

如何将导航指示器(图标)置于垂直居中。

已编辑:

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

    mContext = this;

    final ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME);
    actionBar.setCustomView(R.layout.layout_actionbar_login);

    initView();

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
 


private void initView() 
    // DrawerLayout
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerToggle = createDrawerToggle();
    mDrawerLayout.setDrawerListener(mDrawerToggle);

    // ListView
    mDrawerListView = (ListView) findViewById(R.id.left_drawer);
    mDrawerAdapter = new DrawerAdapter(this, R.layout.drawer_item_layout, mDrawerList);
    mDrawerListView.setAdapter(mDrawerAdapter);
    mDrawerListView.setOnItemClickListener(new DrawerItemClickListener());



private ActionBarDrawerToggle createDrawerToggle() 
    ActionBarDrawerToggle drawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.light_menu_r, R.string.drawer_open, R.string.drawer_close) 
        @Override
        public void onDrawerOpened(View drawerView) 
            super.onDrawerOpened(drawerView);
            //invalidateOptionsMenu();
            super.onDrawerSlide(drawerView, 0);

            getDrawerToggleDelegate().setActionBarUpIndicator(mContext.getResources().getDrawable(R.drawable.dark_menu_r), R.string.settings);
        

        @Override
        public void onDrawerClosed(View drawerView) 
            super.onDrawerClosed(drawerView);
            //invalidateOptionsMenu();
            Log.d("Eric Eric", "hahaha");
            getDrawerToggleDelegate().setActionBarUpIndicator(mContext.getResources().getDrawable(R.drawable.light_menu_r), R.string.coupon_list);
        

        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) 
            super.onDrawerSlide(drawerView, 0);
        
    ;

    return drawerToggle;

谢谢。 埃里克

【问题讨论】:

嘿,你有没有找到解决方案?我遇到了同样的问题。 【参考方案1】:

您的应用主题是“Theme.AppCompat.Light.DarkActionBar”,而您的小部件主题是“Widget.AppCompat.Light.ActionBar.Solid.Inverse”这就是发生这种错位的原因。

【讨论】:

不,绝对不是【参考方案2】:

老话题,但我最近遇到了这个问题。经过数小时试图弄清楚这是工具栏、操作栏、actionbardrawertoggle 还是指示器可绘制本身的问题,结果发现解决方案非常简单。

您只需按照 Google 开发者控制台中的说明在工具栏中指定一个最小高度。 (http://developer.android.com/reference/android/widget/Toolbar.html)

解决方案:

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_
android:layout_
android:minHeight="@dimen/toolbar_height" ... />

【讨论】:

以上是关于Android:更改操作栏高度后,导航指示器(图标)不垂直居中的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中更改汉堡图标(导航抽屉)

如何更改Android中的汉堡包图标(导航抽屉)

当用户查看页面的特定部分时如何更改导航栏图标的颜色

更改 Material You 底部导航栏处于活动和非活动状态的图标

png中的图标用于底部导航栏android

更改导航栏背景颜色后,self.view 的 y 位置发生更改