36

我的問題:從第二次開始,軟件鍵盤顯示在屏幕上,它完全隱藏我的EditText。Android調整第一次後不工作

屬性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」 按鈕顯示/隱藏 「addListText」/ 「addTextListButton」 組合。

當第一次顯示EditText並觸摸它時,軟鍵盤出現在屏幕上,並且「addListText」/「addTextListButton」組合已正確平移。當我隱藏鍵盤然後再次顯示時,鍵盤完全覆蓋了我的addListText編輯框!

關於發生什麼事情的想法?我在Android 4.2.2上測試它。

請幫忙!謝謝:-)

編輯:我也試過把第一個LinearLayout放在ScrollView中,但它不起作用!

回答

52

子類的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將工作。

+0

謝謝,這對我有用! – bilbo20 2013-04-25 17:17:16

+0

真是個絕招。 – MKJParekh 2013-05-09 07:01:14

+0

tnx .. @ MKJParekh – 2013-05-09 07:02:12

76

這看起來有點愚蠢,但當我將EditText的屬性重力設置爲'center_horizo​​ntal'或'center'時,我遇到了這個問題。使用textAlignment'center'時會發生同樣的問題。刪除它,當鍵盤出來時,不會遇到鍵盤隱藏EditText的問題(以及後續的問題)。

+5

令人驚歎!令人驚奇的是,我的意思是,很明顯無關的東西可能會在Android中搞砸。 – Medo 2014-12-23 13:58:54

+6

這真是一個荒謬的錯誤....謝謝你的實現,雖然... – Sakiboy 2015-02-19 20:30:46

+0

你救了我的命,謝謝 – jlopez 2015-02-24 15:14:46

1

這是我原來用的是代碼,就遇到了這個問題:

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

當我刪除從EditText上重心線,平移工作:

android:gravity="center" 

我工作圍繞它通過將EditText包裝在FrameLayout中並將整個EditText居中在FrameLayout中。它導致的一個問題是EditText至少是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解決方法

8

現在您遇到的問題是,這裏所描述的已知漏洞的平臺:https://code.google.com/p/android/issues/detail?id=182191

的修補程序不回遷,因此將不會生效,直到Android的N.直到安卓N是您的最低SDK,以下解決方案是解決方法。

您可以創建自定義類擴展的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失去焦點。然後當你再次點擊按鈕時,adjustpan將按預期工作。 (作爲回答,因爲編輯被拒絕。)

0

在EditText android:layout_gravity="center"創建此類型的問題。通過編程

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();  
     } 
    }); 

一些事情最後工作得非常好:如果你想文本成爲中心,那麼你可以做這樣

第一步:對於佈局

<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> 

第二步。我發現這個調整softKeyboard的解決方案

1

對於我壓倒onKeyPreIme不起作用。所以我改寫dispatchKeyEventPreIme

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

這對我有效!謝謝!! – xbadal 2017-05-03 08:14:52

0

通常情況下,調整當我們按下後退按鈕嘗試這樣做,下面的方式鍋不發生後的第一次工作: - (可爲的EditText,AutoCompleteTextView或其中任何行爲不端其他視圖實現)

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

希望它可以幫助別人

0

清單文件,嘗試了許多解決方案後, 我解決它由以下, adjustPan與相對佈局不工作,

您的父級佈局必須是LinearLayout

希望這可以爲人們節省一些時間。

相關問題