我有一个要求,我有一个MainActivity。从这个活动中我实例化了4个片段(让我们说FragmentA,FragmentB,FragmentC,FragmentD。
这四个碎片中的一个;在3个片段上(我们说FragmentA,FragmentB,FragmentC),我想将MainActivity的windowsoftinputmode()设置为SOFT_INPUT_ADJUST_PAN
,以便窗口可以调整大小。
在一个Fragment()上让我们说FragmentD),我想将MainActivity的windowsoftinputmode()设置为SOFT_INPUT_ADJUST_NOTHING
。
所以我所做的是,在每个Fragment的onViewCreated()方法中,我通过更改LayoutParams标志来执行以下代码行:
((MainActivity)getActivity()).getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
或
((MainActivity)getActivity()).getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
问题是它无法正常工作,我无法正确设置软件入口,我无法阻止窗口调整大小。
当我在MainActivity的onCreate()中执行它们时,相同的代码行完美地工作,如下所示:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
但是为所有四个片段设置了值。清单中的我的MainActivity声明是:
<activity
android:name="com.test.MainActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait"/>
在这方面,有人能帮助我做错吗?我希望不同的碎片有不同的行为。
答案 0 :(得分:9)
尝试这个我发现:
旨在为标签使用两种不同的模式。模式为SOFT_INPUT_ADJUST_RESIZE
和SOFT_INPUT_ADJUST_NOTHING
。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
上面的代码行本身并不起作用。应用程序始终处于ADJUST_NOTHING状态。但是,如果将windowSoftInputMode =“adjustResize”插入到AndroidManifest.xml文件中的标记中,则应用程序窗口将调整为默认值。此外,当您在片段
中调用以下行时getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
它将按预期运行,并且不会调整任何大小。 我的工作!
答案 1 :(得分:1)
添加iBEK's评论的实施。 要使WindowsSoftInputMode正常工作,还需要做两件事:
首先添加以下标志:
export default function configureStore(initialState = {}, history, session) {
// [cut]
const store = createStore(
createReducer(),
fromJS(initialState),
composeEnhancers(...enhancers)
);
// [cut]
return store;
}
在AndroidManifest.xml文件中,如下所示:
windowSoftInputMode="adjustResize"
指定此标志对于WindowsSoftInputMode起作用是疯狂的。
其次在您的Activity的onCreate中添加以下内容,在这种情况下为TestActivity:
<activity
android:name="com.test.TestActivity"
android:windowSoftInputMode="adjustResize"/>
现在它应该适用于活动托管的所有片段..我希望这能回答你的问题@iBEK。