2013-07-03 3 views
0

У меня есть RelativeLayout внутри ScrollView, который содержит кнопку Button и некоторые TextViews и EditTexts.Кнопка Android всегда принимает два клика для запуска onClick()

В моем файле макета xml я определяю андроид: onClick, но для запуска события всегда требуется два щелчка кнопки. Кнопка всегда фокусируется на первом щелчке и запускает событие onClick во втором клике. Я попытался настроить focusable и focusableInTouchMode как на false, но поведение не меняется.

Вот мой файл макета:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context=".DensityActivity" > 

    <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 

     <TextView 
     ... 

     <TextView 
     ... 

     <TextView 
     ... 

     <EditText 
     ... 

     <Button 
      android:id="@+id/ad_button_calculate" 
      android:layout_width="112dp" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/ad_edit_obs_temp" 
      android:layout_alignParentRight="true" 
      android:layout_marginTop="20pt" 
      android:paddingLeft="6pt" 
      android:onClick="onClick" 
      android:focusable="false" 
      android:focusableInTouchMode="false" 
      android:text="@string/button_calculate" /> 

     <TextView 
     ... 

    </RelativeLayout> 
</ScrollView> 

Любые идеи или предложения относительно того, почему фокусирования и focusableInTouchMode, кажется, не делать ничего?

Я думал, что это может быть мой метод onClick(), который не делает то, что должен, поэтому я сводил его к чему-то простому, чтобы просто видеть, и он ведет себя одинаково. Вот мой упрощенный onClick():

public void onClick(View view) { 

    new AlertDialog.Builder(this).setTitle("Argh").setMessage("Watch out!").setNeutralButton("Close", null).show(); 

} 
+1

опубликуйте свой 'onClick()'. Вам не нужно «фокусировать» для кнопки «Button», если у вас нет чего-то еще, о чем мы не знаем. – codeMagic

+0

hmm, если я использую тот же макет в новом проекте, он отлично работает. Вы правы, должно быть что-то происходит, о чем я не знаю. Я продолжу расследование. – plisskin

+0

Вы можете попробовать очистить свой проект. «Проект -> Чистота ...» – codeMagic

ответ

4

ОК, я нашел его. Это была, конечно, моя собственная ошибка. В конце моего OnCreate метод, который я делал это:

// Set the focus to the calculate button so the keyboard won't show up automatically 
Button calcButton = (Button)findViewById(R.id.ac_button_calculate); 
calcButton.setFocusable(true); 
calcButton.setFocusableInTouchMode(true); 
calcButton.requestFocus(); 

Поэтому, конечно, независимо от того, что я сделал в моем файле XML, я не отвергая его в своем коде. Вместо этого я использовал это, чтобы скрыть клавиатуру:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); 

который прекрасно работает.

+0

Вы пытались помещать как focusable, так и focusableInTouchMode в false в файле xml или style? У меня была такая же проблема, и это разрешило это для меня, не нужно делать все окно. –