Android & OpenGL

Android 软键盘技巧:隐藏键盘和自定义action

2017-04-25  本文已影响49人  thebestofrocky

原文:https://dzone.com/articles/android-keyboard-hacks-hide-the-keyboard-and-custo

This post explains the various code hacks used for controlling the appearance and behavior of the Android soft keyboard.

Most of the form-based applications often need to customize the default behavior of Android soft keyboard. Often it is required to control the type of keyboard you want to present user for data input, or customize the appearance of keyboard Enter key action.

Let us first began with controlling the type keyboard to display while editing the form data.

1. Set TextView Input type

There are different types of keyboard designed for user convenience. For example, if for entering a number you must display the numerical keyboard. This can be controlled by InputType property of TextView. The InputType controls aspects such as the type of data being placed in a text field. Generally you can select a single value, though some can be combined together as indicated. Setting this attribute to anything besides none also implies that the text is editable.

Some of the most used input type constants includes, none, text,textCapCharacters, textCapWords, textCapSentences, textAutoCorrect,textAutoComplete, textMultiLine, textImeMultiLine, textUri,textEmailAddress, textPassword, textWebEditText, textPhonetic,textWebEmailAddress, number, phone, datetime, date, and time.

You can set the inputType property in the layout declaration as follows

<EditText
   android:id="@+id/text1"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:imeOptions="actionSearch"
   android:singleLine="true"
   android:inputType="number" />

2. Customize the Input Method

Now that we understand the different keyboard types based on the TextViewinputType property let us customize the appearance of keyboard Enter action.

When the keyboard is visible on screen, the text on the Enter key typically indicates its action based on the order of focusable items in the view. While unspecified, the keyboard will display a “Next” action if there are more focusable in the view to move to, or a “Done” action if the last item is currently focused on. In the case of a multiline field, this action is a line return.

This value can be customized using android:imeOptions value in the TextView XML declaration. The android:imeOptions attribute access the following possible values:

Let’s look at an example layout with two editable text fields. The first EditText will display the search icon for the Enter key, and the second will display Go. The resulting output may very depending on current keyboard installed on device.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">
    <EditText
        android:id="@+id/text1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:imeOptions="actionSearch"
        android:singleLine="true" />
    <EditText
        android:id="@+id/text2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:imeOptions="actionGo"
        android:singleLine="true" />
</LinearLayout>

Note that, the custom editor options apply only to the appearance of soft input methods. Changing this value will not affect the events that get generated when the user presses on a physical hardware keyboard button.

3. Adding Custom Action

Customizing what happens when the user presses the Enter key can be just as important as adjusting its appearance. For overriding the default behavior we need to attach an OnEditorActionListener to EditText instance.

The following code snippet shows how to create a custom action for EditTexts.

public class MainActivity extends Activity implements OnEditorActionListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //Add the listener to the views
        EditText editText1 = (EditText) findViewById(R.id.text1);
        editText1.setOnEditorActionListener(this);
        EditText editText2 = (EditText) findViewById(R.id.text2);
        editText2.setOnEditorActionListener(this);
    }
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_SEARCH) {
            //Handle search key click
            return true;
        }
        if (actionId == EditorInfo.IME_ACTION_GO) {
            //Handle go key click
            return true;
        }
        return false;
    }
}

The boolean return value of onEditorAction() tells the system whether your implementation has consumed the event or whether it should be passed on to the next possible responder, if any.

It is important for you to return true when you handles the event yourself, so no other processing occurs. You can return false when you are not handling the event so your application does not steal key events from the rest of the system.

4. Hide the Soft Keyboard

The following code snippet will help you to hide or dismiss the soft keyboard from the screen.

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);

The hideSoftInputFromWindow() takes an IBinder window token as a parameter. This can be retrieved from any View object currently attached to the window via View.getWindowToken().

上一篇下一篇

猜你喜欢

热点阅读