web-dev-qa-db-ja.com

フラグメントのEditTextを非表示にするキーボード

編集:キーボードを使用する必要がありますが、EditTextが非表示になっています。スクロールしてキーボードが非表示にしないようにする必要があります。

Samsungタブレットを使用しています。

私のスタイル:

parent="Android:Theme.Holo.NoActionBar.Fullscreen"

EditTextフィールドは、次のようにスクロール可能なビューにあります。

フラグメントのレイアウト:

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
         Android:layout_height="match_parent"
         Android:layout_width="match_parent"
         Android:paddingBottom="@dimen/activity_vertical_margin"
         Android:paddingLeft="@dimen/activity_horizontal_margin"
         Android:paddingRight="@dimen/activity_horizontal_margin"
         Android:paddingTop="@dimen/activity_vertical_margin">

<ScrollView
    Android:layout_height="wrap_content"
    Android:layout_width="match_parent">

    <LinearLayout
        Android:layout_height="match_parent"
        Android:layout_marginBottom="20dp"
        Android:layout_width="match_parent"
        Android:orientation="vertical">

        <TextView
            Android:layout_height="wrap_content"
            Android:layout_marginTop="20dp"
            Android:layout_width="wrap_content"
            Android:text="@string/depot_code"/>

        <EditText
            Android:hint="@string/enter_depot_code"
            Android:id="@+id/etlocationId"
            Android:imeOptions="actionNext"
            Android:inputType="number"
            Android:layout_height="wrap_content"
            Android:layout_marginTop="20dp"
            Android:layout_width="wrap_content"
            Android:lines="1"
            Android:maxLength="12"
            Android:singleLine="true">

            <requestFocus/>
        </EditText>

        <TextView
            Android:layout_height="wrap_content"
            Android:layout_marginTop="20dp"
            Android:layout_width="wrap_content"
            Android:text="@string/name"/>

        <EditText
            Android:hint="@string/enter_name"
            Android:id="@+id/etname"
            Android:imeOptions="actionNext"
            Android:inputType="textPersonName"
            Android:layout_height="wrap_content"
            Android:layout_marginTop="20dp"
            Android:layout_width="wrap_content"
            Android:lines="1"
            Android:maxLength="24"
            Android:singleLine="true"/>

        <TextView
            Android:layout_height="wrap_content"
            Android:layout_marginTop="20dp"
            Android:layout_width="wrap_content"
            Android:text="@string/street"/>

        <EditText
            Android:hint="@string/enter_street"
            Android:id="@+id/etstreet"
            Android:imeOptions="actionNext"
            Android:inputType="textPostalAddress"
            Android:layout_height="wrap_content"
            Android:layout_marginTop="20dp"
            Android:layout_width="wrap_content"
            Android:lines="1"
            Android:maxLength="24"
            Android:singleLine="true"/>

        <TextView
            Android:layout_height="wrap_content"
            Android:layout_marginTop="20dp"
            Android:layout_width="wrap_content"
            Android:text="@string/suburb"/>

        <EditText
            Android:hint="@string/enter_suburb"
            Android:id="@+id/etsuburb"
            Android:layout_height="wrap_content"
            Android:layout_marginTop="20dp"
            Android:layout_width="wrap_content"
            Android:lines="1"
            Android:maxLength="24"
            Android:singleLine="true"/>

        <TextView
            Android:layout_height="wrap_content"
            Android:layout_marginTop="20dp"
            Android:layout_width="wrap_content"
            Android:text="@string/state"/>

        <Spinner
            Android:focusable="true"
            Android:focusableInTouchMode="true"
            Android:id="@+id/spinner"
            Android:imeOptions="actionNext"
            Android:layout_height="wrap_content"
            Android:layout_marginTop="20dp"
            Android:layout_width="fill_parent"
            Android:spinnerMode="dropdown"/>

        <TextView
            Android:layout_height="wrap_content"
            Android:layout_marginTop="20dp"
            Android:layout_width="wrap_content"
            Android:text="@string/phone"/>

        <EditText
            Android:hint="@string/enter_phone"
            Android:id="@+id/etphone"
            Android:imeOptions="actionDone"
            Android:inputType="phone"
            Android:layout_height="wrap_content"
            Android:layout_marginTop="20dp"
            Android:layout_width="wrap_content"
            Android:lines="1"
            Android:maxLength="12"
            Android:singleLine="true"/>

        <Button
            Android:id="@+id/btnadd"
            Android:layout_gravity="center"
            Android:layout_height="wrap_content"
            Android:layout_marginTop="20dp"
            Android:layout_width="wrap_content"
            Android:text="@string/add"/>
    </LinearLayout>
</ScrollView>
</FrameLayout>

