Android 如何在状态栏隐藏时强制WindowsOfInputMode调整大小

Android 如何在状态栏隐藏时强制WindowsOfInputMode调整大小,android,android-activity,window-soft-input-mode,Android,Android Activity,Window Soft Input Mode,我一直在努力使这一点发挥作用。只要我保持状态栏可见,应用程序就可以调整大小。根据这一点,这是一个android错误,但问题已经解决,但尚未解决 <!-- this control should be position static --> <TextView android:layout_height="50dp" android:layout_width="fill_parent" android:background=

我一直在努力使这一点发挥作用。只要我保持状态栏可见,应用程序就可以调整大小。根据这一点,这是一个android错误,但问题已经解决,但尚未解决

<!-- this control should be position static -->
    <TextView
        android:layout_height="50dp"
        android:layout_width="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:text="static window at top"
        android:gravity="center"
        />

<!-- the resizable view  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal">
</android.support.v7.widget.RecyclerView>

<!-- use this EditText box to call softKeyboard-->
<android.support.v7.widget.AppCompatEditText
    android:id="@+id/cv_bottom_bar_edit"
    style="@style/Widget.AppCompat.AutoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="18sp"
    android:background="@color/colorPrimaryDark"
    android:gravity="center"
    />
从我读到的所有资料来看,玩插图应该可以达到目的,但我无法付诸实践。我也不确定是否应该走这条路

<!-- this control should be position static -->
    <TextView
        android:layout_height="50dp"
        android:layout_width="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:text="static window at top"
        android:gravity="center"
        />

<!-- the resizable view  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal">
</android.support.v7.widget.RecyclerView>

<!-- use this EditText box to call softKeyboard-->
<android.support.v7.widget.AppCompatEditText
    android:id="@+id/cv_bottom_bar_edit"
    style="@style/Widget.AppCompat.AutoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="18sp"
    android:background="@color/colorPrimaryDark"
    android:gravity="center"
    />
接下来,我将下面的代码添加到OnCreate中

ViewCompat.setOnApplyWindowInsetsListener(getWindow().getDecorView().getRootView(), new OnApplyWindowInsetsListener() {
    @Override
    public WindowInsetsCompat onApplyWindowInsets(View view, WindowInsetsCompat insets) {

        ((ViewGroup.MarginLayoutParams) view.getLayoutParams()).topMargin =
            insets.getSystemWindowInsetTop();

        return insets.consumeSystemWindowInsets();
   }   
});     
<!-- this control should be position static -->
    <TextView
        android:layout_height="50dp"
        android:layout_width="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:text="static window at top"
        android:gravity="center"
        />

<!-- the resizable view  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal">
</android.support.v7.widget.RecyclerView>

<!-- use this EditText box to call softKeyboard-->
<android.support.v7.widget.AppCompatEditText
    android:id="@+id/cv_bottom_bar_edit"
    style="@style/Widget.AppCompat.AutoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="18sp"
    android:background="@color/colorPrimaryDark"
    android:gravity="center"
    />
它抛出异常:

<!-- this control should be position static -->
    <TextView
        android:layout_height="50dp"
        android:layout_width="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:text="static window at top"
        android:gravity="center"
        />

<!-- the resizable view  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal">
</android.support.v7.widget.RecyclerView>

<!-- use this EditText box to call softKeyboard-->
<android.support.v7.widget.AppCompatEditText
    android:id="@+id/cv_bottom_bar_edit"
    style="@style/Widget.AppCompat.AutoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="18sp"
    android:background="@color/colorPrimaryDark"
    android:gravity="center"
    />
java.lang.ClassCastException:android.view.WindowManager$LayoutParams 无法强制转换为android.view.ViewGroup$MarginLayoutParams

<!-- this control should be position static -->
    <TextView
        android:layout_height="50dp"
        android:layout_width="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:text="static window at top"
        android:gravity="center"
        />

<!-- the resizable view  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal">
</android.support.v7.widget.RecyclerView>

<!-- use this EditText box to call softKeyboard-->
<android.support.v7.widget.AppCompatEditText
    android:id="@+id/cv_bottom_bar_edit"
    style="@style/Widget.AppCompat.AutoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="18sp"
    android:background="@color/colorPrimaryDark"
    android:gravity="center"
    />
帖子还在继续,但我被困在这里,怀疑我是否走对了路

<!-- this control should be position static -->
    <TextView
        android:layout_height="50dp"
        android:layout_width="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:text="static window at top"
        android:gravity="center"
        />

<!-- the resizable view  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal">
</android.support.v7.widget.RecyclerView>

<!-- use this EditText box to call softKeyboard-->
<android.support.v7.widget.AppCompatEditText
    android:id="@+id/cv_bottom_bar_edit"
    style="@style/Widget.AppCompat.AutoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="18sp"
    android:background="@color/colorPrimaryDark"
    android:gravity="center"
    />
如果有人想尝试,请大声说出我正在使用的测试代码。 通过将
true
添加到AppTheme,在状态栏被删除之前工作正常

