【问题标题】:EditText in ListView hidden by keyboard when focused聚焦时,ListView 中的 EditText 被键盘隐藏
【发布时间】:2013-01-12 12:43:12
【问题描述】:

我有一个 ListView,其中包含带有 EditText 的行。

当我点击一个 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" 添加到 Manifest 并将
android:descendantFocusability="beforeDescendants" 添加到 ListView,正如其他问题的大多数答案所暗示的那样。

没有adjustPan,EditText 根本无法获得焦点,但它并不能完全解决问题。

有人知道我做错了什么吗?

【问题讨论】:

  • 我也面临同样的问题,我没有找到任何解决方案。那是因为 R n D 问题,我创建了自己的自定义键盘。但它不是解决方案。让我们为它投票吧。让我们看看你在这里找到了什么。

标签: android listview focus android-edittext


【解决方案1】:

试试这个:

<activity name="YourActivity"
    android:windowSoftInputMode="stateVisible|adjustResize|adjustPan">
</activity>

在清单文件中。

如果您使用的是ScrollViewadjustResize 很可能必须工作。

【讨论】:

  • 它不起作用。现在,向正确位置的初始移动不再发生。你的意思是我应该将 ListView 放在 ScrollView 中还是只使用 ScrollView 而放弃 ListView?
  • 如果您使用的是ListView,这就够了,它必须自动向上滚动以保持在软键盘上方。只需使用stateVisible|adjustResize。但让我用一个示例项目进行检查。
  • 不。 adjustResize 导致 EditText 在很短的时间内获得焦点(建议已调整),但它立即再次失去焦点,我无法输入任何内容。到目前为止,adjustPan 是唯一使 EditText 成为焦点的标志。
【解决方案2】:

在这个问题上花费了很多小时后,这是我的解决方案(适用于 Android

1) 清单 => android:windowSoftInputMode="adjustPan"

2) Activity=> 创建 OnTouchListner 并传递给 Adapter

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 2012-09-29
    • 2016-05-20
    相关资源
    最近更新 更多