2014-11-18 1 views
1

Я пытаюсь изменить атрибут style «colorControlNormal» моего прикладного программного обеспечения и во время выполнения, но у меня не было никаких результатов.android - Изменить цвет иконок в гамбургерах/в обратном направлении во время выполнения

Это свойство, которое будет оттенять гамбургер & назад значки новой панели инструментов. Кроме того, я использую библиотеку совместимости v7.

Я слышал, что мы не можем изменить тему приложения во время выполнения, но я ищу ответ, даже если это не так чисто.

Большое вам спасибо!

Edit:

Я Жюст полагал, что Gmail делает то, что я хочу, когда вы нажимаете на значок поиска значок белый гамбургер превратится обратно серый.

Жду еще ...

+0

Вы можете поделиться тем, что вы пробовали? – Bacs

+0

Вы можете изменить тему во время выполнения, только если вы делаете это до 'setContentView()' – pdegand59

+0

, вы можете изменить цвет только в том случае, если вы используете настраиваемое представление для панели действий. – Martin

ответ

0

Я провел один день, играл с различной реализацией. Так что мое мнение, лучший способ сделать это, чтобы скопировать папку DrawerArrowDrawable из библиотеки AppCompat v7.

https://gist.github.com/IstiN/5d542355935fd7f0f357 - посмотрите на код с некоторой оптимизации

, чем вы можете использовать его в своей основной деятельности с кодом ниже

 DrawerArrowDrawable drawable = new DrawerArrowDrawable(this, this); 
     ImageView menuButton = (ImageView) findViewById(R.id.arrow); 
     menuButton.setImageDrawable(drawable); 
     menuButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       ((DrawerLayout)findViewById(R.id.drawer)).openDrawer(Gravity.START); 
      } 
     }); 

при запуске нового фрагмента, вам нужно создать еще один посмотреть на то же место и добавить второй код в ваш фрагмент

private DrawerArrowDrawable mArrowDrawable; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     mArrowDrawable = new DrawerArrowDrawable(getActivity(), getActivity()); 
     ImageView topButton = (ImageView) view.findViewById(R.id.arrow); 
     topButton.setImageDrawable(mArrowDrawable); 
     topButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       closeSearch(); 
      } 
     }); 

     //run animation from hamburger to arrow 
     animate(0, 1, null); 
     .... 

    private void animate(int startValue, int endvalue, Animator.AnimatorListener listener) { 
     ValueAnimator anim = ValueAnimator.ofFloat(startValue, endvalue); 
     anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
      @Override 
      public void onAnimationUpdate(ValueAnimator valueAnimator) { 
       float slideOffset = (Float) valueAnimator.getAnimatedValue(); 
       mArrowDrawable.setProgress(slideOffset); 
      } 
     }); 
     anim.setInterpolator(new DecelerateInterpolator()); 
     anim.setDuration(300); 
     if (listener != null) { 
      anim.addListener(listener); 
     } 
     anim.start(); 
    } 

сделать анимацию из стрелки, чтобы гамбургер обрабатывать кнопку назад и выполнить код

animate(1, 0, null); 

Вы также должны ждать в своем фрагменте, пока анимация не закончится, но это еще вопросы.

Если у вас есть вопросы, задайте вопросы.

 Смежные вопросы

  • Нет связанных вопросов^_^