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 만 설정할 수 있기 때문에 불가능합니다. 다음은 버튼에 알파벳 문자 만 표시합니다.
<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"/>
Paresh Mayani 답변을 따를 수 있습니다.
그리고 조언 android:inputType="textPhonetic"
에서 사용자 선택에 따라 inputType 텍스트 및 숫자에 사용할 수 있습니다 .
내 요점을 알기를 바랍니다.
활동의 OnCreate에서 다음을 수행하십시오.
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);
그런 다음 keyevent를 들어야합니다. 파운드를 누르면 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;
}
}
}
}
프로그래밍 방식으로이 작업을 수행 할 수 있습니다.
// Numbers
mEditText.setInputType(InputType.TYPE_CLASS_NUMBER);
// Text
mEditText.setInputType(InputType.TYPE_CLASS_TEXT);
setInputType (int type) inputType에 대해 정의 된 상수로 컨텐츠의 유형을 설정합니다.
Saurav가 말했듯이 가장 좋은 방법은 간단한 리스너로 QWERTY Keyboard와 Numeric Keyborad간에 변경하는 것입니다.
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에 논리를 포함 할 수 있습니다.