i am having array of horizontal manager which consist of editfield,dropdown,label and button,i place all these array of horizontalfield manager in one vertical manager to make a table like grid like strcture.I can make it but i want to do that if we get focus on horizontal manager then all components in the horizontal manager should give a same color i dont know how to make this .if you have any idea pls share with me.If u can provide me some code snippet. regards, s.kumaran.
+2
A:
If you in 4.5 and lower, extend HorizontalFieldManager, add color property, use it on paint event and invalidate on focus change:
class Scr extends MainScreen {
HorizontalFieldManager mMainPanel;
VerticalFieldManager mVerticalPanel;
public Scr() {
mMainPanel = new HorizontalFieldManager();
add(mMainPanel);
mVerticalPanel = new VerticalFieldManager(USE_ALL_HEIGHT
| USE_ALL_WIDTH);
mMainPanel.add(mVerticalPanel);
for (int i = 0; i < 5; i++) {
HFMHighlight hfm = new HFMHighlight();
hfm.setHightlightColor(Color.GRAY);
hfm.add(new LabelField("Label " + i, FIELD_LEFT));
hfm.add(new BasicEditField(FIELD_RIGHT));
mVerticalPanel.add(hfm);
}
}
}
class HFMHighlight extends HorizontalFieldManager {
int mHColor = -1;
public void setHightlightColor(int color) {
mHColor = color;
}
protected void onFocus(int direction) {
invalidate();
super.onFocus(direction);
}
protected void onUnfocus() {
invalidate();
super.onUnfocus();
}
public void paint(Graphics graphics) {
if (-1 != mHColor && isFocus()) {
graphics.setBackgroundColor(mHColor);
graphics.clear();
}
super.paint(graphics);
}
}
If you in 4.6 and higher, use setBackground for VISUAL STATE FOCUS:
class Scr extends MainScreen {
HorizontalFieldManager mMainPanel;
VerticalFieldManager mVerticalPanel;
public Scr() {
RadioInfo.isDataServiceOperational();
CoverageInfo.isOutOfCoverage();
WLANInfo.getWLANState();
mMainPanel = new HorizontalFieldManager();
add(mMainPanel);
mVerticalPanel = new VerticalFieldManager(USE_ALL_HEIGHT
| USE_ALL_WIDTH);
mMainPanel.add(mVerticalPanel);
for (int i = 0; i < 5; i++) {
HFMHighlight hfm = new HFMHighlight(Color.GRAY);
hfm.add(new LabelField("Label " + i, FIELD_LEFT));
hfm.add(new BasicEditField(FIELD_RIGHT));
mVerticalPanel.add(hfm);
}
}
}
class HFMHighlight extends HorizontalFieldManager {
public HFMHighlight(int color) {
Background focusedBG = BackgroundFactory.createSolidBackground(color);
setBackground(VISUAL_STATE_FOCUS, focusedBG);
}
protected void onFocus(int direction) {
invalidate();
super.onFocus(direction);
}
protected void onUnfocus() {
invalidate();
super.onUnfocus();
}
}
And here is a case if you want to highlight all controls (button, checkbox, choice and edit) if horizontal manager is focused:
class Scr extends MainScreen {
HorizontalFieldManager mMainPanel;
VerticalFieldManager mVerticalPanel;
public Scr() {
mMainPanel = new HorizontalFieldManager();
add(mMainPanel);
mVerticalPanel = new VerticalFieldManager(USE_ALL_HEIGHT
| USE_ALL_WIDTH);
mMainPanel.add(mVerticalPanel);
for (int i = 0; i < 5; i++) {
HHorizontalFieldManager hfm = new HHorizontalFieldManager();
mVerticalPanel.add(hfm);
HButtonField button = new HButtonField("btn");
button.setHightlightColor(Color.GRAY);
hfm.add(button);
HCheckboxField checkbox = new HCheckboxField("chk box", false);
checkbox.setHightlightColor(Color.GRAY);
hfm.add(checkbox);
String choiceItems[] = { "one", "two", "three" };
HObjectChoiceField dropdown = new HObjectChoiceField("choice",
choiceItems);
dropdown.setHightlightColor(Color.GRAY);
hfm.add(dropdown);
HEditField edit = new HEditField("edit", "___");
edit.setHightlightColor(Color.GRAY);
hfm.add(edit);
}
}
}
class HHorizontalFieldManager extends HorizontalFieldManager {
public HHorizontalFieldManager() {
super();
}
public HHorizontalFieldManager(long style) {
super(style);
}
protected void onFocus(int direction) {
invalidate();
super.onFocus(direction);
}
protected void onUnfocus() {
invalidate();
super.onUnfocus();
}
public void paint(Graphics graphics) {
if (isFocus()) {
graphics.setBackgroundColor(Color.GRAY);
graphics.clear();
}
super.paint(graphics);
}
}
class HEditField extends EditField {
public HEditField() {
super();
}
public HEditField(long style) {
super(style);
}
public HEditField(String label, String initialValue, int maxNumChars,
long style) {
super(label, initialValue, maxNumChars, style);
}
public HEditField(String label, String initialValue) {
super(label, initialValue);
}
private int mHColor = -1;
public void setHightlightColor(int color) {
mHColor = color;
}
protected void onFocus(int direction) {
invalidate();
super.onFocus(direction);
}
protected void onUnfocus() {
invalidate();
super.onUnfocus();
}
public void paint(Graphics graphics) {
if (-1 != mHColor && getManager().isFocus()) {
graphics.setBackgroundColor(mHColor);
graphics.clear();
}
super.paint(graphics);
}
}
class HButtonField extends ButtonField {
public HButtonField() {
super();
}
public HButtonField(long style) {
super(style);
}
public HButtonField(String label, long style) {
super(label, style);
}
public HButtonField(String label) {
super(label);
}
private int mHColor = -1;
public void setHightlightColor(int color) {
mHColor = color;
}
protected void onFocus(int direction) {
invalidate();
super.onFocus(direction);
}
protected void onUnfocus() {
invalidate();
super.onUnfocus();
}
public void paint(Graphics graphics) {
if (-1 != mHColor && getManager().isFocus()) {
graphics.setBackgroundColor(mHColor);
graphics.clear();
}
super.paint(graphics);
}
}
class HCheckboxField extends CheckboxField {
public HCheckboxField() {
super();
}
public HCheckboxField(String label, boolean checked, long style) {
super(label, checked, style);
}
public HCheckboxField(String label, boolean checked) {
super(label, checked);
}
private int mHColor = -1;
public void setHightlightColor(int color) {
mHColor = color;
}
protected void onFocus(int direction) {
invalidate();
super.onFocus(direction);
}
protected void onUnfocus() {
invalidate();
super.onUnfocus();
}
public void paint(Graphics graphics) {
if (-1 != mHColor && getManager().isFocus()) {
graphics.setBackgroundColor(mHColor);
graphics.clear();
}
super.paint(graphics);
}
}
class HObjectChoiceField extends ObjectChoiceField {
public HObjectChoiceField() {
super();
}
public HObjectChoiceField(String label, Object[] choices,
int initialIndex, long style) {
super(label, choices, initialIndex, style);
}
public HObjectChoiceField(String label, Object[] choices,
int initialIndex) {
super(label, choices, initialIndex);
}
public HObjectChoiceField(String label, Object[] choices,
Object initialObject) {
super(label, choices, initialObject);
}
public HObjectChoiceField(String label, Object[] choices) {
super(label, choices);
}
private int mHColor = -1;
public void setHightlightColor(int color) {
mHColor = color;
}
protected void onFocus(int direction) {
invalidate();
super.onFocus(direction);
}
protected void onUnfocus() {
invalidate();
super.onUnfocus();
}
public void paint(Graphics graphics) {
if (-1 != mHColor && getManager().isFocus()) {
graphics.setBackgroundColor(mHColor);
graphics.clear();
}
super.paint(graphics);
}
}
Max Gontar
2009-09-01 11:42:18
Hi thanks for ur help but when i m using my code i can only change the horizontal manager color no components color is changed i want to change all components color also to be changed when focus gain to the horizontal manager.
Kumar
2009-09-01 12:08:41
You're welcome! I think, it's good enough to color manager only. But if you want to color every field inside, you will have to tell me what exactly fields are you using? The thing is we'll have to do what I've done to every field inside the manager. So we'll have to implement own class for every kind of field.
Max Gontar
2009-09-01 12:29:04
I m using editfield,buttonfield,dropdownfield and checkboxfield these are the fields i used inside the manager.
Kumar
2009-09-01 12:56:32