3

OS 4.5 以降のデバイスで動作するはずのアプリを開発しています。私のアプリケーションでは、仮想キーボードがいつ表示または非表示になるかを知る必要があります。仮想キーボードが表示されている場合、ユーザーが入力することになっているテキスト領域がキーボードの後ろにあるためです。仮想キーボードの状態が変化した瞬間を判断できれば、画面を更新してテキスト領域を上部に移動できます。

それを行う方法はありますか?

編集:次のボタンはステータス パネルにあります。編集フィールドは、カスタム水平フィールド マネージャーにあります。

ここに画像の説明を入力

編集フィールドに触れると、仮想キーボードが開き、編集フィールドの内容が失われます。

ここに画像の説明を入力

4

5 に答える 5

2

同じコードでそれを行う方法はありません。コードを2つに分割する必要があります。それらの1つは4.5-4.7を処理します。もう1つは4.7以降を処理します。

画面が連続スレッドで変化するかどうかをチェックする必要がある4.7(およびそれ以降)のコードにキーボードリスナーを追加できます。それは良くありませんが、うまくいくことができます。

于 2011-07-04T21:49:38.557 に答える
2

選択肢は 2 つあります。最初の選択肢の方が優れています。

  • キーボードを表示または非表示にして機能する不変条件を見つけます。画面レイアウト メソッドは、キーボードの表示状態が変更されたときに呼び出され、表示されているキーボードの垂直サイズが縮小されます。不変条件がそれを利用する場合は、画面レイアウト メソッドにロジックを実装するだけです。
    この場合、「次へ」ボタンを常に画面の下部に保持し、ユーザー名のテキストボックスを残りのスペースの中央に配置するレイアウト方法をお勧めします。

  • 条件付きコンパイルを使用して、OS 4.7 以降で VirtualKeyboard クラスを参照するコードを記述できるようにします。そのコードは、古い BlackBerry リリースでは廃止されます。7 月 4 日: 条件付きコンパイルとは、BlackBerry プリプロセッサを使用することを意味します。

于 2011-07-02T01:07:27.287 に答える
1

かなりやりがいのある仕事です。ただし、仮想キーボードの状態を判断するための直接的な API または方法はないと思います。唯一の方法は、メソッドをオーバーライドしてsetLayout()、画面の幅と高さが変更されたかどうかを判断することです。また、画面の GUI レイアウトも確認する必要があります。

于 2011-06-28T18:19:33.717 に答える
1

これにはイベントはありませんが、仮想キーボードの現在の状態を判断し、必要な状態を設定できます。例えば隠す

    if(VirtualKeyboard.isSupported() == true){
        VirtualKeyboard keyboard = getVirtualKeyboard();

        if(keyboard != null)
            keyboard.setVisibility(VirtualKeyboard.HIDE);
    }
于 2011-06-09T09:59:53.870 に答える
0

VERTICAL_SCROLLを保持するマネージャのスタイルを設定するEditFieldか、スタイル付きの画面を使用できますVERTICAL_SCROLL。これにより、EditFieldキーボードが表示されたときに自動的にスクロールします。

次のクラスを使用してください。おそらくこれが役に立ちます。

class FocusableManager extends MainScreen implements FocusChangeListener
{
    private BasicEditField b;
    public FocusableManager() 
    {
        VerticalFieldManager vfm=new VerticalFieldManager(VERTICAL_SCROLL);
        vfm.add(new ButtonField("first"));
        b=new BasicEditField();
        b.setFocusListener(this);
        vfm.add(b);
        vfm.add(new ButtonField("second"));
        vfm.setMargin(250,0,0,0);
        add(vfm);
    }
    public void focusChanged(Field field, int eventType)
    {
        if(field==b)
        {
            if(eventType==1)//when edit field gain focus
            {
                VirtualKeyboard virtKbd;
                virtKbd =  getScreen().getVirtualKeyboard();
                virtKbd.setVisibility(VirtualKeyboard.SHOW_FORCE);
            }
            else if(eventType==3)//when edit field lost focus
            {
                VirtualKeyboard virtKbd;
                virtKbd =  getScreen().getVirtualKeyboard();
                virtKbd.setVisibility(VirtualKeyboard.HIDE_FORCE);
            }
        }
    }
}
于 2011-06-28T08:28:39.890 に答える