我的应用上有一项活动,需要用户在相关字段中输入他们的电子邮件和密码。当活动开始时,第一个字段被聚焦并且键盘弹出,这很好,这基本上应该发生。
但我有两个问题:
如果用户关闭键盘,然后点击其中一个EditText字段,则不会再出现任何键盘。
如果用户点击其中一个EditText字段以外的任何地方,键盘应该像在HTML移动网站上那样关闭。
我的XML布局文件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:background="@drawable/home_background">
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/scrollView"
android:layout_gravity="left|top"
android:focusableInTouchMode="true" >
<LinearLayout
android:orientation="vertical"
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_gravity="center">
<EditText
android:inputType="textEmailAddress"
android:id="@+id/email"
android:hint="@string/email"
style="@style/basic_field"
android:focusable="true"
android:focusableInTouchMode="true"/>
<EditText
android:inputType="textPassword"
android:id="@+id/password"
android:hint="@string/password"
style="@style/basic_field"
android:focusable="true"
android:focusableInTouchMode="true" />
<Button
style = "@style/basic_button"
android:text="@string/login"
android:id="@+id/login_button" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/forgot_pass"
android:id="@+id/forgot_password"
android:background="@android:color/transparent"
android:textColor="@color/red"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/forgot_email"
android:id="@+id/forgot_email"
android:background="@android:color/transparent"
android:textColor="@color/red" />
<Button
style = "@style/basic_button"
android:text="@string/register"
android:id="@+id/reg_button" />
</LinearLayout>
</ScrollView>
</FrameLayout>
我的清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="uk.org.r1d.ownitall" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar" >
/// MAIN LANDING PAGE
<activity
android:name=".login"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar"
android:windowSoftInputMode="stateAlwaysHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
/// SIGN UP MAIN PAGE
<activity
android:name=".signUpPage"
android:label="@string/everyspotfind"
android:theme="@android:style/Theme.NoTitleBar"
android:windowSoftInputMode="stateVisible|adjustUnspecified">
<intent-filter>
<action android:name="android.view.InputMethod" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
我尝试过添加,但这没什么区别。并且还手动打开键盘输入:
editText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
editText.post(new Runnable() {
@Override
public void run() {
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
}
});
}
});
editText.requestFocus();