web-dev-qa-db-fra.com

Comment arrêter automatiquement le clavier logiciel montrant automatiquement lorsque la mise au point est modifiée (événement OnStart)

Je me développe pour une tablette utilisant Android 2.2.

J'ai une forme que j'utilise pour des instances neuves et modifiables. Lorsque modifiable, je souhaite arrêter l'utilisateur de modifier certains champs. Je gère cela dans mon onStart - événement, définir la fonction txt.setFocusableInTouchMode(false). Cela force l'accent sur la prochaine étape concentable EditText dans ma forme (qui est génial), mais lors de l'exécution, le clavier logiciel apparaît automatiquement pour le EditText avec la mise au point. Quelqu'un sait comment arrêter ça?

Voici le code (appelé dans l'événement onStart):

private void PopulateFields(){
    TextView txtTitle = (TextView) this.findViewById(R.id.txtEquipmentEditTitle);
    AutoCompleteTextView txtMake = (AutoCompleteTextView) this.findViewById(R.id.autEquipmentEditMake);
    AutoCompleteTextView txtModel = (AutoCompleteTextView) this.findViewById(R.id.autEquipmentEditModel);
    EditText txtDesc = (EditText) this.findViewById(R.id.txtEquipmentEditDesc);
    TextView txtDeptKey = (TextView) this.findViewById(R.id.txtEquipmentEditDeptKey);
    EditText txtSerial = (EditText) this.findViewById(R.id.txtEquipmentEditSerialNo);
    EditText txtBarCode = (EditText) this.findViewById(R.id.txtEquipmentEditBarCode);

    txtTitle.setText("Edit Equipment");
    txtMake.setText(make);
    txtModel.setText(model);
    txtDesc.setText(desc);
    txtDeptKey.setText(Integer.toString(deptKey));
    txtSerial.setText(serial);
    txtBarCode.setText(barCode);
    txtMake.setEnabled(false);
    txtModel.setEnabled(false);
    txtDesc.setEnabled(false);
    txtMake.setClickable(false);
    txtMake.setFocusableInTouchMode(false);
    txtModel.setFocusableInTouchMode(false);
    txtDesc.setFocusableInTouchMode(false);
    txtMake.setFocusable(false);
    txtModel.setFocusable(false);
    txtDesc.setFocusable(false);
}
27
Rune Borgen

Nous pouvons cacher le device Keybord par des moyens suivants qui dépend totalement de la nécessité de la situation

First Way_

EditText userId;
    /*
     * When you want that Keybord not shown untill user clicks on one of the EditText Field.
     */
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

Second Way_INPUTMETHODMANAGER

    /*
     * When you want to use service of 'InputMethodManager' to hide/show keyboard
     */
    InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

    inputManager.hideSoftInputFromWindow(userId.getWindowToken(),
            InputMethodManager.HIDE_NOT_ALWAYS);

Third Way_

    /*
     * Touch event Listener
     * When you not want to open Device Keybord even when user clicks on concern EditText Field.
     */
    userId.setOnTouchListener(new OnTouchListener(){
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            int inType = userId.getInputType(); // backup the input type
            userId.setInputType(InputType.TYPE_NULL); // disable soft input
            userId.onTouchEvent(event); // call native handler
            userId.setInputType(inType); // restore input type
            userId.setFocusable(true);
            return true; // consume touch even
        }
    });

Nom de toutes les voies ci-dessus_ Vous pouvez également définir windowSoftInputMode dans l'application smanifest` file__

<manifest ... >
 <application ... >
    <activity 
        Android:windowSoftInputMode="stateHidden|stateAlwaysHidden"
        ... >
        <intent-filter>
           ...
        </intent-filter>
    </activity>

 </application>
</manifest>

J'espère que cela aidera tout!

11
Rupesh Yadav

Si vous le souhaitez pour un particulier EditText cela fonctionnera.

editText.setShowSoftInputOnFocus(false);

4
Shivam Dawar