2012-08-30 3 views
2

나는 EditText 배열을 가지고 있으며 클릭 할 때마다 나타나는 표준 키보드 Android를 비활성화하려고합니다. EditText 배열에서 Android 키보드 사용 안 함

내가 사용하고있는 부품 코드입니다 :

편집
InputMethodManager imm = (InputMethodManager)getSystemService(
       Context.INPUT_METHOD_SERVICE); 
for (i=0;i<dim*dim;i++){ 

     imm.hideSoftInputFromWindow(value[i].getWindowToken(), 0); 
     value[i].setOnTouchListener(this); 
     value[i].setOnClickListener(this); 
     value[i].setOnFocusChangeListener(this); 


    } 

:

import android.content.Context; 
import android.util.AttributeSet; 
import android.widget.EditText; 

public class KeyboardControlEditText extends EditText { 
private boolean mShowKeyboard = false; 

public void setShowKeyboard(boolean value) { 
    mShowKeyboard = value; 
} 

// This constructor has to be overriden 
public KeyboardControlEditText(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

// Now tell the VM whether or not we are a text editor 
@Override 
public boolean onCheckIsTextEditor() { 
    return mShowKeyboard; 
} 
} 

내 주요 클래스 :

나는 이러한 코드 라인, 새로운 클래스를 생성 OnCreate에서 :

for (i=0;i<dim*dim;i++){ 

((KeyboardControlEditText) value[i]).setShowKeyboard(false); 
value[i].setOnTouchListener(this); 
value[i].setOnClickListener(this); 


} 

답변

5

이 경우 자신의 EditText 클래스를 만들어야합니다. 그런 다음 기본값 인 onCheckIsTextEditor을 무시하고 false을 반환하십시오.

public class NoKeyboardEditText extends EditText { 
    // This constructor has to be overriden 
    public NoKeyboardEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    // Now tell the VM that we are not a text editor 
    @Override 
    public boolean onCheckIsTextEditor() { 
     return false; 
    } 
} 

EditText에 대한 올바른 이름으로 대체해야합니다. 예를 들어 패키지가 com.example.widget 인 경우 <com.example.widget.NoKeyboardEditText ... />을 사용하고 싶을 것입니다. 이 동적해야하는 경우

, 당신도 애호가 얻을 수 있습니다 :

public class KeyboardControlEditText extends EditText { 
    private boolean mShowKeyboard = false; 

    public void setShowKeyboard(boolean value) { 
     mShowKeyboard = value; 
    } 

    // This constructor has to be overriden 
    public KeyboardControlEditText(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    // Now tell the VM whether or not we are a text editor 
    @Override 
    public boolean onCheckIsTextEditor() { 
     return mShowKeyboard; 
    } 
} 

그런 식으로, 당신은 런타임에 변경하는 ((KeyboardControlEditText) myEditText).setShowKeyboard(false);를 호출 할 수 있습니다.

+0

어쩌면 내가 잘못하고있는 중이지만 여전히 Android에서 키보드가 표시됩니다. – David

+0

새 클래스를 반영하도록 XML 파일을 변경 했습니까? – Eric

+0

새 클래스를 Manifest에 추가했습니다. 필자는 현재 메인 클래스에서 사용중인 코드 라인을 사용하여 자신의 조언을 사용하여 게시물을 편집했습니다. – David

관련 문제