隐藏键盘

时间:2015-12-22 10:47:30

标签: android android-fragments keyboard

我有一个片段,在该片段中有一个添加按钮,在单击时触发对话框。在该对话框中,我有两个edittext和两个按钮。单击“保存”按钮对话框将被取消。现在的问题是,当我点击保存按钮时,编辑文本键盘关闭,另一个键盘弹出。(编辑文本键盘类型是数字,而后面的弹出按字母顺序)。我想关闭这个键盘因此我尝试了configChanges和这个方法

public static void hideKeyboard(Context ctx) {
    InputMethodManager inputManager = (InputMethodManager) ctx
            .getSystemService(Context.INPUT_METHOD_SERVICE);

    // check if no view has focus:
    View v = ((Activity) ctx).getCurrentFocus();
    if (v == null)
        return;

    inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
}

但是这个方法都不起作用,我也没有在对话框出现的片段中有任何编辑文本。

dialog.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/lin_add_dns">
<TextView
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:text="ADD DNS"
    android:gravity="center"
    android:background="@drawable/add_dns_title"
    android:textColor="#ffffff"
    android:textStyle="bold"
    android:textSize="20sp"
    android:id="@+id/txt_add_dns"/>
    <EditText
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:hint="DNS NAME"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="30dp"
        android:layout_marginRight="20dp"
        android:id="@+id/et_name"
        android:layout_gravity="center"
        android:textColorHint="#999999"
        android:textColor="#000"
        android:focusableInTouchMode="true"/>
    <EditText
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="30dp"
        android:hint="IP Address"
        android:inputType="number"
        android:id="@+id/et_ip"
        android:layout_gravity="center"
        android:digits="0123456789."
        android:textColorHint="#999999"
        android:textColor="#000"
        android:maxLength="15"
        android:focusableInTouchMode="true"/>
    <Button
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="30dp"
        android:layout_marginBottom="20dp"
        android:text="Submit"
        android:background="@drawable/textview_click"
        android:textColor="#ffffff"
        android:id="@+id/btn_submit"/>
</LinearLayout>

