【问题标题】:Toolbar back arrow icon not align with Title工具栏后退箭头图标与标题不对齐
【发布时间】:2015-12-21 10:54:50
【问题描述】:

我正在尝试将工具栏的后退箭头图标与工具栏标题对齐,但没有找到任何有用的方法来做到这一点,

默认情况下,如果您要设置字幕和标题文本,则返回箭头图标将垂直对齐,例如默认设置在中间,

我知道我可以通过在工具栏中提供自定义布局来做到这一点,但我想知道是否有任何默认方法或行为?

 /**
     * For setting up actionbar/Toolbar
     */
    private void  setUpToolbar(){

        // Set a toolbar to replace the action bar.
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);

        //Enabling up back-up arrow
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);

        //Callback of up button pressed
        //mToolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //What to do on back clicked
            }
        });

        //setting up toolbar text
        getSupportActionBar().setTitle(getToolbarTitle());
        //mToolbar.setTitleTextColor(getResources().getColor(R.color.textColorPrimary));
        getSupportActionBar().setSubtitle(getToolbarSubTitle());
        //mToolbar.setSubtitleTextColor(getResources().getColor(R.color.textColorPrimary));

        //set back arrow icon in middle
        View navButtonView = getNavButtonView(mToolbar);

        if(navButtonView != null) {
            Toolbar.LayoutParams lp = (Toolbar.LayoutParams) navButtonView.getLayoutParams();
            lp.gravity = Gravity.TOP;
            navButtonView.setLayoutParams(lp);
        }

    }

【问题讨论】:

    标签: android android-actionbar toolbar


    【解决方案1】:

    Toolbar 类不直接公开其子 Views 或其属性,但您可以使用反射获得对该 View 的引用。

    private View getNavButtonView(Toolbar toolbar) {
        try {
            Class<?> toolbarClass = Toolbar.class;
            Field navButtonField = toolbarClass.getDeclaredField("mNavButtonView");
            navButtonField.setAccessible(true);
            View navButtonView = (View) navButtonField.get(toolbar);
    
            return navButtonView;
        }
        catch (NoSuchFieldException | IllegalAccessException e) {
            e.printStackTrace();
        }
    
        return null;
    }
    

    View 创建完成后,您可以获得对它的引用,并根据需要调整其LayoutParams

    View navButtonView = getNavButtonView(toolbar);
    
    if(navButtonView != null) {
        Toolbar.LayoutParams lp = (Toolbar.LayoutParams) navButtonView.getLayoutParams();
        lp.gravity = Gravity.TOP;
        navButtonView.setLayoutParams(lp);
    }
    

    【讨论】:

    • 感谢您的回答,但后退箭头仍居中 :(
    • 您能发布更多关于您的设置的信息吗?就像您的布局和 Toolbar 初始化一样。我会看看我是否可以让它适合你的情况。另外,您运行的是哪个 Android 版本。
    • 嗯,你的代码对我有用。在您致电setUpToolbar() 后,您是否正在使用Toolbar 或支持ActionBar?喜欢创建ActionBarDrawerToggle?另外,您运行的是哪个 Android 版本?
    • 不,我没有用工具栏做任何事情,而且我没有使用 ActionBarDrawerTogglem,我现在使用棒棒糖,但这应该适用于所有口味
    • 不,我没有用工具栏做任何事情,而且我没有使用 ActionBarDrawerTogglem,我现在使用棒棒糖,但这应该适用于所有口味
    【解决方案2】:

    如果您没有直接设置位置的选项,您也可以有另一个选项,此选项用于不同的自定义。 要自定义工具栏按钮,您应该制作自定义工具栏。我的意思是而不是使用

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);

    您可以在工具栏中添加自己的按钮并根据需要对齐位置。

    <android.support.v7.widget.Toolbar
       android:id="@+id/toolbar"
       android:layout_width="match_parent"
       android:layout_height="?attr/actionBarSize"
       android:background="?attr/colorPrimary"
       android:fitsSystemWindows="true"
       android:minHeight="?attr/actionBarSize"
       app:popupTheme="@style/AppTheme.PopupOverlay">
     
       <Button
          android:id="@+id/back_button"
          ....
          />
       <TextView
          android:id="@+id/title"
          ....
          />
    </android.support.v7.widget.Toolbar>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 2015-12-02
      • 2016-04-07
      • 1970-01-01
      相关资源
      最近更新 更多