Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 每当键盘显示在edittext中时,弹出headerview/layout_Android_Android Softkeyboard - Fatal编程技术网

Android 每当键盘显示在edittext中时,弹出headerview/layout

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

我在myapp中遇到了一个非常简单的问题。我有一个自定义对话框,它有EditText,每当软键盘打开sup时,我都想在对话框布局上显示标题/a另一个布局(请参见带有三个文本视图的图片)。如果他点击完成。隐藏软键盘和标题

        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;
}
公共接口键盘侦听器{
键盘显示上的公共空白(内部高度);
键盘隐藏上的公共空白(内部高度);
}
}

我不确定我是否理解您的问题,您是否试图检测键盘何时显示隐藏以便显示隐藏视图?我想显示布局,每当键盘显示打开时都有三个文本视图。。