<activity> windowSoftInoutMode 不适用于 ViewPager 中的片段

Posted

技术标签:

【中文标题】<activity> windowSoftInoutMode 不适用于 ViewPager 中的片段【英文标题】:<activity> windowSoftInoutMode is not working for fragment which is in ViewPager 【发布时间】:2018-08-21 11:54:44 【问题描述】:

我有一个Activity,它显示了一个人的联系方式。它包含 CordinatorLayout(包含标题)、ViewPager 以及 TabLayout

其中一个片段在底部包含EditText,它包含在 ViewPager 中。

我为此活动使用以下主题。 `

    <style name="ToolbarAppThemeV4WithoutActionBar" parent="ToolbarAppThemeV4">
    <item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
        <item name="colorPrimary">@color/colorPrimaryDesignV4</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:textColorPrimary">@color/color_v4_primary</item>
        <item name="android:actionMenuTextColor">@color/white</item>
        <item name="android:textColorSecondary">@color/color_v4_secondary</item>
        <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
        <item name="alertDialogTheme">@style/Theme.AppCompat.Light.Dialog</item>
        <item name="windowActionModeOverlay">true</item>
        <item name="actionModeBackground">@color/color_multiselectTopBarbackground</item>
        <item name="actionModeCloseDrawable">@drawable/in_ic_back_white</item>
        <item name="actionModeStyle">@style/SomeStyle</item>
        <item name="popupMenuStyle">@style/PopupmenuV4</item>
        <item name="colorAccent">@color/colorPrimaryDesignV4</item>
        <item name="android:windowTranslucentStatus">true</item>
    <item name="android:actionOverflowButtonStyle">@style/MyActionButtonOverflow</item>
    </style>

`

我正在尝试使用 android:windowSoftInputMode="adjustPan" 和 "adjustResize" 以及所有可能的组合,但它没有正确显示。

请假设以下片段屏幕显示在 ViewPager 中。 实际结果:

预期结果:

任何人都可以帮助我吗?我在清单中的活动的 windowSoftInputMode 中尝试了所有可能的组合。但没有任何效果。

请注意,如果我在不同的活动中使用相同的片段,它是有效的。尝试使用相同的主题,但在此活动中不起作用。

和ViewPager、Fragment、Cordinator Layout 有关系吗?请帮帮我。

