2017-07-15 65 views
0

詳情:圖像按鈕的工作原理只有在點擊兩次

我在右繪製(壓延圖標)活動已經在EditText。如果我點擊EditText或日曆圖標datepicker應該打開對話框。

問題:

如果我點擊EditTextdatepicker對話框正確打開,但如果我點擊在第一次沒什麼Calendar圖標正在發生的事情。如果我再次點擊相同的圖標,那麼datepicker對話框已打開。

我已經ontouch實施了正確的繪製如下:

@Override 
     public boolean onTouch(View v, MotionEvent event) { 
      final int DRAWABLE_RIGHT = 2; 


      if (event.getAction() == MotionEvent.ACTION_UP) { 
       mValidationId = (Integer) v.getTag(); 

       if (mEditText.getCompoundDrawables()[DRAWABLE_RIGHT] != null 
         && !isErrorIconDisplayedForCalendarIcon) { 
        if (event.getRawX() >= (mEditText.getRight() - mEditText.getCompoundDrawables()[DRAWABLE_RIGHT] 
          .getBounds().width())) { 
         isErrorIconDisplayedForCalendarIcon = mValidationId == RegistrationValidator.VALIDATE_DATEOFBIRTH; 
         ViewUtils.hideVirturalKeyboard(mEditText); 
         mListener.OnErrorIconClick(mValidationId); 
         return true; 
        } else { 
         HideErrorIcon(); 
         if (mValidationId == RegistrationValidator.VALIDATE_DATEOFBIRTH) { 
          mEditText.setCursorVisible(false); 
           mListener.OnCalendarIconClick(); 
          ViewUtils.hideVirturalKeyboard(mEditText); 
         } else { 
          v.requestFocus(); 
          ViewUtils.showVirturalKeyboard(mContext.getApplicationContext()); 

          if (mValidationId == RegistrationValidator.VALIDATE_USERNAME || 
            mValidationId == RegistrationValidator.VALIDATE_PASSWORD) { 
           RegistrationUserCredentialsController controller = (
             (RegistrationUserCredentialsController) mDsmApplication 
               .getController(RegistrationUserCredentialsController.TAG)); 
           if (controller != null) { 
            controller.OnRegistrationItemEditStart(mValidationId); 
           } 
          } 
         } 
        } 
       } else { 
        isErrorIconDisplayedForCalendarIcon = false; 
        if (mValidationId == RegistrationValidator.VALIDATE_DATEOFBIRTH) { 
         mEditText.setCursorVisible(false); 
         mListener.OnCalendarIconClick(); 
         ViewUtils.hideVirturalKeyboard(mEditText); 
        } else { 
         if (mCurrentEditText != null && !mEditText.equals(mCurrentEditText)) { 
          mListener.OnRegistrationItemEditCompleted(
            mCurrentEditText.getText().toString(), (Integer) mCurrentEditText.getTag() 
          ); 
         } 
         mCurrentEditText = (CustomTextInputEditText) v; 
         v.requestFocus(); 
         ViewUtils.showVirturalKeyboard(mContext.getApplicationContext()); 

         if (mValidationId == RegistrationValidator.VALIDATE_USERNAME || 
           mValidationId == RegistrationValidator.VALIDATE_PASSWORD) { 
          RegistrationUserCredentialsController controller = (
            (RegistrationUserCredentialsController) mDsmApplication 
              .getController(RegistrationUserCredentialsController.TAG)); 
          if (controller != null) { 
           controller.OnRegistrationItemEditStart(mValidationId); 
          } 
         } 
        } 
       } 

      } 
      return false; 
     } 

在上面的代碼,我有一個問題與相關Edittext出生日期。如果我點擊右邊的可繪製下劃線顏色Edittext正在改變,第二次點擊後,日期選取器對話框打開。

+0

,請訪問:https://stackoverflow.com/a/33996656/6021469 願你有你的解決方案。 –

回答

0

下面試試可能會對你有幫助。它適合我。

mEditText.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     final int DRAWABLE_LEFT = 0; 
     final int DRAWABLE_TOP = 1; 
     final int DRAWABLE_RIGHT = 2; 
     final int DRAWABLE_BOTTOM = 3; 

     if(event.getAction() == MotionEvent.ACTION_UP) { 
      if(event.getRawX() >= (mEditText.getRight() - mEditText.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) { 
       // your action here 

      return true; 
      } 
     } 
     return false; 
    } 
}); 
+0

hai shweta同樣的東西已經存在於我發佈的代碼中了嗎? – shree

-1

在AndroidManifest.xml中添加此行該活動

android:launchMode = "singleInstance" 
+0

hai sunil這不適合我 – shree

+0

hai sunil謝謝你的幫助,但它不適合我 – shree

+0

在我的情況下,它運作良好。 –