ScrollView
レイアウトとEditText
sを使用したアクティビティが開始すると、EditText
sにフォーカスが移り、Android OnScreenキーボードが開きます。
どうすればそれを回避できますか?
LinearLayout
なしでRelativeLayout
とScrollView
を使用していたとき、それは起こりません。
私はこの方法を試してみましたが、うまくいきましたが、それを行うには良い方法ではありません。
TextView TextFocus = (TextView) findViewById(R.id.MovileLabel);
TextFocus.setFocusableInTouchMode(true);
TextFocus.requestFocus();
次に、この問題のあるレイアウトの例をいくつか示します。このアクティビティが開始すると、フォーカスは最初の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>
アクティビティの開始時にEditText
にフォーカスがある場合、AndroidはOnScreenKeyboardを自動的に開きます。
アクティビティのonCreate
メソッドに以下を追加することで、これを防ぐことができます。
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
AndroidManifestを編集する場合:
<activity
Android:name=".Dades"
Android:label="@string/app_name"
Android:windowSoftInputMode="stateHidden">
この線 Android:windowSoftInputMode="stateHidden"
はキーボードのフォーカスを妨げるものです。
別の方法は、LinearLayoutを追加することです。
Android:focusable="true"
Android:focusableInTouchMode="true"
私にそれを示しさせてください
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
まだ同じことをしますが、カーソルはまだそこにあります。
これは不適切な動作になります
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
しかし、それはスムーズに行われます(そのアクティビティの場合はmanifest
で行います)
Android:windowSoftInputMode="stateHidden"
以下のステートメントも使用できます。
(EditTextName).setInputType(0)
editText TouchまたはClickでも、特定のEdittextのデフォルトキーボードを永久に非表示にします。