如果键盘打开 (Android),则隐藏 activity_main.xml 的一部分
Hide part of activity_main.xml if keyboard is open (Android)
我在底部显示了以下 activity_main.xml。在那里,出现了一个 CoordinatorLayout
和两个 LinearLayouts
。第一个 LinearLayout1 有一个 EditText
来输入一些文本,还有一个按钮来发送它。第二个还有另外两个按钮。
如果我点击进入 EditText
,键盘就会出现并使 LinearLayout2 中的所有内容几乎不可见。所以,我想在键盘打开时隐藏最后一个布局中的两个按钮。
我已经发现使用 android:windowSoftInputMode="stateHidden"
可能是诀窍,但仅限于 AndroidManifest.xml
中的活动。我只想使用这个内部的第二个线性布局。已经尝试在那里使用它,但没有成功。
此外,我要在我的 xml 中处理这个问题并保持我的 MainActivity 代码干净。这有什么可能性吗?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
...
<android.support.design.widget.CoordinatorLayout>
<android.support.v7.widget.RecyclerView/>
</android.support.design.widget.CoordinatorLayout>
<LinearLayout>
<EditText/>
<Button android:id="@+id/button_send"/>
</LinearLayout>
<LinearLayout>
<Button/>
<Button/>
</LinearLayout>
</LinearLayout>
我们过去遇到过同样的问题,所以我们在完整布局对象上放置了一些可观察对象
试试这个,让我知道
/*Hide button when keyboard is open*/
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
view.getWindowVisibleDisplayFrame(r);
int heightDiff = view.getRootView().getHeight() - (r.bottom - r.top);
if (heightDiff > 244) { // if more than 100 pixels, its probably a keyboard...
//ok now we know the keyboard is up...
buttonLayout.setVisibility(View.GONE);
} else {
//ok now we know the keyboard is down...
buttonLayout.setVisibility(View.VISIBLE);
}
}
});
我在底部显示了以下 activity_main.xml。在那里,出现了一个 CoordinatorLayout
和两个 LinearLayouts
。第一个 LinearLayout1 有一个 EditText
来输入一些文本,还有一个按钮来发送它。第二个还有另外两个按钮。
如果我点击进入 EditText
,键盘就会出现并使 LinearLayout2 中的所有内容几乎不可见。所以,我想在键盘打开时隐藏最后一个布局中的两个按钮。
我已经发现使用 android:windowSoftInputMode="stateHidden"
可能是诀窍,但仅限于 AndroidManifest.xml
中的活动。我只想使用这个内部的第二个线性布局。已经尝试在那里使用它,但没有成功。
此外,我要在我的 xml 中处理这个问题并保持我的 MainActivity 代码干净。这有什么可能性吗?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
...
<android.support.design.widget.CoordinatorLayout>
<android.support.v7.widget.RecyclerView/>
</android.support.design.widget.CoordinatorLayout>
<LinearLayout>
<EditText/>
<Button android:id="@+id/button_send"/>
</LinearLayout>
<LinearLayout>
<Button/>
<Button/>
</LinearLayout>
</LinearLayout>
我们过去遇到过同样的问题,所以我们在完整布局对象上放置了一些可观察对象 试试这个,让我知道
/*Hide button when keyboard is open*/
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
view.getWindowVisibleDisplayFrame(r);
int heightDiff = view.getRootView().getHeight() - (r.bottom - r.top);
if (heightDiff > 244) { // if more than 100 pixels, its probably a keyboard...
//ok now we know the keyboard is up...
buttonLayout.setVisibility(View.GONE);
} else {
//ok now we know the keyboard is down...
buttonLayout.setVisibility(View.VISIBLE);
}
}
});