アクティビティのレイアウト:

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
          Android:id="@+id/tech_controller"
          Android:layout_height="match_parent"
          Android:layout_width="match_parent"
          Android:orientation="vertical"
          Android:paddingBottom="@dimen/activity_vertical_margin"
          Android:paddingLeft="@dimen/activity_horizontal_margin"
          Android:paddingRight="@dimen/activity_horizontal_margin"
          Android:paddingTop="@dimen/activity_vertical_margin">

< .../ Layouts. ../>

<FrameLayout
    Android:id="@+id/second"
    Android:layout_height="match_parent"
    Android:layout_width="fill_parent"/>
</LinearLayout>

同様の質問がされましたが、私はうまくいく答えを見つけていません。

1つのアクティビティにアタッチされた多くのフラグメントを使用するプロジェクトがあります。私の活動のマニフェストでは:

Android:windowSoftInputMode="stateHidden"

一部のフラグメントにはユーザー入力が必要です。

私が使用するフラグメントレイアウトでは:

各フラグメントは次のようにネストされます。

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_height="match_parent"
    Android:layout_width="match_parent" .../>

<ScrollView
    Android:layout_height="match_parent"
    Android:layout_width="match_parent">

    <LinearLayout
        Android:layout_height="match_parent"
        Android:layout_width="match_parent"
        Android:orientation="vertical">

        <EditText
            Android:imeOptions="actionNext"
            or
            Android:imeOptions="actionDone" .../>

これはうまくいきます。キーボード以外は、ページの下に配置されているEditTextを非表示にします。

enter image description here

私はこれを何度も読みました:

http://developer.Android.com/reference/Android/widget/TextView.html#attr_Android:imeOptions

これらの提案を試しましたが、アクティビティが呼び出されたときにキーボードが表示されますが、これは望ましくありません。また、機能しません。多分それは断片なのでしょうか?

EditTextを隠すSoftKeyboard

AndroidキーボードはEditTextを非表示にします

私は動的な解決策を考え出そうとしています。どんな助けでもありがたいです。

edit:これはタブレットで使用するためのものであり、言語が変更されたキーボードオプションは1つしかありません。


編集:MY SOLUTION

別のソフトキーボードをインストールすることで解決しました。 https://code.google.com/p/softkeyboard/wiki/HowTo

17
Yvette Colomb

この中で言及されているフラグメントのInputMethodManager.hideSoftInputFromWindow()関数の実行中にonActivityCreated()を呼び出そうとすると、 SO answer

_@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    AppUtil.hideKeyboard(getActivity(), getView());
}
_

hideKeyboard()は次のようになります

_public static void hideKeyboard(Activity activity, View viewToHide) {
    InputMethodManager imm = (InputMethodManager) activity
            .getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(viewToHide.getWindowToken(), 0);
}
_
5
Yenchi

WindowsSoftInputModeadjustpanとしてのみ使用してください。

例:

Android:windowSoftInputMode="adjustPan" 
8
Vishwa

これをフラグメントのonActivityCreatedに入れてみてください:

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

これにより、フラグメントを使用したアクティビティのロードまたは開始時にキーボードが作成されません。

2
Joey

Google Playストアから別のソフトキーボードをインストールして問題を解決しました。

Petey's コメントでこのソリューションを探索しました。

使用したIMEには独自の「フローティング」レイアウトがあります。Googleキーボードなどの組み込みのIMEを使用してコードを試したり、IMEを通常の全幅レイアウトに設定したりできますか?

したがって、ビューのレイアウトをいじっても、独立したレイアウトのソフトキーボードには影響しませんでした。

私はこのリンクを使用しました https://code.google.com/p/softkeyboard/wiki/HowTo

Android Manifest:

Android:windowSoftInputMode="stateHidden"

次に、imeoptionsを使用して、ビュー内のエディターカーソルのフローを制御します。

編集更新

私はノーブランドAndroidタブレットでアプリを試してみました。これには、一般的なAndroidキーボードが付属しており、変更することなく機能します。 。Samsungのデフォルトのキーボードは痛いようです。

2
Yvette Colomb

このコードを試して問題を解決しました。

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
1
Saikat1529

これをLinearLayoutに変更

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_height="match_parent"
    Android:layout_width="match_parent"
    Android:orientation="vertical"
    Android:paddingBottom="@dimen/activity_vertical_margin"
    Android:paddingLeft="@dimen/activity_horizontal_margin"
    Android:paddingRight="@dimen/activity_horizontal_margin"
    Android:paddingTop="@dimen/activity_vertical_margin">

(および終了タグ)。向きに注意してください。

マニフェストを更新これを削除

<application ... >
    <activity
      Android:windowSoftInputMode="stateVisible|adjustResize|adjustPan">
        ...
    </activity>
    ...
</application>

これを変更(高さ)

<ScrollView
    Android:layout_height="wrap_content"
    Android:layout_width="match_parent">
1
ps95

非表示のキーボードはgetActivity()。getWindow()。setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS、WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);では機能しないことに注意してください。

0
Terranology