2012-04-20 182 views
2

我有三個Edittext字段ed1,ed2,ed3。當用戶點擊ed2/ed3時,我已打開對話框並從該對話框中獲取輸入。對於第一次單擊光標來到edittext框並只需點擊下一次,我就可以打開對話框以獲取輸入。我需要顯示第一次點擊的對話框。Edittext點擊事件焦點

回答

16

設置的EditText來unFocusable。這樣,第一次觸摸就會註冊爲點擊。

在XML中添加問題的EditText上(S):

android:focusableInTouchMode="false" 
1

這就是EditText的行爲方式。他們必須首先關注觸發onClick事件。

編輯: 像巴拉克指出的,你可以禁用「可聚焦性」,你可以使它打開一下鼠標。缺點是你無法在EditText上鍵入(這可能對你的用例很好)。

+0

事實並非如此......用'機器人:focusableInTouchMode =「假」'在XML和第一次觸摸EditText將註冊爲點擊。 – Barak 2012-04-20 14:33:40

+0

正確,但不會使它不可鍵入? – dmon 2012-04-20 15:06:32

+0

是的,但是如果你點擊它就像一個按鈕,我不認爲你希望它是可鍵入的。 :)我用它在表單中輸入日期和時間,當我希望用戶點擊EditText並彈出一個選擇器對話框,並將選擇器的結果放入EditText中時。基本上我是這樣做的,以維持其他輸入的「外觀」,但強制輸入是正確的格式/格式(這聽起來像是OP所要做的)。 – Barak 2012-04-20 15:20:34

2

你爲什麼不使用按鈕,而不是..但其設置爲默認的EditText背景..

0

爲了保持EditText鍵式,你可以做一個小竅門。

如果只需要在第一次打開Dialog然後使用EditText通常你可以這樣做:

public class EditTextActivity extends Activity { 
    EditText et1; 
    int clickCount = 0; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     et1 = (EditText) findViewById(R.id.main_et1); 
     et1.setFocusableInTouchMode(false); 
     setOnClickListeners(); 


    private void setOnClickListeners(){ 
     location.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (clickCount == 0){ 
       OpenDialog(); //Call the function to open the dialog created by you 
       et1.setFocusableInTouchMode(true); 
      } 
      clickCount = 1; 
     } 
    }); 

} 
+0

首先你必須閱讀和理解問題... – 2012-07-30 10:00:29

+1

我把這個答案根據這個問題的發展。 @Barak說定義'android:focusableInTouchMode =「false」',這是正確的,但是@dmon說:「缺點是你不能在EditText上輸入」。 我把這個解決了這個問題。 – 2012-07-30 11:53:02