2012-08-30 142 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