当我的ScrollView
布局和EditText
的活动开始时,EditText
会获得焦点并且Android OnScreen键盘会打开。
我怎能避免这种情况?
当我使用LinearLayout
而RelativeLayout
没有使用ScrollView
时,它就不会发生。
我已经尝试过这种方式,但它确实有效,但这不是一个好方法:
TextView TextFocus = (TextView) findViewById(R.id.MovileLabel);
TextFocus.setFocusableInTouchMode(true);
TextFocus.requestFocus();
接下来,您有一些我的布局有这个问题的示例,当此Activity启动时,焦点转到第一个EditText
,描述,Android键盘自动打开,这是非常烦人。
<?xml version="1.0" encoding="utf-8"?>
<ScrollView android:id="@+id/ScrollView01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10px">
<RelativeLayout
android:gravity="center_vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/UserLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="13px"
android:text="@string/userlabel"/>
<TextView
android:id="@+id/User"
android:layout_alignBaseline="@id/UserLabel"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="test"/>
</RelativeLayout>
<View
android:layout_gravity="center_horizontal"
android:layout_width="fill_parent"
android:layout_height="1dip"
android:background="#808080"
android:layout_marginTop="5px"
android:layout_marginBottom="12px"/>
<RelativeLayout
android:gravity="center_vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/DescriptionLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/desclabel"
android:layout_marginTop="13px"/>
<EditText
android:id="@+id/Description"
android:layout_alignBaseline="@id/DescriptionLabel"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="180px"/>
</RelativeLayout>
<RelativeLayout
android:gravity="center_vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/EmailLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/emaillabel"
android:layout_marginTop="13px"/>
<EditText
android:id="@+id/Email"
android:layout_alignBaseline="@+id/EmailLabel"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="180px"/>
</RelativeLayout>
<RelativeLayout
android:gravity="center_vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/MovilePhoneLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/movilephonelabel"
android:layout_marginTop="13px"/>
<EditText
android:id="@+id/MovilePhone"
android:layout_alignBaseline="@+id/MovilePhoneLabel"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:width="180px"/>
</RelativeLayout>
<View
android:layout_gravity="center_horizontal"
android:layout_width="fill_parent"
android:layout_height="1dip"
android:background="#808080"
android:layout_marginTop="5px"
android:layout_marginBottom="10px"/>
<RelativeLayout
android:gravity="center_vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/applybutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/apply"
android:width="100px"
android:layout_marginLeft="40dip"/>
<Button
android:id="@+id/cancelbutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cancel"
android:width="100px"
android:layout_alignBaseline="@+id/applybutton"
android:layout_alignParentRight="true"
android:layout_marginRight="40dip"/>
</RelativeLayout>
</LinearLayout>
</ScrollView>
答案 0 :(得分:104)
如果您在活动开始时关注EditText
,则会自动打开OnScreenKeyboard。
您可以通过在活动的onCreate
方法中添加以下内容来阻止这种情况。
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
答案 1 :(得分:22)
如果你想编辑AndroidManifest:
<activity
android:name=".Dades"
android:label="@string/app_name"
android:windowSoftInputMode="stateHidden">
行android:windowSoftInputMode="stateHidden"
是阻止键盘焦点的行。
答案 2 :(得分:16)
另一种方法是添加LinearLayout:
android:focusable="true"
android:focusableInTouchMode="true"
让我说明一下
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
仍然做同样的事情,但光标仍在那里。
答案 3 :(得分:0)
您也可以使用以下声明,
(适用EditTextName).setInputType(0)强> 的
它将永久隐藏特定Edittext的默认键盘,即使在EditText Touch或Click。
答案 4 :(得分:0)
这将是不适当的行为
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
但它会顺利完成(为此活动在manifest
中完成
android:windowSoftInputMode="stateHidden"