我有一个片段,在该片段中有一个添加按钮,在单击时触发对话框。在该对话框中,我有两个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()作为参数传递。这是问题吗?
答案 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是我的编辑文本