2011-05-07 112 views
15

我有一個表單。 7垂直佈局的EditText。在屏幕上只能看到3個EditText(表格很大,所以我需要上下滾動來填充所有文件)。在底部 - 按鈕。Android Button需要雙擊才能執行操作

當我填充頂部的EditText(或頂部的一個,當我向下滾動到按鈕時,這是不可見的),並將焦點(光標)放在這個EditText中,當我向下滾動並嘗試點擊Button一次時 - 沒有任何反應。當我再次點擊 - 發生按鈕操作。

當兩者的EditText重點和按鈕可見 - 巴頓需要一個點擊。

我認爲,在第一種情況下首先單擊只需要關注。第二次點擊是「真實」點擊。

我該如何解決它?我只需要點擊一下按鈕。由於

+0

你可以如何重複:與默認的活動 克里特空項目,使用此佈局http://pastebin.ca/2054854 真實設備開始凸出 - 寫文本頂部的EditText,向下滾動到按鈕和點擊按鈕。 – newmindcore 2011-05-07 12:26:36

回答

20

的問題是舊的,我不知道這是否會解決你的問題,因爲你的引擎收錄鏈接不工作了,但因爲我偶然發現了您的文章有同樣的問題,我發現了一個解決方案,我會反正它張貼:

在我來說,當我應用自定義樣式的按鈕下面的教程問題發生:

<style name="ButtonStyle" parent="@android:style/Widget.Holo.Button"> 
    <item name="android:focusable">true</item> 
    <item name="android:focusableInTouchMode">true</item> 
    <item name="android:clickable">true</item> 
    <item name="android:background">@drawable/custom_button</item> 
    <item name="android:textColor">@color/somecolor</item> 
    <item name="android:gravity">center</item> 
</style> 

問題是以下行:

<item name="android:focusableInTouchMode">true</item> 

一旦我刪除它,按鈕按預期工作。

希望這會有所幫助。

+0

謝謝!爲我修好了。 – locke 2014-04-26 11:30:16

+0

錯誤地發佈在古老教程中的「focusableInTouchMode」已被複制粘貼到無數錯誤纏身的android應用程序中。 – 2014-08-03 21:54:40

10

我用下面來解決類似的問題。它會自動在該項目再次點擊,如果第一次點擊只獲得焦點:

input.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
      public void onFocusChange(View v, boolean hasFocus) { 
       if (hasFocus) { 
        v.performClick(); 
       } 
      } 
     }); 

我需要focusableInTouchMode是真實的。

+0

這不是一個熱修復補丁嗎?接受的答案不適合你? – Rajkiran 2014-08-25 10:06:33

+0

你如果需要,它是你需要有救了我的命的傢伙:) – iBabur 2014-11-04 21:29:15

+0

@Rajkiran機器人:focusableInTouchMode =「真」,那麼這個解決方案是完美的,在我的情況下,它是必須有focusableInTouchMode真 – iBabur 2014-11-04 21:30:39

1

到Maves回答類似。這對我來說訣竅:

<Button 
    style="@android:style/Widget.EditText" 
    android:focusableInTouchMode="false" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 
0

老問題我知道。無論如何,我有同樣的問題,需要按鈕是可以聚焦的。
最後我確實使用了一個OnTouchListener。

myButton.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     int action = motionEvent.getAction(); 
     if (action == MotionEvent.ACTION_DOWN) { 
      // do your stuff on down here 
     } else if (action == MotionEvent.ACTION_UP) { 
      // do your stuff on up here 
     } 

     // if you return true then the event is not bubbled e.g. if you don't want the control to get focus or other handlers.. 

     return false;     
    } 
}); 
相關問題