20

编辑:我需要使用键盘,但它隐藏了我的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" .../>

这很好用。除了键盘会隐藏页面下方的 EditText。

在此处输入图像描述

我一遍又一遍地阅读:

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

尝试了这些建议,但是当调用活动时键盘是可见的,这是我不想要的。它也不起作用。也许是因为它是一个片段?

SoftKeyboard 隐藏 EditText

Android 键盘隐藏 EditText

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

编辑:这适用于平板电脑,只有一个键盘选项,可以更改语言。


编辑:我的解决方案

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

4

9 回答 9

8

尝试使用WindowsSoftInputModeas adjustpanonly。

例如:

android:windowSoftInputMode="adjustPan" 
于 2015-07-15T10:46:05.380 回答
5

尝试在此SO 答案中提到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);
}
于 2015-07-13T21:16:55.167 回答
4

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

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

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

于 2015-07-14T03:24:03.500 回答
3

我已经尝试过这段代码并解决了我的问题。

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
于 2016-09-19T07:14:38.803 回答
2

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

正是Petey 的评论让我探索了这个解决方案。

您使用的 IME 有它自己的“浮动”布局,您可以使用 Google 键盘等内置 IME 尝试您的代码,或者将您的 IME 设置为正常的全角布局吗?

所以我想,无论怎么玩视图布局都不会影响具有独立布局的软键盘。

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

它甚至适用于 Android Manifest:

android:windowSoftInputMode="stateHidden"

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

编辑更新

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

于 2015-07-14T11:27:22.123 回答
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">
于 2015-07-14T05:15:17.423 回答
0

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

于 2019-07-04T10:24:53.670 回答
0

在显示您的Snackbar小部件之前,像这样隐藏键盘,

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(); 
}
于 2020-08-11T08:33:28.797 回答
-1

对我有用的是在我的 FrameLayout 中以与您相同的方式使用 ScrollView,我在其中添加了这个属性:android:windowSoftInputMode="adjustPan"。最后,它看起来像这样并且它正在工作。我不需要以编程方式更改任何内容:

 <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>
于 2016-04-03T17:45:06.783 回答