2014-12-09 1 views
0

나는 소리를 아주 간단하게하려고합니다. SoftKeyboard이 열려있을 때 내 GridView 크기를 조정하십시오. SoftKeyboard이 사라지면 속한 곳에 다시 놓습니다 (높이 크기 조정). 이를 위해SoftKeyboard가 보이면 OnGlobalLayoutListener가 항상 켜집니다.

내가 다음 않았다

root.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

     @Override 
     public void onGlobalLayout() { 
      // TODO Auto-generated method stub 
      if(gv != null && searchbar != null) { 
       root.getWindowVisibleDisplayFrame(r); 
       if(screenHeight > r.bottom) { 
        RelativeLayout.LayoutParams myLayoutParams = (android.widget.RelativeLayout.LayoutParams) gv.getLayoutParams(); 
        myLayoutParams.removeRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
        gv.setLayoutParams(myLayoutParams); 
        int gvHeight = screenHeight - r.bottom - searchbar.getLayoutParams().height; 
        gv.getLayoutParams().height = gvHeight; 
       }else { 
        RelativeLayout.LayoutParams myLayoutParams = (android.widget.RelativeLayout.LayoutParams) gv.getLayoutParams(); 
        myLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
        gv.setLayoutParams(myLayoutParams); 
       } 

      } 

     } 
    }); 

gvGridView입니다. 내 앱을 시작하고 내 검색 창을 클릭하면 softkeyboard이 나타나고이 방법은 항상 실행됩니다 (레이아웃이 변경되지 않거나 아무 것도 클릭하지 않더라도). 따라서 내 UI가 차단됩니다. 내가 뭐 잘못 했어요?

또한이 기능을 구현하는 데 더 좋은 아이디어를 가지고있는 사람이 있습니까 (소프트 키 보드가 나타날 때 그리드 크기 조정 및 그 반대로).

도움을 주시면 감사하겠습니다. onFocusChange 작업

공지 사항

나에게 좋지 않은 소리. 내 장치 때문이야. SoftKeyboardbackPress으로 닫을 수 있습니다. Focus

답변

0

대신 API 11+에 View.OnLayoutChangeListener을 사용할 수 있었습니까?

그렇지 않으면 충분히 큰 높이 차이를 확인한 후 청취자를 제거해야합니다 (this 참조). 키보드를 작동시키는 클릭 리스너에 리스너를 다시 추가하는 것을 잊지 마십시오.

@Override 
public void onGlobalLayout() { 
    int heightDiff = root.getRootView().getHeight() - root.getHeight(); 
    if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard... 
     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
      root.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
     } else { 
      root.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
     } 
     ... rest of your code 
    } 
} 
관련 문제