EditTextボックスがあり、ほとんどの場合ユーザーが数字を入力するため、選択したときに表示されるデフォルトのキーボードをテンキーにします。ただし、必要に応じて、ユーザーがアルファベットも入力できるようにしたいと思います。を使用android:inputType="number"
すると、入力が数字のみに制限されます。どのようなオプションがありますか?
EditTextボックスがあり、ほとんどの場合ユーザーが数字を入力するため、選択したときに表示されるデフォルトのキーボードをテンキーにします。ただし、必要に応じて、ユーザーがアルファベットも入力できるようにしたいと思います。を使用android:inputType="number"
すると、入力が数字のみに制限されます。どのようなオプションがありますか?
回答:
次のように、xmlでEditTextを定義します。
<EditText
android:id="@+id/txtOppCodigoCliente"
android:inputType="textVisiblePassword"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:maxLength="11"
android:hint="@string/strCodigoCliente"/>
出力: android:inputType = "textVisiblePassword"
数字の行と残りの文字。
より堅牢なソリューションを提案します:
入力タイプを選択する機能をユーザーに提示します。
必要な修正
-入力選択ボタンの表示/非表示の処理が改善されました
-入力タイプが文字の場合、おそらく提案を削除します
アクティビティは次のとおりです。
package mobi.sherif.numberstexttextview;
import android.os.Bundle;
import android.app.Activity;
import android.text.InputType;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.widget.EditText;
public class MainActivity extends Activity {
EditText mEdit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEdit = (EditText) findViewById(R.id.input);
mEdit.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean focused) {
findViewById(R.id.llmenu).setVisibility(focused?View.VISIBLE:View.GONE);
}
});
}
public void onNumbers(View v) {
mEdit.setInputType(InputType.TYPE_CLASS_NUMBER);
}
public void onLetters(View v) {
mEdit.setInputType(InputType.TYPE_CLASS_TEXT);
}
}
アクティビティのxmlは次のとおりです。 activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ScrollView
android:id="@+id/scrollview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignWithParentIfMissing="true"
android:layout_above="@+id/llmenu" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<EditText
android:id="@+id/input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number" >
<requestFocus />
</EditText>
</LinearLayout>
</ScrollView>
<LinearLayout
android:id="@+id/llmenu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#000000"
android:padding="0dp" >
<Button
android:id="@+id/buttonnumbers"
android:layout_width="0dp"
android:onClick="onNumbers"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="Numbers" />
<Button
android:id="@+id/buttonletters"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:onClick="onLetters"
android:text="Letters" />
</LinearLayout>
</RelativeLayout>
これがあなたが探しているものです:
次のようEditText
にxmlでを定義します。
<EditText
android:id="@+id/etTest"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="@string/hint">
</EditText>
そして、あなたの次の電話をかけてくださいonCreate()
:
etTest = (EditText) findViewById(R.id.etTest);
etTest.setRawInputType(InputType.TYPE_CLASS_NUMBER);
// Note the "Raw"
あなたがあなたのEditText
今をクリックするときはいつでも、あなたは数字と文字を入力することができます!(数字キーボードが最初に表示されます)
EditTextに設定できるinputTypeは1つだけなので、残念ながらこれは不可能です。以下は、ボタンにアルファベット文字を表示するだけです。
<EditText
android:id="@+id/editText1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="text|number" />
ただし、私が提案できるのは、入力タイプを数値に設定し、フォームのテンキーの近くに小さなswitchKeyboardボタンを追加することです。そして、そのonClickを設定します
editText1.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
ユーザーもアルファベットに切り替えることができるように。
number|text
(上記を参照)。これは、長押しで文字を入力できることを意味しますが、実際には機能しません。私にはかなりバグがあるように見えるか、少なくとも不完全に見えます。
TYPE_MASK_CLASS
:与えられているテキストの全体的なクラスを決定するビットのマスク。サポートされているクラスは、TYPE_CLASS_TEXT、TYPE_CLASS_NUMBER、TYPE_CLASS_PHONE、TYPE_CLASS_DATETIMEです。IME作成者:クラスが理解できるものでない場合は、バリエーションやフラグのないTYPE_CLASS_TEXTを想定してください。」
基本的に、EditText inputtypeは、EditTextの入力タイプを設定するために使用されます。
可能な値は次のandroid:inputtype
とおりです。
次に、例に示すように任意の値を使用できます。
<EditText android:id="@+id/EditText01"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:inputType="number"
android:text="1212223"/>
あなたはパレシュマヤニの答えに従うことができます。
そしてアドバイスであなたは使うことができます android:inputType="textPhonetic"
、ユーザーの選択に基づいてinputTypeTextとNumberに使用できます。
あなたが私の主張を理解することを願っています。
OnCreate in Activityで、これを行います。
t = (EditText) findViewById(R.id.test);
t.setKeyListener(new KeyListener() {
@Override
public boolean onKeyUp(View view, Editable text, int keyCode, KeyEvent event) {
return false;
}
@Override
public boolean onKeyOther(View view, Editable text, KeyEvent event) {
return false;
}
@Override
public boolean onKeyDown(View view, Editable text, int keyCode, KeyEvent event) {
if (keyCode == 67) { // Handle backspace button =)
if (text.length() > 0) {
t.setText(text.subSequence(0, text.length() - 1));
t.setSelection(text.length()-1);
}
}
return false;
}
@Override
public int getInputType() {
return InputType.TYPE_CLASS_NUMBER;
}
@Override
public void clearMetaKeyState(View view, Editable content, int states) {
}
});
この場合、「is」number
と入力すると、Androidに数字キーボードが表示されますが、好きなように入力できます。また、必要に応じて他のメソッドをオーバーライドできます。
これが私がそれを達成した方法です...
android:inputType = "textPhonetic | numberDecimal" android:digits = "/ 0123456789.abcdefghijklmnopqrstuvwxyz"
数字で指定された文字のみが許可されます。
表示されているキーボードはダイヤラのキーボードであり、通常のキーボードではないことに注意してください。私にとっては、完全にXML内で必要なことを達成しました。
この場合、inputTypeフィルターを使用しないでください。EditTextプロパティに以下の行を追加するだけです。
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "
これで、これらの文字のみがEditTextに入力できるようになります。エディットテキストの完全なコードは次のようになります。
<EditText
android:id="@+id/etTest"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 "
android:hint="@string/hint">
これは不可能ですさまざまな電話での現在のデフォルトのAndroid入力タイプを考えるです。
回答に一般的に含まれている生の入力タイプを設定する一般的な方法のように、一部のキーボードでは機能するが他のキーボードでは機能しない可能性のあるハックが多数あります。
editText.setRawInputType(InputType.TYPE_CLASS_NUMBER)
私が見つけることができる最善のアドバイスtextPostalAddress
は、XMLで入力タイプを使用することです。
android:inputType="textPostalAddress"
残念ながら、これは私たちが望んでいることをまだ実行していませんが、将来的には実行される可能性があります。これの唯一の利点は、編集ボックスのメタ情報が意図したものを反映することです。
プログラム的には、通常のフローを少し調整するだけで可能です。まず、editTextを次のように設定する必要があります。
editText.setInputType(InputType.TYPE_CLASS_NUMBER);
次に、キーイベントをリッスンする必要があります。ポンドを押したら、InputTypeを再びInputType.TYPE_CLASS_TEXTに設定します。これは私にとってはうまくいくはずです。
editText.setOnKeyListener(new View.OnKeyListener()
{
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
Log.d("KeyBoard", "Keyboard Test Key Hit");
switch (keyCode)
{
KeyEvent.KEYCODE_POUND:
if(editText.setInputType(InputType.TYPE_CLASS_TEXT);
{
editText.setInputType(InputType.TYPE_CLASS_TEXT);
return true;
}
}
}
}
textViewのコードで、android:inputTypeの「text」を削除します。
そのはず、
<EditText
android:id="@+id/editText1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="number" />
これはプログラムで行うことができます。
// Numbers
mEditText.setInputType(InputType.TYPE_CLASS_NUMBER);
// Text
mEditText.setInputType(InputType.TYPE_CLASS_TEXT);
setInputType(int type)inputTypeに定義されている定数を使用して、コンテンツのタイプを設定します。
Sauravが言うように、最良の方法は、単純なリスナーを使用してQWERTYキーボードとNumericKeyboradを切り替えることです。
input.setInputType(InputType.TYPE_CLASS_TEXT);
input.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
switch (keyCode) {
case 24: // Volumen UP
input.setInputType(InputType.TYPE_CLASS_NUMBER);
break;
case 25: // Volumen DOWN
input.setInputType(InputType.TYPE_CLASS_TEXT);
break;
}
return true;
}
});
私はすべての方法を試しますが、完璧ではありません。だから私は別の考えを持っています。すべてのキーボードに最適です。
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reset_password);
editText.setRawInputType(InputType.TYPE_CLASS_NUMBER);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks whether a hardware keyboard is available
if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
Toast.makeText(this, "keyboard visible", Toast.LENGTH_SHORT).show();
if (editText.isFocused()) {
editText.setInputType(InputType.TYPE_CLASS_TEXT);
}
} else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
Toast.makeText(this, "keyboard hidden", Toast.LENGTH_SHORT).show();
if (editText.getInputType() == InputType.TYPE_CLASS_TEXT) {
editText.setInputType(InputType.TYPE_CLASS_NUMBER);
}
}
}
EditTextのxmlレイアウトで、次のパラメーターを追加します。
android:inputType="number|text"
これにより、ユーザーはテキストと数値の両方を入力でき、アクティビティやフラグメントにコードを含めるのではなく、xmlにロジックを含めることができます。