Android调整第一次后不工作

我的问题:从第二次开始,软件键盘显示在屏幕上,它完全隐藏我的EditText。

属性android:windowSoftInputMode =“adjustPan”已经在AndroidManifest.xml中指定,但是它只能在第一次使用。

我有以下布局:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="464dp" android:gravity="top" android:orientation="vertical" android:paddingLeft="16dp" android:paddingRight="16dp" > <ListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="10" android:background="#E3E3E2" android:gravity="top" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/addListText" android:layout_width="0dp" android:layout_height="48dp" android:layout_weight="10" android:contentDescription="@string/addItemContentDescription" android:gravity="bottom|center_horizontal" android:inputType="textLongMessage" android:textColor="#E3E3E2" android:visibility="gone" /> <ImageButton android:id="@+id/addTextListButton" android:layout_width="0dp" android:layout_height="48dp" android:layout_weight="1" android:layout_gravity="right" android:background="@android:color/transparent" android:contentDescription="@string/addItemButton" android:scaleType="fitCenter" android:src="@drawable/plus_add" android:visibility="gone" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="fill_parent" android:gravity="bottom|center_horizontal" android:orientation="horizontal" android:paddingLeft="16dp" android:paddingRight="16dp" > <ImageButton android:id="@+id/syncListsButton" android:layout_width="64dp" android:layout_height="match_parent" android:src="@android:drawable/ic_popup_sync" /> <ImageButton android:id="@+id/showOrHide" android:layout_width="64dp" android:layout_height="match_parent" /> <ImageButton android:id="@+id/delListButton" android:layout_width="64dp" android:layout_height="match_parent" android:src="@android:drawable/ic_menu_delete" /> </LinearLayout> </LinearLayout> 

“showOrHide”button显示/隐藏“addListText”/“addTextListButton”组合。

当第一次显示EditText并触摸它时,软键盘出现在屏幕上,并且“addListText”/“addTextListButton”组合被正确地平移。 当我隐藏键盘,然后再次显示它时,键盘完全覆盖了我的addListText编辑框!

任何想法是怎么回事? 我正在testingAndroid 4.2.2。

请帮忙! 谢谢 :-)

编辑:我也试图把第一个LinearLayout放在一个ScrollView中,但它不起作用!

Solutions Collecting From Web of "Android调整第一次后不工作"

子类EditText并重写onKeyPreIme(int keyCode,KeyEvent事件)方法,如下所示:

  @Override public boolean onKeyPreIme(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) { clearFocus(); } return super.onKeyPreIme(keyCode, event); } 

现在,当后退键被按下时,EditText失去了焦点。 然后再次点击它adjustpan将工作。

这可能看起来有点愚蠢,但当我将EditText的属性重力设置为'center_horizo​​ntal'或'center'时,我遇到了这个问题。 使用textAlignment“center”时会发生同样的问题。 删除它,你将不会遇到键盘隐藏EditText的问题(和随后的)键盘出来的时候。

您遇到的问题现在是一个已知的平台错误: https : //code.google.com/p/android/issues/detail?id = 182191

该修补程序没有被反向移植,因此直到Android N才会生效。在Android N是您的最低SDK之前,以下解决scheme是解决方法。

您可以创build一个扩展EditText的自定义类并覆盖onKeyPreIme(int keyCode,KeyEvent事件)方法,如下所示:

 @Override public boolean onKeyPreIme(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) { clearFocus(); } return super.onKeyPreIme(keyCode, event); } 

您还应该确保更高级别的布局具有聚焦的能力,以便EditText的焦点可以成功清除。 以下属性可能适用于您:

 android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true" 

现在,当后退键被按下时,EditText失去焦点。 然后再次点击button时,adjustpan将按预期工作。 (由于编辑被拒绝而作为回答发布)

这是我最初使用的代码遇到这个问题:

  <EditText android:layout_width="250dp" android:layout_height="wrap_content" android:gravity="center" /> 

当我从EditText中删除中心重力线时,平移工作:

 android:gravity="center" 

我通过在FrameLayout中包装EditText并将整个EditText居中放在FrameLayout中来解决这个问题。 它导致的一个问题是EditText将至less是hinttext的宽度,所以键入的前几个字符/字不会居中。 这对我来说很好,但你的里程可能会有所不同:)

 <FrameLayout android:layout_width="250dp" android:layout_height="wrap_content"> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" /> </FrameLayout> 

编辑:如果用户点击edittext中的最后一个单词,此变通办法。 我现在正在使用onKeyPreIme解决方法

对于我重写onKeyPreIme不起作用。 所以我重写dispatchKeyEventPreIme

 @Override public boolean dispatchKeyEventPreIme(KeyEvent event) { if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){ clearFocus(); } return super.dispatchKeyEventPreIme(event); } 

在EditText android:layout_gravity="center"创build这种types的问题。 如果你想让文字成为中心,那么你可以这样做

第一步:布局

  <LinearLayout android:id="@+id/linerPassword" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toRightOf="@+id/imageView2" android:gravity="center"> <EditText android:id="@+id/editText2" android:layout_width="wrap_content" android:layout_height="40dp" android:background="@null" android:hint="*****" android:layout_marginLeft="-40dp" android:paddingLeft="10dp" android:paddingRight="10dp" android:inputType="textPassword" android:textColor="@color/white" android:textColorHint="@color/white" android:textSize="18sp" /> </LinearLayout> 

第二步:以编程方式进行一些操作

  linerUser.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(mETUserName, 0); mETUserName.requestFocus(); } }); 

最后工作得很好。 我发现这个解决scheme调整softKeyboard

通常情况下,调整盘在第一次按下后退button时不起作用,尝试按照以下方式进行: – (可以为EditText,AutoCompleteTextView或任何其他不正确的视图实现)

  @Override public void onBackPressed() { editText.clearFocus(); editText.setCursorVisible(false); } 

希望它有助于某人

在Manifest文件中尝试了很多解决scheme之后,我通过下面的解决方法解决了它,adjustPan以Relative布局不起作用,

您的父级布局必须是LinearLayout

希望这为人们节省了一些时间。