0
@Override
public void onConfigurationChanged(Configuration newConfig) {
   super.onConfigurationChanged(newConfig);


   // Checks whether a hardware keyboard is available
   if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
       Toast.makeText(this, "keyboard visible", Toast.LENGTH_SHORT).show();
   } else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
       Toast.makeText(this, "keyboard hidden", Toast.LENGTH_SHORT).show();
   }
}

実行時にキーボードの可視性を検出したい。上記のコードは Android 2.2 では機能しません。キーボード イベント リスナーのソリューションが必要です。

manifest.xml に configChanges プロパティも追加しました

4

1 に答える 1

0

これは Android の問題点です。カスタム ビューをルート ビューとして使用し、onSizeChanged() + レイアウト変更の違いを使用してカスタム コールバックを呼び出すリスナーを適用します。

例のビュー。

/**
 * Subclass of RelativeLayout that adds a size changed listener.  This is useful for determining
 * when the onscreen keyboard has popped up and resized the window
 *
 */
public class SCRelativeLayout extends RelativeLayout {
  public interface OnSizeChangedListener {
    public void onSizeChanged(int w, int h, int oldw, int oldh);
  }

  private OnSizeChangedListener mOnSizeChangedListener;

  public SCRelativeLayout(Context context) {
    super(context);
  }

  public SCRelativeLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public SCRelativeLayout(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
  }

  @Override
  protected void onSizeChanged (int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);

    if (mOnSizeChangedListener != null) {
      mOnSizeChangedListener.onSizeChanged(w, h, oldw, oldh);
    }
  }

  public void setOnSizeChangedListener(OnSizeChangedListener listener) {
    mOnSizeChangedListener = listener;
  }
}
于 2012-09-08T08:14:34.380 に答える