使用setTitle后,Action Bar搞砸了

时间:2015-07-25 07:44:33

标签: android android-actionbar

我正在尝试在活动中设置actionBar的标题。我在一个活动中有3个布局视图。每个视图布局显示付款流程的不同状态。现在我设置了标题,在一个阶段,操作栏背景搞砸了。我想知道为什么。

如果我注释掉以下行,就不会发生这种情况。

onClick() {
....
    getActionBar().setTitle("Customer Payment");
....

在活动的onCreate中,我运行以下命令来设置操作栏背景。

private void setupActionBar() {
    Drawable backgroundColor;
    switch (getIntent().getIntExtra(God.HOME_SCREEN_OPERATION,
            God.INVALID_ID)) {
    case God.OPERATION_RECHARGE:
        getActionBar().setIcon(R.drawable.icon_mobile);
        backgroundColor = new ColorDrawable(getResources().getColor(
                R.color.RechargeBackgroundColor));
        getActionBar().setBackgroundDrawable(backgroundColor);
        mobileServiceSummary.setVisibility(View.VISIBLE);
        serviceInfoLayout.setBackground(backgroundColor);
        serviceInfoIcon.setImageResource(R.drawable.icon_mobile);
        break;
    case God.OPERATION_FACILITY:
        getActionBar().setIcon(R.drawable.icon_facility);
        backgroundColor = new ColorDrawable(getResources().getColor(
                R.color.ToiletBackgroundColor));
        getActionBar().setBackgroundDrawable(backgroundColor);
        facilityServiceSummary.setVisibility(View.VISIBLE);
        serviceInfoLayout.setBackground(backgroundColor);
        serviceInfoIcon.setImageResource(R.drawable.icon_facility);
        break;
    case God.OPERATION_DTH:
        getActionBar().setIcon(R.drawable.icon_dth);
        backgroundColor = new ColorDrawable(getResources().getColor(
                R.color.DthBackgroundColor));
        getActionBar().setBackgroundDrawable(backgroundColor);
        dthServiceSummary.setVisibility(View.VISIBLE);
        serviceInfoLayout.setBackground(backgroundColor);
        serviceInfoIcon.setImageResource(R.drawable.icon_dth);
        break;
    // case R.id.mseb_payment:
    // getActionBar().setIcon(R.drawable.icon_mseb);
    // msebServiceSummary.setVisibility(View.VISIBLE) ;
    // break;
    default:
        break;
    }
}

更多代码..

private void enableCustomerPayment() {
        getActionBar().setTitle("Customer Payment");
        getActionBar().setSubtitle(
                "Pincode of customer needed for payment permission.");
        getActionBar().setDisplayHomeAsUpEnabled(false);
        getActionBar().setHomeButtonEnabled(false);
        getActionBar().setDisplayShowCustomEnabled(false) ;
        getActionBar().setDisplayUseLogoEnabled(false) ;

        findViewById(R.id.next_button).setVisibility(View.GONE);
        findViewById(R.id.payment_button).setVisibility(View.VISIBLE);
        findViewById(R.id.done_button).setVisibility(View.GONE);

        operatorLockLayout.setVisibility(View.GONE);
        customerLoginAndConfirmationLayout.setVisibility(View.VISIBLE);
        customerPaymentLayout.setVisibility(View.GONE);
        customerConfirmLayout.setVisibility(View.VISIBLE);
        // customerConfirmSpaceLayout.setVisibility(View.VISIBLE);
    }

    private void enablePaymentConfirmation() {
        getActionBar().setTitle("Payment Confirmation");
        getActionBar().setSubtitle("Thankyou for your payment.");
        setupActionBar();
        getActionBar().setDisplayHomeAsUpEnabled(false);
        getActionBar().setHomeButtonEnabled(false);

        findViewById(R.id.next_button).setVisibility(View.GONE);
        findViewById(R.id.payment_button).setVisibility(View.GONE);
        findViewById(R.id.done_button).setVisibility(View.VISIBLE);

        operatorLockLayout.setVisibility(View.GONE);
        customerLoginAndConfirmationLayout.setVisibility(View.VISIBLE);
        customerPaymentLayout.setVisibility(View.VISIBLE);
        customerConfirmLayout.setVisibility(View.GONE);
        // customerConfirmSpaceLayout.setVisibility(View.GONE);
    }

在styles.xml中,颜色是这样设置的。而且颜色也很好。

<color name="NewWalletBackgroundColor">#FFD54E</color>
<color name="BalanceBackgroundColor">#FFD54E</color>
<color name="DepositBackgroundColor">#FFD54E</color>
<color name="MsebBackgroundColor">#E57272</color>
<color name="RechargeBackgroundColor">#81C784</color>
<color name="DthBackgroundColor">#AB6BAC</color>
<color name="ToiletBackgroundColor">#56C0ED</color>

操作栏搞砸了

enter image description here

这里,Action Bar背景是完全蓝色的。这就是我的期望。

enter image description here

修改

  

似乎高度存在问题,它以96开始,当它搞砸了高度为0时。

我现在如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

在我看来,默认操作栏期望操作栏右侧的导航抽屉图标的图标。我认为你所谈论的空间上有一个透明的按钮。即使您为此活动设置抽屉,如果您使用默认方法设置操作栏,它也会在那里。首先尝试这些步骤

  setDrawerIndicatorEnabled(false).
  actionBar.setDisplayHomeAsUpEnabled(false) 
  actionBar.setHomeButtonEnabled(false); 

如果不起作用,请转到自定义操作栏。

做这样的事情。您没有尝试设置自定义视图(纯文本视图的宽度设置为与父级匹配),而不是使用默认操作栏。

       this.getActionBar().setDisplayShowCustomEnabled(true);
       this.getActionBar().setDisplayShowTitleEnabled(false);

       LayoutInflater inflator = LayoutInflater.from(this);
       View v = inflator.inflate(R.layout.titleview, null);

      //if you need to customize anything else about the text, do it here.
      ((TextView)v.findViewById(R.id.title)).setText(this.getTitle());

      //assign the view to the actionbar
      this.getActionBar().setCustomView(v);

答案 1 :(得分:0)

我从您的问题中假设enablePaymentConfirmation正在使用getActionBar().setTitle("Customer Payment");存在setupActionBar()以及何时被注释掉。如果它也在播放,那么我需要改变我的答案。

没有看到你的xml让它更加猜测,但从我可以看到,我会建议如下 1。 在您的活动中致电您OnCreate enableCustomerPayment()。这样就可以在活动期间进行设置。如果您在enablePaymentConfirmation()之前拨打 getActionBar().setDisplayHomeAsUpEnabled(false); getActionBar().setHomeButtonEnabled(false); ,则不会在OnCreate中调用它,操作栏设置将不会被调用。

2。 除非您未显示以下代码更改,否则这些更改可以放在您的setupActionbar中:

getActionBar().setDisplayShowCustomEnabled(false) ;
getActionBar().setDisplayUseLogoEnabled(false) ;

3。 以下是您显示的两种方法对ActionBar的两处更改:

setDisplayShowCustomEnabled

4。 我不确定您为什么只在enableCustomerPayment()中设置0.065000 1.000000 。我看不到您使用的是customView。 - 如果没有,也可以进入您的设置。 - 否则,您需要在所有方法中使用更改来调用它。 - 如果您在某些地方而不是其他地方使用操作栏的自定义视图,则会影响其显示方式。特别是如果你没有管理bool变化。

5。 徽标也一样,我不知道你在哪里使用它。所以我会把它放在设置中。如果你将它用于其他人并且你没有正确设置你的xml,那么可能就是为什么背景颜色有所不同。

希望这会有所帮助。随意发布更多信息,xml会很好。