2013-05-23 3 views
0

Я пытаюсь создать кнопки, похожие на значки в панели действий, то есть прозрачные изображения, которые меняют цвет фона при нажатии.Button Button drawable issue

Эти условия я хотел бы, чтобы удовлетворить:

  1. фона меняет цвет мыши
  2. Содержит небольшой прямоугольник формы в центре
  3. Прямоугольник может изменить цвет программно

Я попытался использовать Drawable, чтобы представить прямоугольник, а затем установить его в качестве фона кнопки, но он был расширен до краев кнопки, и поэтому re не было цвета фона для изменения при нажатии (я смог использовать drawable.setColorFilter() и button.setBackground (drawable), чтобы изменить его цвет, однако). Сжатие кнопки также уменьшает контактную мишень.

Я также пробовал использовать StateListDrawable, содержащий две формы прямоугольника, фон и внутренний прямоугольник, поэтому на state_pressed цвет фона изменит цвет. Однако передний прямоугольник снова растянулся и полностью покрыл прямоугольник фона.

Какой метод может достичь моих условий? Благодарю.

ответ

0

This talk from Google IO 2013 на дизайне Android UI Никто Butcher и Роман Нурик помог решить эту проблему.

XML-атрибут style="?android:borderlessButtonStyle" может быть установлен на ImageButton (или даже просто Button), чтобы придать ему прозрачный фон, который загорается в стандартном Холо синего цвета на ощупь. По словам Романа Нурика, этот атрибут обеспечивает стандартный стиль «все бесплатно».

Я создал ImageButton содержащий этот безграничный атрибут кнопки в моем файле layout.xml, то я создал в Java моей цветной Drawable и поместить его внутри кнопки, используя myImageButton.setImageDrawable(myColouredDrawable);, чтобы уместить все три мои условия.

Редактировать июля 2013: Довести картину ActionBar в старых версиях Android, используя ActionBarSherlock Jake Wharton, используйте style="@style/Widget.Sherlock.ActionButton", или при использовании библиотеки поддержки ActionBarCompat, используйте style="@style/Widget.AppCompat.ActionButton"

Обновление мая 2017 года : Для ImageViews (я считаю, что это действительно ImageViewCompat) Я использую android:background="?android:attr/selectableItemBackground" на Jellybean и далее.

0

Есть 2 изображения для состояния кнопок и использовать это:

 boolean clicked = false 
     Button btn = (Buttton)findViewById(R.id.button); 

     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) 
      { 
       if (clicked) 
       { 
        clicked = false; 
        btn.setBackgroundResource(R.drawable.button_image_on); 
       } 

       else 
       { 
        clicked = true; 
        btn.setBackgroundResource(R.drawable.button_image_off); 
       } 
      } 
     }); 
+0

Но каждая кнопка содержит прямоугольник, который может быть любого цвета (определяется пользователем), поэтому, если я не понимаю, это не сработает для меня, поскольку вы по существу предлагаете использовать onClick и onRelease, которые на самом деле не адресуют проблема цветных прямоугольников. – Ween