Фон кнопки ImageButton сам по себе? Drawables с ума сошел? - PullRequest
1 голос
/ 25 января 2012

У меня проблема с тем, что фон ImageButton рисуется с помощью другого источника, который можно нарисовать. Я устанавливаю фон прозрачным, но в некоторых случаях он выбирает один из моих объектов рисования с именем bottom_shadow.9.png. Почему, почему!? Это чертовски странно ...

Я уже видел эту проблему раньше ... Некоторые пользователи моего приложения жаловались на эту проблему, и теперь я полон решимости разобраться с этим! Посмотрите ниже, что у меня сейчас есть. Любые советы или идеи помогут.

Значение цвета, которое я создал в файле values ​​/ colors.xml:

<color name="transparent">#00000000</color>

My ImageButton под моим одним XML-макетом под макетом /:

<ImageButton
    android:id="@+id/ibHelp"
    android:layout_width="wrap_content"
    android:layout_height="@dimen/settings_list_item_height"
    android:background="@color/transparent"
    android:contentDescription="@string/content_desc_more_information"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:scaleType="centerInside"
    android:src="@drawable/btn_help" />

Это то, что я вижу в сгенерированном файле R.java:

public static final class drawable {
  public static final int bottom_shadow=0x7f020000;
}

public static final class color {
  public static final int transparent=0x7f080009;
}

Вот как это должно выглядеть:

enter image description here

Вот что я вижу:

enter image description here

Ответы [ 5 ]

2 голосов
/ 02 февраля 2012

Я думаю, что вы столкнулись с той же проблемой, что и я, в другом проекте: при использовании прозрачного цвета # 00000000 на фоне Android фактически не сделает его прозрачным, а вместо этого использует фон, который можно нарисовать непосредственно под ним.

Не уверен, что то, что я только что сказал, понятно, но чтобы проверить, так ли это, я нашел быстрое и простое решение: не используйте # 00000000 в качестве прозрачного фона, а любой другой полностью прозрачный цвет: # 00FF0000 илидаже # 00F00000 должен сделать это.

См. проблему, которую я поднял в Google tracker: http://code.google.com/p/android/issues/detail?id=24653

2 голосов
/ 09 февраля 2012

Может ли это быть связано с этой проблемой?

http://code.google.com/p/android/issues/detail?id=20283

1 голос
/ 09 февраля 2012

Почему вы создаете свой собственный цвет, когда он встроен в Android.R.color? Я бы попробовал использовать:

android:background="@android:color/transparent"

Исправляет ли это вашу проблему или нет, она проще и чище.

0 голосов
/ 23 апреля 2012

Просто, чтобы добавить к этому, я видел действительно странное периодическое повреждение дисплея в моем прозрачном фоне ImageButton, потому что я определял элементы в моем селекторе фона следующим образом:

<item android:drawable="@android:color/transparent" android:state_focused="false" android:state_pressed="false" android:state_selected="true"/>

Это может , похоже, иногда срабатывает, но у меня определенно были случаи, когда кнопки ImageButtons рендерились бы со страшным полностью белым фоном вместо красивого прозрачного фона.

Обратите внимание, что я смешивал синтаксис android: drawable с ресурсом цвета. Правильный способ указать ресурс цвета - это либо атрибут android: color = "# FF00FF", либо дочерний элемент элемента, использующего элемент. Я искал долго и упорно, и в конце концов нашел этот пост.

0 голосов
/ 25 января 2012

Я думаю, вы хотите, чтобы фон вашей кнопки был какого-то цвета, но вы назначили src и цвет кнопки (в макете xml), что означает, что кнопка может использовать изображение src в качестве фона не чистый цвет. Я не знаю, сделал ли я это правильно.

...