<!-- this control should be position static -->
    <TextView
        android:layout_height="50dp"
        android:layout_width="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:text="static window at top"
        android:gravity="center"
        />

<!-- the resizable view  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal">
</android.support.v7.widget.RecyclerView>

<!-- use this EditText box to call softKeyboard-->
<android.support.v7.widget.AppCompatEditText
    android:id="@+id/cv_bottom_bar_edit"
    style="@style/Widget.AppCompat.AutoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="18sp"
    android:background="@color/colorPrimaryDark"
    android:gravity="center"
    />
AndroidManifest.xml:

<!-- this control should be position static -->
    <TextView
        android:layout_height="50dp"
        android:layout_width="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:text="static window at top"
        android:gravity="center"
        />

<!-- the resizable view  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal">
</android.support.v7.widget.RecyclerView>

<!-- use this EditText box to call softKeyboard-->
<android.support.v7.widget.AppCompatEditText
    android:id="@+id/cv_bottom_bar_edit"
    style="@style/Widget.AppCompat.AutoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="18sp"
    android:background="@color/colorPrimaryDark"
    android:gravity="center"
    />
更新: 我将windowFullscreen属性从清单移动到AppTheme,因为Android没有从清单中读取它。

注意这一行:

<!-- this control should be position static -->
    <TextView
        android:layout_height="50dp"
        android:layout_width="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:text="static window at top"
        android:gravity="center"
        />

<!-- the resizable view  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal">
</android.support.v7.widget.RecyclerView>

<!-- use this EditText box to call softKeyboard-->
<android.support.v7.widget.AppCompatEditText
    android:id="@+id/cv_bottom_bar_edit"
    style="@style/Widget.AppCompat.AutoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="18sp"
    android:background="@color/colorPrimaryDark"
    android:gravity="center"
    />
((ViewGroup.MarginLayoutParams) view.getLayoutParams()).topMargin =
            insets.getSystemWindowInsetTop();//what's the parent of "view"
根据says的说法,您应该知道“视图”的父项是什么,例如,如果父项是
FrameLayout
,则执行以下操作:

<!-- this control should be position static -->
    <TextView
        android:layout_height="50dp"
        android:layout_width="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:text="static window at top"
        android:gravity="center"
        />

<!-- the resizable view  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal">
</android.support.v7.widget.RecyclerView>

<!-- use this EditText box to call softKeyboard-->
<android.support.v7.widget.AppCompatEditText
    android:id="@+id/cv_bottom_bar_edit"
    style="@style/Widget.AppCompat.AutoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="18sp"
    android:background="@color/colorPrimaryDark"
    android:gravity="center"
    />
((FrameLayout.LayoutParams) view.getLayoutParams()).topMargin =
                insets.getSystemWindowInsetTop();
如果父对象是relativelayout或linearlayout,也可以切换到如上所述的确定类型

<!-- this control should be position static -->
    <TextView
        android:layout_height="50dp"
        android:layout_width="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:text="static window at top"
        android:gravity="center"
        />

<!-- the resizable view  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal">
</android.support.v7.widget.RecyclerView>

<!-- use this EditText box to call softKeyboard-->
<android.support.v7.widget.AppCompatEditText
    android:id="@+id/cv_bottom_bar_edit"
    style="@style/Widget.AppCompat.AutoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="18sp"
    android:background="@color/colorPrimaryDark"
    android:gravity="center"
    />
已编辑:尝试以下操作:

<!-- this control should be position static -->
    <TextView
        android:layout_height="50dp"
        android:layout_width="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:text="static window at top"
        android:gravity="center"
        />

<!-- the resizable view  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal">
</android.support.v7.widget.RecyclerView>

<!-- use this EditText box to call softKeyboard-->
<android.support.v7.widget.AppCompatEditText
    android:id="@+id/cv_bottom_bar_edit"
    style="@style/Widget.AppCompat.AutoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="18sp"
    android:background="@color/colorPrimaryDark"
    android:gravity="center"
    />
((WindowManager.LayoutParams) view.getLayoutParams()).topMargin =
                    insets.getSystemWindowInsetTop();
请注意这一行:

<!-- this control should be position static -->
    <TextView
        android:layout_height="50dp"
        android:layout_width="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:text="static window at top"
        android:gravity="center"
        />

<!-- the resizable view  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal">
</android.support.v7.widget.RecyclerView>

<!-- use this EditText box to call softKeyboard-->
<android.support.v7.widget.AppCompatEditText
    android:id="@+id/cv_bottom_bar_edit"
    style="@style/Widget.AppCompat.AutoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="18sp"
    android:background="@color/colorPrimaryDark"
    android:gravity="center"
    />
((ViewGroup.MarginLayoutParams) view.getLayoutParams()).topMargin =
            insets.getSystemWindowInsetTop();//what's the parent of "view"
根据says的说法,您应该知道“视图”的父项是什么,例如,如果父项是
FrameLayout
,则执行以下操作:

