我有一个列表视图,最后一个列表项包含EditText:
<RelativeLayout
android:id="@+id/contentLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="30dp"
android:orientation="vertical" >
<ImageView
android:id="@+id/test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/messageEditText"
android:layout_below="@+id/messageEditText"
android:layout_marginRight="14dp"
android:src="@drawable/test" />
<EditText
android:id="@+id/messageEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@+id/sendImageButton"
android:ems="10"
android:gravity="top"
android:hint="@string/messageEditText"
android:inputType="textMultiLine"
android:minHeight="55dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="10dp" />
<ImageButton
android:id="@+id/sendImageButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/messageEditText"
android:layout_alignParentRight="true"
android:layout_alignTop="@id/messageEditText"
android:adjustViewBounds="true"
android:maxHeight="55dp"
android:maxWidth="55dp"
android:padding="12dp"
android:scaleType="centerInside"
android:src="@drawable/sendmessage" />
</RelativeLayout>
隐藏了一半的EditText。我也无法滚动listview。任何解决方案?
答案 0 :(得分:29)
解决方法是在Manifest中将android:softInputMode
属性设置为adjustResize
,并将布局(不是列表项布局)放在ScrollView中。
答案 1 :(得分:8)
我有一个类似的问题,然后我使用android:windowSoftInputMode="adjustResize|stateHidden"
提到here ..它对我很有用..
答案 2 :(得分:3)
从早期作为Android开发人员开始,我一直在努力使用虚拟键盘。我很惊讶Android仍然没有为此提供优雅而明确的解决方案。
所以这里的解决方法将把这个烂摊子放在身后。它可以在没有ScrollView变通方法的情况下工作,也可以放弃全屏标记。
compile'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:1.0.1'
机器人:windowSoftInputMode = “adjustResize”
使用垂直LinearLayout包装EditText,并添加一个可见性已过去的视图:
<com.ylimitapp.ylimitadmin.views.NormalFontEditText
android:id="@+id/input_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapSentences|textMultiLine"
android:imeOptions="actionSend"
android:paddingStart="20dp"
android:paddingEnd="40dp"
android:paddingTop="10dp"
android:maxHeight="120dp"
android:adjustViewBounds= "true"
android:scrollHorizontally="false"
android:textColorHint="#7b7b7b"
android:hint="@string/type_your_message"
android:background="@drawable/msg_inputfield_bg"
android:textColor="@color/black_text_color"
android:textSize="15.33sp"
/>
<View
android:id="@+id/keyboard_view"
android:layout_width="match_parent"
android:layout_height="20dp"
android:visibility="gone"
/>
</LinearLayout>
计算屏幕大小,以便计算推送EditText的视图的高度:
private void storeScreenHeightForKeyboardHeightCalculations() {
Rect r = new Rect();
View rootview = getActivity().getWindow().getDecorView();
rootview.getWindowVisibleDisplayFrame(r);
mOriginalScreenHeight = r.height();
Rect rectangle = new Rect();
Window window = getActivity().getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
int statusBarHeight = rectangle.top;
int contentViewTop =
window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
int titleBarHeight= contentViewTop - statusBarHeight;
if (titleBarHeight == 0) {
mOriginalScreenHeight -= (24 * Utils.getDensity(getContext()));
}
}
private void addkeyBoardlistener() { KeyboardVisibilityEvent.setEventListener( getActivity(), new KeyboardVisibilityEventListener() { @Override public void onVisibilityChanged(boolean isOpen) { if (isOpen) { Rect r = new Rect(); View rootview = getActivity().getWindow().getDecorView(); // this = activity rootview.getWindowVisibleDisplayFrame(r); int keyboardHeight = (mOriginalScreenHeight - r.height()); LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) keyboard_view.getLayoutParams(); params.height = (int) ((keyboardHeight + 5 * Utils.getDensity(getContext()))); keyboard_view.setLayoutParams(params); keyboard_view.setVisibility(View.VISIBLE); } else { keyboard_view.setVisibility(View.GONE); } } }); }
结果如下:
答案 3 :(得分:2)
this .getWindow().setSoftInputMode(WindowManager.LayoutParams. SOFT_INPUT_STATE_ALWAYS_HIDDEN );
答案 4 :(得分:1)
在Manifest中为您的Activity元素设置android:softInputMode
属性。
有关有效值及其效果的完整列表,请参阅Manifest documentation。您特别感兴趣的可能是adjustPan
和adjustResize
。
答案 5 :(得分:0)
将其添加到清单中,如下所示:
<activity
android:name="your_activity_name"
android:windowSoftInputMode="adjustResize"
android:theme="@style/Theme.AppCompat.DayNight.NoActionBar" />
然后在布局中添加paddingBottom="20dp"
和editText。