[BugFix]修复寻爱bug
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
package com.yizhuan.xchat_android_library.common.util;
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user