2013-10-24 2 views
12

У меня есть действие с editText посередине. Когда я нажимаю на editText, появляется клавиатура, и экран движется так, что editText находится чуть выше клавиатуры, охватывая другие вещи, которые находятся ниже.Прокрутите экран вверх, когда появится клавиатура

Я не хочу изменять размер или добавлять дополнения к макету. Мне просто нужно, чтобы экран прокручивал вверху пространство, которое мне нужно, чтобы увидеть и другие вещи ниже. Другими словами, я хотел бы выбрать позицию editText, когда появится клавиатура. Этого было бы достаточно, если экран прокручивается полностью, показывая мне нижнюю часть макета.

Я пытался поставить макет в Scrollview добавив этот код на EditText

editText.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      //make the view scroll down to the bottom 
      scrollView.scrollTo(0, scrollView.getBottom()); 

     } 
    }); 

, но он не работает. У кого-нибудь есть идея? Заранее спасибо!

ответ

11

У меня была аналогичная проблема, однажды, я решил с помощью:

android:windowSoftInputMode="adjustResize" 

в AndroidManifest.xml.

Если вы используете RelativeLayout, начните с нижнего элемента, который должен быть подключен к нижней части родителя, а затем подключите другой элемент выше предыдущего.

Если вы используете LinearLayout, оберните его в RelativeLayout и подключите LinearLayout к parentBottom.

Таким образом, когда клавиатура всплывает, вы увидите нижнюю часть вашего макета.

Надеюсь, это поможет.

+5

Что делает «Если вы используете RelativeLayout начать с нижним элементом, который должен быть крючком для родительского дна и крючок другого элемента выше предыдущий «. Имею в виду? Я не понял, что ты имеешь в виду, если не объяснишь, пожалуйста? – Josh

+0

Что делать, если часть экрана, которую я хочу показать, когда клавиатура видна, не должна быть привязана к нижней части родителя, но центрирована на странице? –

+0

Не работает в моем «фрагменте» getActivity(). GetWindow(). SetSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); – delive

3

Это работает для меня

android:windowSoftInputMode="stateVisible|adjustResize" 

в androidmanifest для деятельности

+0

Он не хочет изменять размер. – Sid

16

использования андроида: windowSoftInputMode = "adjustPan"

"adjustResize"

Активность ГЛАВНОЕ окно всегда изменяется, чтобы освободить место для программной клавиши на экране.

главное окно своей деятельности в «adjustPan» не изменяется, чтобы освободить место для мягкой клавиатуры. Скорее, содержимое окна автоматически разворачивается так, что текущий фокус никогда не скрывается клавиатурой, и пользователи всегда могут видеть, что они набирают. Это, как правило, менее желательно, чем изменение размера, поскольку пользователю может понадобиться закрыть мягкую клавиатуру, чтобы получить доступ к скрытым частям окна и взаимодействовать с ними.

Для примера трактира вашего файла манифеста: -

 <activity 
    android:windowSoftInputMode="adjustPan" 
    android:name=".MainActivity"></activity> 

Late answer.But конечно, это помогает никому.

2

Я имел эту проблему, я решил по этому коду:

myEdittext.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        myscrollview.postDelayed(new Runnable() { 
         @Override 
         public void run() { 
          View lastChild = myscrollview.getChildAt(myscrollview.getChildCount() - 1); 
          int bottom = lastChild.getBottom() + myscrollview.getPaddingBottom(); 
          int sy = myscrollview.getScrollY(); 
          int sh = myscrollview.getHeight(); 
          int delta = bottom - (sy + sh); 
          myscrollview.smoothScrollBy(0, delta); 
         } 
        }, 200); 
       } 
      }); 
Смежные вопросы