包含 EditText 输入字段的 XML 布局: `

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_
    android:layout_
    android:background="@color/white"
    app:contentInsetLeft="0dp"
    app:contentInsetStart="0dp">

    <RelativeLayout
        android:layout_
        android:layout_>

        <ImageView
            android:id="@+id/toolbar_back"
            android:layout_
            android:layout_
            android:layout_centerVertical="true"
            android:layout_marginLeft="4dp"
            android:layout_marginStart="4dp"
            android:background="?android:attr/actionBarItemBackground"
            android:scaleType="center"
            android:src="@drawable/in_ic_back_red" />

        <TextView
            android:id="@+id/comments_toolbar_text"
            android:layout_
            android:layout_
            android:layout_centerVertical="true"
            android:layout_marginLeft="8dp"
            android:layout_marginStart="8dp"
            android:layout_toEndOf="@+id/toolbar_back"
            android:layout_toRightOf="@+id/toolbar_back"
            android:textColor="@color/colorPrimaryDesignV4"
            android:textSize="@dimen/font_size_text_medium" />

        <View
            style="@style/HorizontalDividerV4"
            android:layout_alignParentBottom="true" />

    </RelativeLayout>

</android.support.v7.widget.Toolbar>

<RelativeLayout
    android:layout_
    android:layout_
    android:layout_above="@+id/bottom_bar"
    android:layout_below="@+id/toolbar">

    <RelativeLayout
        android:layout_
        android:layout_
        android:visibility="gone"
        tools:visibility="visible">

        <ProgressBar
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_
            android:layout_
            android:indeterminate="true" />

    </RelativeLayout>

    <FrameLayout
        android:id="@+id/master_container"
        android:layout_
        android:layout_
        android:background="@color/white">

        <!--contains loader, error or empty states-->
        <ScrollView
            android:layout_
            android:layout_>

            <LinearLayout
                android:layout_
                android:layout_
                android:orientation="vertical" />
        </ScrollView>

        <android.support.v7.widget.RecyclerView
            android:layout_
            android:layout_ />


        <android.support.design.widget.CoordinatorLayout
            android:layout_
            android:layout_
            android:layout_gravity="bottom|end"
            android:layout_margin="8dp"
            android:orientation="vertical"
            android:padding="3dp"
            android:scaleType="centerInside">

            <RelativeLayout
                android:id="@+id/fab"
                android:layout_
                android:layout_
                android:layout_marginBottom="5dp"
                android:layout_marginEnd="5dp"
                android:layout_marginLeft="5dp"
                android:layout_marginRight="5dp"
                android:layout_marginStart="5dp"
                android:layout_marginTop="12dp"
                android:background="@drawable/rounded_circle_fab"
                android:elevation="3dp">

                <ImageView
                    android:layout_
                    android:layout_
                    android:layout_centerInParent="true"
                    android:src="@drawable/in_ic_img_down_red_svg" />

            </RelativeLayout>

            <TextView
                android:layout_
                android:layout_
                android:layout_gravity="center_horizontal"
                android:background="@drawable/rounded_circle_green"
                android:elevation="3dp"
                android:foregroundGravity="top"
                android:gravity="center"
                android:textColor="@color/white"
                android:textSize="@dimen/font_size_text"
                android:textStyle="bold"
                android:visibility="gone"
                app:layout_anchor="@id/fab"
                app:layout_anchorGravity="top|center_horizontal"
                tools:text="4"
                tools:visibility="visible" />

        </android.support.design.widget.CoordinatorLayout>

    </FrameLayout>

    <RelativeLayout
        android:layout_
        android:layout_
        android:layout_alignParentBottom="true"
        android:visibility="gone"
        tools:visibility="visible">

        <ProgressBar
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_
            android:layout_
            android:indeterminate="true" />

    </RelativeLayout>

</RelativeLayout>

<FrameLayout
    android:id="@+id/bottom_bar"
    android:layout_
    android:layout_
    android:layout_alignParentBottom="true"
    android:background="@color/white"
    android:paddingTop="6dp">

    <View style="@style/HorizontalDividerV4" />

    <RelativeLayout
        android:id="@+id/actions_container"
        android:layout_
        android:layout_
        android:layout_marginTop="1dp"
        android:background="@color/white">

        <ViewFlipper
            android:layout_
            android:layout_
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true">

            <ImageView
                android:layout_
                android:layout_
                android:scaleType="center"/>

            <ImageView
                android:layout_
                android:layout_
                android:scaleType="centerInside"/>

        </ViewFlipper>

        <View
            android:id="@+id/vertical_divider"
            android:layout_
            android:layout_
            android:layout_centerVertical="true"
            android:background="@color/color_divider_v4" />

        <EditText
            android:layout_
            android:layout_
            android:layout_centerVertical="true"
            android:layout_marginBottom="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:background="@color/white"
            android:inputType="textMultiLine|textAutoCorrect|textCapSentences"
            android:maxLines="3"
            android:minLines="1" />

        <ViewFlipper
            android:layout_
            android:layout_
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true">

            <ImageView
                android:layout_
                android:layout_
                android:scaleType="centerInside"/>

            <ImageView
                android:layout_
                android:layout_
                android:scaleType="centerInside" />

        </ViewFlipper>

        <View
            android:layout_
            android:layout_
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_margin="6dp"
            android:background="@drawable/rounded_circle_green"
            android:visibility="gone"
            tools:visibility="visible" />

    </RelativeLayout>

    <LinearLayout
        android:layout_
        android:layout_
        android:layout_marginTop="1dp"
        android:background="@color/light_green_v4_bg"
        android:gravity="center"
        android:visibility="gone"
        tools:visibility="gone">

        <TextView
            android:layout_
            android:layout_
            android:textColor="@color/color_v4_secondary"
            android:textSize="@dimen/font_size_text"/>

    </LinearLayout>

</FrameLayout>

</RelativeLayout>`

【问题讨论】:

在onCreateView中使用这个getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); Layout is not floating above keyboard in Fragment in Android的可能重复 【参考方案1】:

android:windowSoftInputMode="adjustPan 就是这样工作的。你需要的是android:windowSoftInputMode="adjustResize"

尝试在运行时在片段中设置它并根据需要进行更改。

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

【讨论】:

应该可以。可能是您的布局有问题添加您的布局有问题。 它与视图层次结构有关吗?因为编辑文本包含在一个fragment中,而另一个fragment中又包含在ViewPager中,最后Activity最终变成了图片。 如果片段中存在Edittext 将片段根设为RelativeLayout 并在Fragment 中设置SoftInputMode 让我试试这个 已经在 RelativeLayout 中并尝试设置它的运行时间,但无法正常工作。我是否需要将整个视图层次结构设为这样?【参考方案2】:

试试:

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

【讨论】:

以上是关于<activity> windowSoftInoutMode 不适用于 ViewPager 中的片段的主要内容,如果未能解决你的问题,请参考以下文章

<activity> 与 <activity/>。有啥区别? [复制]

AAPT:错误:在 <manifest><application><activity> 中发现了意外元素 <activity>

activity发布流程定义

工作流——activiti

ssm+activiti+maven

Android 配置文件<activity>元素