2 qq 22934323 qq_22934323 于 2016.04.14 11:33 提问

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

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

1个回答

qq_26522963
qq_26522963   2016.04.14 11:40
已采纳

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

qq_22934323
qq_22934323 谢谢你的回答,非常感谢!
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!