2017-11-07 8 views
0

を変更する:は、私は次のようなレイアウトを持っているのEditTextの値ブロックにキーボード

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 
    <CheckBox 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/others" 
     android:id="@+id/input_others" /> 
    <EditText 
     android:minEms="2" 
     android:gravity="center" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="numberDecimal" 
     android:paddingLeft="@dimen/number_input_padding" 
     android:paddingRight="@dimen/number_input_padding" 
     android:id="@+id/input_others_number" 
     android:text="@string/others_default"/> 
</LinearLayout> 

ユーザーがのEditTextに触れた場合は、チェックボックスをチェックする必要があり、その値を削除する必要があります。

final CheckBox othersButton = findViewById(R.id.input_others); 
final EditText othersNumber = findViewById(R.id.input_others_number); 
othersNumber.setOnFocusChangeListener((view, hasFocus) -> { 
    if (hasFocus) { 
     othersButton.setChecked(true); 
     othersNumber.setText(""); 
    } 
}); 

問題は、私がEditTextに触れると、フォーカスが得られても(下の線の色が違う)、キーボードは表示されません(2番目のタッチの場合のみ)。しかし、もし私がothersNumber.setText("");という行を削除したら、キーボードは第1タッチの細かいところに現れます。

なぜそれが起こっているのですか、それを修正する方法はありますか?私はキーボードを強制的に表示することができますが、私はそれがここで必要とは思わない。 (hasFocus)場合

答えて

0

は、この内部を追加します。

((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(othersNumber, InputMethodManager.SHOW_FORCED); 

をだから、このようになります:キーボードが最初のタップに出てくる

 if (hasFocus) { 
     othersButton.setChecked(true); 
     othersNumber.setText(""); 

((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(othersNumber, InputMethodManager.SHOW_FORCED); 

} 

+0

返信ありがとうございますが、これは私が探しているものではありません。私はキーボードを一時的に表示させるためにこれを私のコードに追加しました。しかし、通常これは良い解決策ではありません。たぶん、私はそれらのことがどう働くのか誤解します。 – klenium

関連する問題