2015-12-18 2 views
0

У меня есть макет, который имеет панель инструментов в верхней части и нескольких видах EditText:Как предотвратить мягкую клавиатуру от нажатия только панели инструментов?

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/my_toolbar" 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent"> 
    </android.support.v7.widget.Toolbar> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/my_toolbar"> 

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/edit_text1"/> 

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/edit_text2"/> 

      ... 

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/edit_text7"/> 
    </LinearLayout> 

</RelativeLayout> 

Хотя некоторые EditText, которые находятся ближе к нижней части экрана открывается экранная клавиатура, весь экран (содержит панель инструментов) будет подтолкнут. Есть ли способ сделать мягкую клавиатуру нажатием всего экрана, кроме панели инструментов (Fix the toolbar)?

Некоторые существующие answers могут фактически исправить весь экран, но EditText, которые ближе к основанию, также могут быть заблокированы с помощью мягкой клавиатуры.

Может ли кто-нибудь дать мне хорошее решение?

ответ

2

Используйте ScrollView.

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<android.support.v7.widget.Toolbar 
    android:id="@+id/my_toolbar" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent"> 
</android.support.v7.widget.Toolbar> 

<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/my_toolbar"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/edit_text1"/> 

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/edit_text2"/> 

      ... 

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/edit_text7"/> 
    </LinearLayout> 

</ScrollView> 

+0

Спасибо за ваш ответ, это работает отлично , – Rayliu521

+0

Это не работает, все еще не удалось прокрутить просмотры в случае открытой клавиатуры – Erum

4

Put андроид: fitsSystemWindows = "истина" в первой относительной макете

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true"> 
.... 
.... 
</RelativeLayout> 

и в очевидном добавить это

android:windowSoftInputMode="adjustPan" 
+0

Спасибо за сообщение, я пробовал, но он не работал как мое ожидание прямо сейчас. Может быть, ты ведешь меня на правильный путь, я буду продолжать пытаться. – Rayliu521

+0

работал для меня, спасибо! Знаете ли вы, могу ли я сделать поведение adjuctPan определенным макетом или представлением? вместо определения его для всего приложения в манифесте. Потому что есть места, где я предпочитаю использовать adjustResize – BVtp

+0

, вы можете определить adjustPan для каждого вида деятельности, вам не нужно определять его для всего приложения. – Deepak

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