2017-12-01 27 views
-1

이렇게 대화 상자를 만들었습니다. (이 대화 상자에는 텍스트, 단추 및 Testview가 하나 있습니다.) 내가 뒤로 버튼을 누를 때 대화 상자를 닫습니다하려고뒤로 키를 눌렀을 때 대화 상자가 닫힙니다.

val askPhoneDialog= AskPhoneDialog(context, android.R.style.Theme_Material_Light_NoActionBar_Fullscreen,dataManager!!) 
askPhoneDialog.show() 

이 같은 대화 상자를 호출

class AskPhoneDialog:Dialog{ 
    constructor(context: Context) : super(context) {} 

    var mContext:Context?=null 
    var dataManager:DataManager?=null 

    constructor(context: Context, themeResId: Int, dataManager: DataManager) : super(context, themeResId) { 
     this.mContext=context 
     this.dataManager=dataManager; 

    } 

    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
     setContentView(R.layout.mobile_bottom_sheet_layout) 
     setUp() 
    } 

    private fun setUp() { 
     window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT) 
     window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE 
    } 
} 

. 그러나 사용자가 처음으로 뒤로 버튼을 누르면 키보드가 숨겨지고 다시 버튼을 누르면 대화 상자가 닫힙니다.

필요한 출력 : 사용자가 처음으로 뒤로 버튼을 누르면 키보드와 함께 대화 상자를 닫아야합니다.

대화 상자와 부모 작업 모두의 onBackPressed, onKeyDown, onKeyUp, onTochEvent 메서드를 재정의하려했지만이 메서드 중 아무 것도 누르지 않은 상태입니다.

+0

backBack을 눌러서 softkeyboard를 볼 수있는 것처럼 특정 조건에서 onBackPressed()를 호출하려고 시도한 다음 onBackPressed()를 두 번 호출하면 첫 번째 호출에서는 키보드가 숨겨지고 두 번째 호출에서는 대화 상자가 닫힙니다. 당신이 나를 얻을 희망이 –

+0

나는 처음 버튼을 다시 클릭하면 어떤 방법으로 전화를 감지 할 수 없습니다. 그러나 그것은 onBackPressed() 또는 질문에 나열된 다른 메서드가 아닌지 확인하십시오. @NirmalPrajapat –

+0

질문을 downvote 누구든지, 이유를 언급하시기 바랍니다. 그럼 다음 번에 다시 버튼을 누를 때마다 –

답변

0

를 삽입 조각이 코드 : 여기

layoutView.setFocusableInTouchMode(true); 
    layoutView.requestFocus(); 
    layoutView.setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 

      if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { 
       Log.i("Check", "onKey Back listener is working!!!"); 
       if(isKeyboardVisible(getActivity())) 
       { 
        View view = getActivity().getCurrentFocus(); 
        if (view != null) { 
         InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
         imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 
        } 
       } 
       else{ 
        getDialog().dismiss(); 
       } 


       return true; 
      } 
      return false; 
     } 
    }); 

"layoutView는"조각의 rootview입니다.

와 조각의 방법을 만들 :

private static boolean isKeyboardVisible(Activity activity) { 
    Rect r = new Rect(); 
    View contentView = activity.findViewById(android.R.id.content); 
    contentView.getWindowVisibleDisplayFrame(r); 
    int screenHeight = contentView.getRootView().getHeight(); 
    int keypadHeight = screenHeight - r.bottom; 

    return (keypadHeight > screenHeight * 0.15); 
} 

조각 내 호출은 같은 것입니다 :

CheckFragment checkFragment = new CheckFragment(); 
    checkFragment.show(getFragmentManager(),"Checking"); 

덕분에 더 많은 도움이 필요하면 알려주세요!