<!-- this control should be position static -->
    <TextView
        android:layout_height="50dp"
        android:layout_width="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:text="static window at top"
        android:gravity="center"
        />

<!-- the resizable view  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal">
</android.support.v7.widget.RecyclerView>

<!-- use this EditText box to call softKeyboard-->
<android.support.v7.widget.AppCompatEditText
    android:id="@+id/cv_bottom_bar_edit"
    style="@style/Widget.AppCompat.AutoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="18sp"
    android:background="@color/colorPrimaryDark"
    android:gravity="center"
    />
((FrameLayout.LayoutParams) view.getLayoutParams()).topMargin =
                insets.getSystemWindowInsetTop();
如果父对象是relativelayout或linearlayout,也可以切换到如上所述的确定类型

<!-- this control should be position static -->
    <TextView
        android:layout_height="50dp"
        android:layout_width="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:text="static window at top"
        android:gravity="center"
        />

<!-- the resizable view  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal">
</android.support.v7.widget.RecyclerView>

<!-- use this EditText box to call softKeyboard-->
<android.support.v7.widget.AppCompatEditText
    android:id="@+id/cv_bottom_bar_edit"
    style="@style/Widget.AppCompat.AutoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="18sp"
    android:background="@color/colorPrimaryDark"
    android:gravity="center"
    />
已编辑:尝试以下操作:

<!-- this control should be position static -->
    <TextView
        android:layout_height="50dp"
        android:layout_width="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:text="static window at top"
        android:gravity="center"
        />

<!-- the resizable view  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal">
</android.support.v7.widget.RecyclerView>

<!-- use this EditText box to call softKeyboard-->
<android.support.v7.widget.AppCompatEditText
    android:id="@+id/cv_bottom_bar_edit"
    style="@style/Widget.AppCompat.AutoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="18sp"
    android:background="@color/colorPrimaryDark"
    android:gravity="center"
    />
((WindowManager.LayoutParams) view.getLayoutParams()).topMargin =
                    insets.getSystemWindowInsetTop();
}

<!-- this control should be position static -->
    <TextView
        android:layout_height="50dp"
        android:layout_width="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:text="static window at top"
        android:gravity="center"
        />

<!-- the resizable view  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal">
</android.support.v7.widget.RecyclerView>

<!-- use this EditText box to call softKeyboard-->
<android.support.v7.widget.AppCompatEditText
    android:id="@+id/cv_bottom_bar_edit"
    style="@style/Widget.AppCompat.AutoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="18sp"
    android:background="@color/colorPrimaryDark"
    android:gravity="center"
    />
从github上的问题中获取。对于一个普通的活动来说稍微简化了一些。从API21可以很好地处理纵向和横向,但是它没有比这更多的测试。小心使用

<!-- this control should be position static -->
    <TextView
        android:layout_height="50dp"
        android:layout_width="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:text="static window at top"
        android:gravity="center"
        />

<!-- the resizable view  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal">
</android.support.v7.widget.RecyclerView>

<!-- use this EditText box to call softKeyboard-->
<android.support.v7.widget.AppCompatEditText
    android:id="@+id/cv_bottom_bar_edit"
    style="@style/Widget.AppCompat.AutoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="18sp"
    android:background="@color/colorPrimaryDark"
    android:gravity="center"
    />
}

<!-- this control should be position static -->
    <TextView
        android:layout_height="50dp"
        android:layout_width="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:text="static window at top"
        android:gravity="center"
        />

<!-- the resizable view  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal">
</android.support.v7.widget.RecyclerView>

<!-- use this EditText box to call softKeyboard-->
<android.support.v7.widget.AppCompatEditText
    android:id="@+id/cv_bottom_bar_edit"
    style="@style/Widget.AppCompat.AutoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="18sp"
    android:background="@color/colorPrimaryDark"
    android:gravity="center"
    />

从github上的问题中获取。对于一个普通的活动来说稍微简化了一些。从API21可以很好地处理纵向和横向,但是它没有比这更多的测试。小心使用。

我两种都试过了。强制转换到活动顶部控件LinearLayout.MarginLayoutParams仍会抛出错误。WindowManager没有属性MarginLayoutParams。我可能在错误的观点上处理这个问题。我两个都试过了。强制转换到活动顶部控件LinearLayout.MarginLayoutParams仍会抛出错误。WindowManager没有属性MarginLayoutParams。我可能会在错误的观点上处理这个问题。
<!-- this control should be position static -->
    <TextView
        android:layout_height="50dp"
        android:layout_width="fill_parent"
        android:background="@color/colorPrimaryDark"
        android:text="static window at top"
        android:gravity="center"
        />

<!-- the resizable view  -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:transcriptMode="normal">
</android.support.v7.widget.RecyclerView>

<!-- use this EditText box to call softKeyboard-->
<android.support.v7.widget.AppCompatEditText
    android:id="@+id/cv_bottom_bar_edit"
    style="@style/Widget.AppCompat.AutoCompleteTextView"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:textSize="18sp"
    android:background="@color/colorPrimaryDark"
    android:gravity="center"
    />