2013-11-28 6 views
7

У меня есть набор из 9 папок в качестве фона моего макета. Однако я все же хочу предоставить обратную связь касания, используя selectableItemBackground attr.? Android: attr/selectableItemBackground с другим существующим фоном

Я попытался с помощью <layer-list> с 9patch и selectableItemBackground как android:drawable второго <item>, однако это не сработало.

Я также мог бы попытаться сделать селектор и наложить градиент, который тянет андроид для selectableItemBackground в list_selector_background_pressed.xml с <layer-list>. Но в 4.4 KitKat выбранного цвета фона на самом деле серый вместо синего в JellyBeans, так что я не могу жестко его :(

Там должен быть более простым способом, правильные ребята D:?

ответ

16

Я попытался с помощью с 9patch и selectableItemBackground как андроид: рисую второе, однако это не сработало

Да, рисует атрибут в слое-листе (или состояния список) делает. не принимайте значение attr. Вы увидите Resource.NotFoundException. Взгляд на исходный код LayerDrawable (или StateListDrawable) объясняет, почему: значение, которое вы предоставляете, считается идентификатором drawable.

Но, вы можете получить тему и конкретной платформы вытяжке для атрибута в коде:

// Attribute array 
int[] attrs = new int[] { android.R.attr.selectableItemBackground }; 

TypedArray a = getTheme().obtainStyledAttributes(attrs); 

// Drawable held by attribute 'selectableItemBackground' is at index '0'   
Drawable d = a.getDrawable(0); 

a.recycle(); 

Теперь вы можете создать LayerDrawable:

LayerDrawable ld = new LayerDrawable(new Drawable[] { 

         // Nine Path Drawable 
         getResources().getDrawable(R.drawable.Your_Nine_Path), 

         // Drawable from attribute 
         d }); 

// Set the background to 'ld' 
yourLayoutContainer.setBackground(ld); 

Вы также должны комплект yourLayoutContainer's clickable атрибут:

android:clickable="true" 
+0

Это выглядит интересно. Попытаюсь. –

+0

@JasonHu Извините, я не полностью просмотрел ваш комментарий, был по вызову. Если у вас есть вопрос, продолжайте. – Vikram

+0

Amazing. Работает как шарм. Первоначально я думал, что мне нужно будет сделать селектор для выбранных состояний (9patch только по умолчанию и LayerDrawable, если выбрано). Но кажется, что вы можете вернуться с помощью selectableItemBackground на самом деле сам селектор. Спасибо. –

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

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