2013-03-18 4 views
0

У меня есть массив горизонтальных полей, который содержит растровое изображение и labelfield каждый. Целая строка должна быть интерактивной, которая работает до сих пор, но как я могу правильно настроить цвет фокуса? В настоящий момент функции onFocus и onUnfocus полностью игнорируются.Установить цвет фокуса на clickable массив HorizontalFieldManager в BlackBerry

Это определение моего массива:

for (int i = 0; i < listSize; i++) { 
     logInDetailManager[i] = new HorizontalFieldManager(
       Manager.USE_ALL_WIDTH | Field.FOCUSABLE) { 

      protected void onFocus(int direction) { 
       super.onFocus(direction); 
       background_color = Color.RED; 
       invalidate(); 
      } 

      protected void onUnfocus() { 
       invalidate(); 
       background_color = Color.GREEN; 
      } 

И это, как я добавить свои горизонтальные поля:

logInDetailManager[i].setChangeListener(this); 
logInDetailManager[i].add(dummyIcon[i]); 
logInDetailManager[i].add(new LabelField("hello")); 
logInDetailManager[i].add(new NullField(Field.FOCUSABLE)); 
add(logInDetailManager[i]); 
+0

Пожалуйста, добавьте свое решение ниже как ** ответ **, а не выше в области вопросов. Вы можете ** принять ** свой собственный ответ, чтобы сообщить нам, что вопрос был решен. Вы тоже получите некоторые очки. Благодарю. – Nate

ответ

0

К сожалению, я не мог комментарий к моей почте вчера, так как я 'm new to Stackoverflow;) Вот как я его решил:

Я удалил onFocus() и onUnfocus() из HFM и установил цвет фона в методе рисования, так что весь r вл цвет изменяется при фокусировке:

protected void paint(Graphics graphics) { 

     graphics.setBackgroundColor(isFocus() ? Color.RED : Color.GREEN); 
     graphics.clear(); 
     invalidate(); 
     super.paint(graphics); 
} 

Я также обнаружил, что если вы хотите установить более сложные фоны (т.е. с градиентом), вы также можете использовать setBackground (метод, ИНТ визуальный фон):

Background bg_focus = (BackgroundFactory 
     .createLinearGradientBackground(Color.GREEN, Color.LIGHTGREEN, 
     Color.LIGHTGREEN, Color.GREEN)); 

loginDetailManager[i].setBackground(VISUAL_STATE_FOCUS, bg_focus); 

Убедитесь, что вы удалите метод краски при использовании функции setBackground, как это!