fragment.xml之

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:background="#ccc"
    android:focusableInTouchMode="true">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:orientation="vertical"
            android:layout_height="wrap_content">
                    <TextView
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:gravity="center"
                        android:id="@+id/TopHeader"
                        android:text="Current WIFI Info"
                        android:paddingRight="15dp"
                        android:textAppearance="?android:attr/textAppearanceMedium"
                        android:layout_marginTop="20dp"/>
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_marginTop="10dp"
                android:orientation="horizontal"
                android:layout_height="wrap_content"
                android:baselineAligned="false">

                <LinearLayout
                    android:layout_width="0dp"
                    android:layout_weight=".50"
                    android:paddingRight="5dp"
                    android:orientation="vertical"
                    android:layout_height="wrap_content">
                    <TextView
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:gravity="right"
                        android:textAlignment="gravity"
                        android:id="@+id/WiFiConnectLeft"
                        android:text="Wifi Name :"/>
                    <TextView
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:gravity="right"
                        android:textAlignment="gravity"
                        android:id="@+id/DefaultGatewayLeft"
                        android:text="Default Gateway :"/>
                    <TextView
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:gravity="right"
                        android:textAlignment="gravity"
                        android:id="@+id/DNS1Left"
                        android:text="Primary DNS :"/>
                    <TextView
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:gravity="right"
                        android:textAlignment="gravity"
                        android:id="@+id/DNS2Left"
                        android:text="Secondary DNS :"/>
                    <TextView
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:gravity="right"
                        android:textAlignment="gravity"
                        android:id="@+id/CurrentIPLeft"
                        android:text="IP Address :"/>
                </LinearLayout>
                <LinearLayout
                    android:layout_width="0dp"
                    android:layout_weight=".50"
                    android:paddingLeft="5dp"
                    android:orientation="vertical"
                    android:layout_height="wrap_content">
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:gravity="left"
                        android:id="@+id/WiFiConnectedText"
                        android:textAlignment="gravity"
                        android:text=""/>
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:id="@+id/DefaultGatewayText"/>
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:id="@+id/DNS1Text"/>
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:id="@+id/DNS2Text"/>
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:id="@+id/CurrentIPText"/>
                </LinearLayout>
            </LinearLayout>

                -<TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="CHANGE DNS"
                    android:layout_gravity="center"
                    android:textAlignment="gravity"
                    android:id="@+id/MiddleHeaderText"
                    android:layout_marginTop="10dp"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:textStyle="bold"
                    android:textColor="#000"
                    android:textSize="20sp"/>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:layout_below="@+id/tv_title"
                android:orientation="horizontal"
                android:weightSum="3"
                android:layout_marginTop="10dp"
                android:id="@+id/lin_primary"
                android:gravity="center_vertical"
                android:paddingRight="15dp">
                <TextView
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="@string/primary"
                    android:textStyle="bold"
                    android:textColor="#000"
                    android:id="@+id/PrimaryDNSText"
                    android:gravity="center"
                    android:paddingLeft="@dimen/activity_horizontal_margin"
                    android:textSize="13sp"/>
                <TextView
                    android:layout_width="0dp"
                    android:layout_height="30dp"
                    android:layout_weight="1.2"
                    android:background="#000"
                    android:textColor="#ffffff"
                    android:inputType="numberDecimal"
                    android:layout_marginRight="10dp"
                    android:maxLength="16"
                    android:id="@+id/EDITDNS1"
                    android:gravity="center"
                    android:text=""/>
                <Button
                    android:layout_width="0dp"
                    android:layout_height="30dp"
                    android:layout_weight="0.8"
                    android:text="BROWSE"
                    android:gravity="center"
                    android:background="@drawable/textview_click"
                    android:textColor="#ffffff"
                    android:id="@+id/BrowseDNS1"/>
            </LinearLayout>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:layout_below="@+id/lin_primary"
                android:orientation="horizontal"
                android:weightSum="3"
                android:layout_marginTop="10dp"
                android:id="@+id/lin_secondary"
                android:gravity="center_vertical"
                android:paddingRight="15dp">
                <TextView
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:text="@string/secondary"
                    android:textColor="#000"
                    android:id="@+id/SecondaryDNSText"
                    android:paddingLeft="@dimen/activity_horizontal_margin"
                    android:textSize="12sp"
                    android:gravity="center"/>
                <TextView
                    android:layout_width="0dp"
                    android:layout_height="30dp"
                    android:layout_weight="1.2"
                    android:background="#000"
                    android:textColor="#ffffff"
                    android:inputType="numberDecimal"
                    android:layout_marginRight="10dp"
                    android:maxLength="16"
                    android:id="@+id/EDITDNS2"
                    android:gravity="center"
                    android:text=""
                    />
                <Button
                    android:layout_width="0dp"
                    android:layout_height="30dp"
                    android:layout_weight="0.8"
                    android:text="BROWSE"
                    android:gravity="center"
                    android:background="@drawable/textview_click"
                    android:textColor="#ffffff"
                    android:id="@+id/BrowseDNS2"/>
            </LinearLayout>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_marginTop="15dp"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:layout_weight="3">
                <Button
                    android:layout_width="0dp"
                    android:layout_height="40dp"
                    android:text="ADD DNS"
                    android:id="@+id/btn_add"
                    android:textColor="#ffffff"
                    android:background="@drawable/textview_click"
                    android:gravity="center"
                    android:layout_marginLeft="15dp"
                    android:layout_weight="1"/>
                <Button
                    android:layout_width="0dp"
                    android:layout_height="40dp"
                    android:id="@+id/UpdateDNS"
                    android:text="Update"
                    android:background="@drawable/textview_click"
                    android:textColor="#ffffff"
                    android:layout_marginLeft="20dp"
                    android:layout_weight="1"/>
                <Button
                    android:layout_width="0dp"
                    android:layout_height="40dp"
                    android:id="@+id/ResetWifi"
                    android:text="RESET"
                    android:background="@drawable/textview_click"
                    android:textColor="#ffffff"
                    android:layout_marginLeft="20dp"
                    android:layout_marginRight="15dp"
                    android:layout_weight="1"
                    />
            </LinearLayout>
        </LinearLayout>
    </ScrollView>
</LinearLayout>

Dialog java code

