2015-12-08 3 views
-1

У меня проблема с клавиатурой и edittext в android. Мой случай:Крышки клавиш EditText, когда edittext с фокусом

  • EditText не имеет фокуса, я нажимаю EditText => отобразил Software Keyboard, EditText имеет фокус и перемещается вверх
  • Затем я нажимаю кнопку назад => клавиатура скрыть, EditText все еще имеет фокус
  • Я снова нажимаю edittext => клавиатурное шоу, но edittext покрывается клавиатурой.

UPDATE

расположение:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/scrollView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:fillViewport="true" 
    android:focusable="true" 
    android:focusableInTouchMode="true" 
    android:scrollbars="none"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="bottom" 
     android:orientation="vertical"> 

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="40dp" 
      android:singleLine="true" /> 
    </LinearLayout> 
</ScrollView> 

и manifest.xml

<activity 
    android:name="vn.com.fss.vndirect.TestActivity" 
    android:label="@string/app_name" 
    android:screenOrientation="portrait" 
    android:windowSoftInputMode="adjustPan"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 

     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

Мой вопрос: Почему EditText не двигаться вверх, как в первый раз, и как это исправить ?

Благодаря

+0

Где внедрен код? – Piyush

+0

добавить в 'Manifest File' эта строка' андроид: windowSoftInputMode = "adjustPan" ' – Hits

+0

читать о' андроида: windowSoftInputMode' –

ответ

0

Один из способов исправить это сделать макет прокручивать, вставив мастер-макета в файле макета внутри scrollView. Попробуй и позволь мне, если это не сработает. Например:

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true" 
     > 
    <LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    > 
      <!--Your Layout content--> 
    </LinearLayout> 
</ScrollView> 

Это в основном прокручивать вверх ваш editText над клавиатурой, когда отображается ваши клавиатуры.

+0

Pls, показать мне ваш код, Я пробовал, но не работал. Что я делаю неправильно? –

+0

Вы добавили 'android: fillViewport' в свой scrollView? – himanshu1496

+0

Извините, я обновил вопрос. Это не работает :) –

1

Используйте этот пользовательский класс Edittext. Он удалит фокус Edittext при нажатии кнопки возврата.

public class KeyboardEditText extends EditText 
{ 
public KeyboardEditText(Context context) { 
    super(context); 
} 

public KeyboardEditText(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public KeyboardEditText(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
} 

@Override 
public void setOnTouchListener(OnTouchListener l) { 
    super.setOnTouchListener(l); 
} 

@Override 
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { 
    super.onFocusChanged(focused, direction, previouslyFocusedRect); 
    if (listener != null) 
     listener.onStateChanged(this, true); 
} 

@Override 
public boolean onKeyPreIme(int keyCode, @NonNull KeyEvent event) { 
    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK 
      && event.getAction() == KeyEvent.ACTION_UP) { 
     if (listener != null) 
      listener.onStateChanged(this, false); 

     // Hide cursor 
     setFocusable(false); 

     // Set EditText to be focusable again 
     setFocusable(true); 
     setFocusableInTouchMode(true); 
    } 
    return super.onKeyPreIme(keyCode, event); 
} 

/** 
* Keyboard Listener 
*/ 
KeyboardListener listener; 

public void setOnKeyboardListener(KeyboardListener listener) { 
    this.listener = listener; 
} 

public interface KeyboardListener { 
    void onStateChanged(KeyboardEditText keyboardEditText, boolean showing); 
} 
} 
+0

Я так думал Но знаете ли вы, почему edittext не продвигается во второй раз? Спасибо за ответ. –

+0

, потому что когда вы нажимаете кнопку «Назад», Edittext не выделяет фокус, поэтому, когда вы снова открываете клавиатуру для того же edittext, она не будет прокручиваться вверх. Этот пользовательский edittext удаляет фокус с edittext, когда вы нажимаете кнопку «Назад». –

+0

О, я понимаю, Спасибо за ответ –

Смежные вопросы