安卓软键盘的右上角的那个收起键按钮是那个值呢?

安卓的键盘右上角的那个向下的箭头,点击了以后键盘关闭,点击那个按钮的值是那个呢?

4.点击软键盘自带的收起按钮(软键盘收起)

问题卡在此处,经过资料的搜查,还是么能找到软键盘收起按钮事件监听的办法,最后在stackoverflow网站找到了从布局高度的变化来判断软键盘的打开和收起事件。

import android.graphics.Rect;
import android.view.View;
import android.view.ViewTreeObserver;

import java.util.LinkedList;
import java.util.List;

public class SoftKeyboardStateHelper implements ViewTreeObserver.OnGlobalLayoutListener {

public interface SoftKeyboardStateListener {
    void onSoftKeyboardOpened(int keyboardHeightInPx);
    void onSoftKeyboardClosed();
}

private final List<SoftKeyboardStateListener> listeners = new LinkedList<SoftKeyboardStateListener>();
private final View activityRootView;
private int        lastSoftKeyboardHeightInPx;
private boolean    isSoftKeyboardOpened;

public SoftKeyboardStateHelper(View activityRootView) {
    this(activityRootView, false);
}

public SoftKeyboardStateHelper(View activityRootView, boolean isSoftKeyboardOpened) {
    this.activityRootView     = activityRootView;
    this.isSoftKeyboardOpened = isSoftKeyboardOpened;
    activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(this);
}

@Override
public void onGlobalLayout() {
    final Rect r = new Rect();
    //r will be populated with the coordinates of your view that area still visible.
    activityRootView.getWindowVisibleDisplayFrame(r);

    final int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
    if (!isSoftKeyboardOpened && heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
        isSoftKeyboardOpened = true;
        notifyOnSoftKeyboardOpened(heightDiff);
    } else if (isSoftKeyboardOpened && heightDiff < 100) {
        isSoftKeyboardOpened = false;
        notifyOnSoftKeyboardClosed();
    }
}

public void setIsSoftKeyboardOpened(boolean isSoftKeyboardOpened) {
    this.isSoftKeyboardOpened = isSoftKeyboardOpened;
}

public boolean isSoftKeyboardOpened() {
    return isSoftKeyboardOpened;
}

/**
 * Default value is zero (0)
 * @return last saved keyboard height in px
 */
public int getLastSoftKeyboardHeightInPx() {
    return lastSoftKeyboardHeightInPx;
}

public void addSoftKeyboardStateListener(SoftKeyboardStateListener listener) {
    listeners.add(listener);
}

public void removeSoftKeyboardStateListener(SoftKeyboardStateListener listener) {
    listeners.remove(listener);
}

private void notifyOnSoftKeyboardOpened(int keyboardHeightInPx) {
    this.lastSoftKeyboardHeightInPx = keyboardHeightInPx;

    for (SoftKeyboardStateListener listener : listeners) {
        if (listener != null) {
            listener.onSoftKeyboardOpened(keyboardHeightInPx);
        }
    }
}

private void notifyOnSoftKeyboardClosed() {
    for (SoftKeyboardStateListener listener : listeners) {
        if (listener != null) {
            listener.onSoftKeyboardClosed();
        }
    }
}

}

代码的使用:

final SoftKeyboardStateHelper softKeyboardStateHelper = new SoftKeyboardStateHelper(findViewById(R.id.activity_main_layout);
softKeyboardStateHelper.addSoftKeyboardStateListener(...);
// then just handle callbacks