Android 每当键盘显示在edittext中时,弹出headerview/layout
我在myapp中遇到了一个非常简单的问题。我有一个自定义对话框,它有EditText,每当软键盘打开sup时,我都想在对话框布局上显示标题/a另一个布局(请参见带有三个文本视图的图片)。如果他点击完成。隐藏软键盘和标题Android 每当键盘显示在edittext中时,弹出headerview/layout,android,android-softkeyboard,Android,Android Softkeyboard,我在myapp中遇到了一个非常简单的问题。我有一个自定义对话框,它有EditText,每当软键盘打开sup时,我都想在对话框布局上显示标题/a另一个布局(请参见带有三个文本视图的图片)。如果他点击完成。隐藏软键盘和标题 ettagmsg = (EditText) dialog.findViewById(R.id.etFlyTagName); 弹出标题 LinearLayout layheader = (LinearLayout)findViewById(R.la
ettagmsg = (EditText) dialog.findViewById(R.id.etFlyTagName);
弹出标题
LinearLayout layheader = (LinearLayout)findViewById(R.layout.header_buttons);
您可能需要添加此侦听器
ettagmsg.setOnFocusChangeListener(new View.OnFocusChangeListener(){
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(v.hasFocus()){
layheader.setVisibility(View.VISIBLE);
}else{
layheader.setVisibility(View.GONE);
//hide soft input here
}
}
}
希望我是有用的 还没有真正测试过这一点,但这里有一个不错的代码片段应该可以使用:
tl;dr:因为弹出软键盘需要一些视图变平(高度变小),所以你可以用它来检查软键盘是否隐藏/显示。在Android上,键盘非常烦人。您可以随意使用我以前完成的这个类: 您可以使用侦听器(您的对话框)实例化它,并在onStart/onStop或类似回调期间将其从视图中附加和分离。请记住,您希望将其附加到对话框视图 此外,您可能需要调整
DP\u键盘\u阈值
值
public class KeyboardObserver implements ViewTreeObserver.OnGlobalLayoutListener, ViewTreeObserver.OnPreDrawListener {
private static final int DP_KEYBOARD_THRESHOLD = 60;
private int keyboardThreshold;
private int currentHeight;
private View view;
private final KeyboardListener listener;
private boolean isKeyboardShown = false;
public KeyboardObserver(KeyboardListener listener) {
this.listener = listener;
}
public void attachToView(View view) {
keyboardThreshold = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, DP_KEYBOARD_THRESHOLD, view.getResources().getDisplayMetrics());
this.view = view;
currentHeight = view.getHeight();
view.getViewTreeObserver().addOnGlobalLayoutListener(this);
if (currentHeight <= 0) {
view.getViewTreeObserver().addOnPreDrawListener(this);
}
}
public void detachFromView() {
if (view != null) view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
@Override
public void onGlobalLayout() {
int newHeight = view.getHeight();
if (currentHeight > 0) {
int diff = newHeight - currentHeight;
if (diff < -keyboardThreshold) {
Log.d(this, "onGlobalLayout. keyboard is show. height diff = " + -diff);
// keyboard is show
isKeyboardShown = true;
if (listener != null)
listener.onKeyboardShow(-diff);
} else if (diff > keyboardThreshold) {
Log.d(this, "onGlobalLayout.keyboard is hide. height diff = " + diff);
// keyboard is hide
isKeyboardShown = false;
if (listener != null)
listener.onKeyboardHide(diff);
} else {
Log.v(this, "onGlobalLayout. height diff = " + diff);
}
}
currentHeight = newHeight;
}
public boolean isKeyboardShown() {
return isKeyboardShown;
}
@Override
public boolean onPreDraw() {
currentHeight = view.getHeight();
view.getViewTreeObserver().removeOnPreDrawListener(this);
return true;
}
public interface KeyboardListener {
public void onKeyboardShow(int height);
public void onKeyboardHide(int height);
}
}
公共类KeyboardObserver实现ViewTreeObserver.OnGlobalLayoutListener、ViewTreeObserver.OnPreDrawListener{
专用静态最终int DP_键盘_阈值=60;
私有int键盘阈值;
私家车高度;
私人视野;
私有最终键盘侦听器;
私有布尔值IsKeyboardShowed=false;
公用键盘观察者(键盘监听器监听器){
this.listener=listener;
}
公共无效附件视图(视图){
键盘阈值=(int)TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,DP_KEYBOARD_THRESHOLD,view.getResources().getDisplayMetrics());
this.view=视图;
currentHeight=view.getHeight();
view.getViewTreeObserver().addOnGlobalLayoutListener(此);
如果(当前高度0){
int diff=新高度-当前高度;
如果(差异<-键盘阈值){
Log.d(这是“onGlobalLayout.keyboard.height diff=“+-diff”);
//显示键盘
IsKeyboardShowed=true;
if(侦听器!=null)
onKeyboardShow(-diff);
}否则如果(差异>键盘阈值){
Log.d(这个“onGlobalLayout.keyboard是hide.height diff=“+diff”);
//键盘是隐藏的
IsKeyboardShowed=假;
if(侦听器!=null)
onKeyboardHide(diff);
}否则{
Log.v(该“onGlobalLayout.height diff=“+diff”);
}
}
当前高度=新高度;
}
公共布尔值IsKeyboardShowed(){
返回显示的键盘;
}
@凌驾
公共布尔onPreDraw(){
currentHeight=view.getHeight();
view.getViewTreeObserver().removeOnPreDrawListener(此);
返回true;
}
公共接口键盘侦听器{
键盘显示上的公共空白(内部高度);
键盘隐藏上的公共空白(内部高度);
}
}
我不确定我是否理解您的问题,您是否试图检测键盘何时显示隐藏以便显示隐藏视图?我想显示布局,每当键盘显示打开时都有三个文本视图。。