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

时间:2015-03-18 03:39:35

标签: android android-actionbar navigation-drawer

我用导航抽屉写一个Android应用程序(使用android.support.v4.widget.DrawerLayout和android.support.v4.app.ActionBarDrawerToggle)

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

更改操作栏高度后,导航指示器(图标)不会居中垂直。 enter image description here

我在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;
}

感谢。 埃里克

2 个答案:

答案 0 :(得分:0)

您的应用主题是&#34; Theme.AppCompat.Light.DarkActionBar&#34;你的小部件主题是&#34; Widget.AppCompat.Light.ActionBar.Solid.Inverse&#34;这就是为什么会出现这种错位的原因。

答案 1 :(得分:0)

旧主题,但我最近遇到了这个问题。经过几个小时的尝试来判断这是否是工具栏,动作栏,动作标记或指示器本身的问题,结果证明解决方案非常简单。

您只需在工具栏中指定最小高度,如Google开发者控制台中所述。 (http://developer.android.com/reference/android/widget/Toolbar.html

解决方案:

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