addDns.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
                    android.support.v7.app.AlertDialog.Builder builder;
                    final android.support.v7.app.AlertDialog alertDialog;
                    TextView txt_add_dns;
                    Button btn_submit;
                    final EditText et_name, et_dns;
                    LayoutInflater inflater = getActivity().getLayoutInflater();
                    final View layout = inflater.inflate(R.layout.add_dns_dialog, (ViewGroup) getActivity().findViewById(R.id.lin_add_dns));
                    builder = new android.support.v7.app.AlertDialog.Builder(ctx);
                    builder.setView(layout);
                    alertDialog = builder.create();
                    alertDialog.show();
                    alertDialog.getWindow().setBackgroundDrawableResource(R.drawable.dialog_bg);
                    txt_add_dns = (TextView) layout.findViewById(R.id.txt_add_dns);
                    et_name = (EditText) layout.findViewById(R.id.et_name);
                    et_dns = (EditText) layout.findViewById(R.id.et_ip);
                    Fonts.setHelveticaFont(ctx, txt_add_dns);
                    btn_submit = (Button) layout.findViewById(R.id.btn_submit);
                    Fonts.setHelveticaFont(ctx, btn_submit);
                    InputFilter[] filters = new InputFilter[1];
                    filters[0] = new InputFilter() {
                        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
                            if (end > start) {
                                String destTxt = dest.toString();
                                String resultingTxt = destTxt.substring(0, dstart) + source.subSequence(start, end) + destTxt.substring(dend);
                                if (!resultingTxt.matches("^\\d{1,3}(\\.(\\d{1,3}(\\.(\\d{1,3}(\\.(\\d{1,3})?)?)?)?)?)?")) {
                                    return "";
                                } else {
                                    String[] splits = resultingTxt.split("\\.");
                                    for (int i = 0; i < splits.length; i++) {
                                        if (Integer.valueOf(splits[i]) > 255) {
                                            return "";
                                        }
                                    }
                                }
                            }
                            return null;
                        }
                    };
                    et_dns.setFilters(filters);
                    btn_submit.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Fonts.setHelveticaFont(ctx, et_name);
                            Fonts.setHelveticaFont(ctx, et_dns);
                            et_dns.setRawInputType(InputType.TYPE_CLASS_NUMBER);

                            if (!et_name.getText().toString().equalsIgnoreCase("") && !et_dns.getText().toString().equalsIgnoreCase("")) {
                                String name = et_name.getText().toString();
                                String dns = et_dns.getText().toString();
                                IPAddressValidator iptester = new IPAddressValidator();

                                boolean valid = iptester.validate(dns);
                                if (valid) {
                                    dataBaseHelper.addUserDns(name, dns);
                                   // dnsListAdapter.notifyDataSetChanged();
                                    alertDialog.dismiss();
                                    hideKeyboard(getActivity());

                                } else {
                                    Toast.makeText(ctx, "Invalid IP Address", Toast.LENGTH_LONG).show();
                                }
                            } else {
                                Toast.makeText(ctx, "Please enter IP Address and DNS Name", Toast.LENGTH_LONG).show();
                            }


                        }
                    });
                }
            });

这里的问题是什么?

**编辑:**单独检查每个编辑文本后,我发现第一个editext的键盘没有关闭。所以我添加了焦点更改监听器,当它失去焦点时,我调用了hide键盘。 我逐行调试,一切正常,调试器也进入隐藏键盘方法,但该代码无法隐藏键盘。是否还有其他方法可以隐藏片段中的键盘? 这是隐藏键盘方法中传递的上下文的问题吗?我们可以在android中获取警告对话框的上下文,因为当我调试它时显示主要活动的上下文,因为我将getActivity()作为参数传递。这是问题吗?

2 个答案:

答案 0 :(得分:0)

 public static void hideSoftKeyboard(Activity activity) {
    InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}  

创建此方法infragment并调用此方法,您希望在片段中隐藏键盘。

答案 1 :(得分:0)

隐藏键盘使用方法对我不起作用。我直接在提交按钮中添加了代码,这对我有用。这是我添加的内容

InputMethodManager im = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                                    im.hideSoftInputFromWindow(et_name.getWindowToken(), 0);
                                    InputMethodManager im1 = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                                    im1.hideSoftInputFromWindow(et_dns.getWindowToken(), 0);

这里et_dns和et_name是我的编辑文本