键盘隐藏片段中的EditTexts

时间:2015-07-11 04:15:43

标签: android android-fragments samsung-mobile window-soft-input-mode imeoptions

修改: 我需要使用键盘,但它隐藏了我的EditText,我需要它来滚动,所以键盘没有隐藏它。

我正在使用三星平板电脑。

我的风格:

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>

已经提出了类似的问题,但我没有找到有效的答案。

我有一个项目,它使用附加到一个活动的许多片段。 在我的活动清单中:

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" .../>

这很有效。除了 键盘隐藏位于页面下方的EditTexts。

enter image description here

我一遍又一遍地读到这个:

http://developer.android.com/reference/android/widget/TextView.html#attr_android:imeOptions

尝试了这些建议,但是在调用活动时可以看到键盘,这是我不想要的。它也行不通。也许是因为它是片段?

SoftKeyboard hiding EditText

Android Keyboard hides EditText

我一直在尝试制定动态解决方案。任何帮助表示赞赏。

编辑:这是在平板电脑上使用,只有一个键盘选项,语言更改。

编辑:我的解决方案

我通过安装另一个软键盘解决了这个问题。 https://code.google.com/p/softkeyboard/wiki/HowTo

9 个答案:

答案 0 :(得分:7)

尝试仅将WindowsSoftInputMode用作adjustpan

例如:

android:windowSoftInputMode="adjustPan" 

答案 1 :(得分:4)

尝试在此SO answer中提及的片段InputMethodManager.hideSoftInputFromWindow()功能期间致电onActivityCreated()

@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);
}

答案 2 :(得分:2)

您可以尝试将其放入片段的onActivityCreated中:

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

这不应该在使用片段加载或开始您的活动时使键盘。

答案 3 :(得分:2)

我通过谷歌游戏商店安装另一个软键盘解决了这个问题。

Petey's评论让我探索了这个解决方案。

  

您使用的IME具有自己的“浮动”布局,您可以使用内置IME(如Google键盘)尝试代码,还是将IME设置为正常的全宽布局?

所以我想,视频布局的播放量不会影响具有独立布局的软键盘。

我使用了这个链接https://code.google.com/p/softkeyboard/wiki/HowTo

它甚至适用于Android Manifest:

android:windowSoftInputMode="stateHidden"

然后我使用imeoptions来控制视图中编辑器光标的流程。

修改更新

我刚刚在一个没有品牌的Android平板电脑上试过这个应用程序,它带有一个通用的Android键盘,它可以工作,无需改变任何东西。三星默认键盘似乎很痛苦。

答案 4 :(得分:1)

将其更改为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">

答案 5 :(得分:1)

我已尝试过此代码并解决了我的问题。

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

答案 6 :(得分:0)

请记住,隐藏键盘不适用于 getActivity()。getWindow()。setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

答案 7 :(得分:0)

在显示小吃栏小部件之前,先隐藏这样的键盘,

public void showSnackBar(){ 
InputMethodManager manager = (InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE);
manager.hideSoftInputFromWindow(getView().getWindowToken(),0); 
Snackbar snackbar = Snackbar.make(getView(), "Some message!", Snackbar.LENGTH_INDEFINITE).show(); 
}

答案 8 :(得分:-1)

对我来说有用的是使用ScrollView,就像我在FrameLayout中一样,我添加了这个属性:android:windowSoftInputMode =&#34; adjustPan&#34;。最后,它看起来像这样,它正在工作。我不需要以编程方式更改任何内容:

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ProductFragment"
    android:windowSoftInputMode="adjustPan">

    <ScrollView
        android:layout_height="wrap_content"
        android:layout_width="match_parent">
      ...
    </ScrollView>
</FrameLayout>