Ответ 1
Попробуйте следующее:
<activity name="YourActivity"
android:windowSoftInputMode="stateVisible|adjustResize|adjustPan">
</activity>
в файле манифеста.
Скорее всего, adjustResize
должен работать, если вы используете ScrollView
.
У меня есть ListView, содержащий строки с EditText's.
Когда я нажимаю на EditText и не фокусируется, он получает фокус, появляется клавиатура, а EditText перемещается над CandidateView (желаемое поведение).
Однако, когда я нажимаю клавишу, EditText сохраняет фокус и получает вход, но движется вниз и скрывается клавиатурой (предыдущее движение отменено).
Когда я нажимаю на EditText, когда он уже выбран без показанной клавиатуры, клавиатура появляется, но EditText не перемещается в правильное положение (над CandidateView). Он все еще получает вход.
Я добавляю заголовок, содержащий EditText, и там все работает правильно.
Это код моего ArrayAdapter, в котором создается представление строки:
View view = inflater.inflate(R.layout.row_profile_entry_text, null);
final String question = getItem(position);
TextView textViewQuestion = (TextView) view.findViewById(R.id.rpeq_TextViewQuestion);
textViewQuestion.setText(question);
final EditText editTextAnswer = (EditText) view.findViewById(R.id.rpeq_EditTextAnswer);
editTextAnswer.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
mAnswers.put(question, s.toString());
}
});
if (mAnswers.containsKey(question)) {
editTextAnswer.setText(mAnswers.get(question));
}
return view;
Я также хотел бы подчеркнуть, что я уже добавил,
android:windowSoftInputMode="adjustPan"
в манифест и android:descendantFocusability="beforeDescendants"
в ListView, поскольку большинство ответов на другие вопросы предлагает.
Без adjustPan
EditText не может получить фокус на всех, но он не решает проблему полностью.
Есть ли у кого-то идея, что я делаю неправильно?
Попробуйте следующее:
<activity name="YourActivity"
android:windowSoftInputMode="stateVisible|adjustResize|adjustPan">
</activity>
в файле манифеста.
Скорее всего, adjustResize
должен работать, если вы используете ScrollView
.
после многих часов, потраченных на эту проблему, это мое решение (для Android < 4.2):
1) Manifest = > android: windowSoftInputMode = "adjustPan"
2) Activity = > создать OnTouchListner и перейти к адаптеру
private OnTouchListener exampleOnTouchListener = new OnTouchListener() {
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouch(View v, MotionEvent event) {
if (MotionEvent.ACTION_UP == event.getAction()) {
int position = (Integer) v.getTag();
myListView.setSelection(position);
}
return false;
}
};
3) Адаптер
if (exampleOnTouchListener!= null) {
myEditText.setTag(position);
myEditText.setOnTouchListener(exampleOnTouchListener);
// if last element set padding bottom for spacing
if (position == items.size() - 1) {
LinearLayout myLinearLayout = (LinearLayout) convertView
.findViewById(R.id.ticketcontolProposedRealvalueLinearLayout);
myLinearLayout.setPadding(0, 0, 0,SET_PADDING_BOTTOM);
}
}