0

ビットマップとラベルフィールドをそれぞれ含む水平フィールドの配列があります。これまでのところ、行全体がクリック可能になっているはずですが、フォーカスの色を適切に設定するにはどうすればよいですか? 現時点では、onFocus および onUnfocus 関数は完全に無視されています。

これは私の配列の定義です:

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]);
4

1 に答える 1

0

申し訳ありませんが、私は Stackoverflow を初めて使用するため、昨日自分の投稿にコメントできませんでした ;) 解決方法は次のとおりです。

HFM から onFocus() と onUnfocus() を削除し、ペイント メソッドで背景色を設定して、フォーカス時に行全体の色が変更されるようにしました。

 protected void paint(Graphics graphics) {

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

また、より複雑な背景 (つまり、グラデーションを使用) を設定する場合は、 setBackground(int visual, Background background) メソッドも使用できることがわかりました。

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

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

そのようなsetBackground関数を使用する場合は、必ずペイントメソッドを削除してください!

于 2013-03-19T15:26:51.733 に答える