0

我在 Listview 项目布局中有两个 EditText 字段。单击按钮时,将添加一个新项目作为 Listview 中的第一行。而且我可以在这两个字段中输入文本。

这是我的代码:

<ListView 
android:id="@+id/items_listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:animationCache="false"
android:background="@color/white"
android:descendantFocusability="afterDescendants"
android:fadingEdge="none"
android:fadingEdgeLength="0dp"
android:focusable="true"
android:divider="@android:color/transparent"
android:overScrollMode="never"
android:scrollingCache="false"
android:smoothScrollbar="true" />

适配器的 getView() :

 @Override
public View getView(final int position, View convertView, final ViewGroup parent) {

    final ViewHolder viewHolder;
    if (convertView == null || !(convertView.getTag() instanceof ViewHolder)) {
        viewHolder = new ViewHolder();
        convertView = inflater.inflate(R.layout.items_listview_item, null);
        viewHolder.quantity = (EditText) convertView.findViewById(R.id.quantity_editText);
        viewHolder.description = (EditText) convertView.findViewById(R.id.description_editText);
        viewHolder.description.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }
    viewHolder.position = position;
    viewHolder.description.setText(itemsArrayList.get(position).getDescription());
    viewHolder.quantity.setText(itemsArrayList.get(position).getQuantity());

    viewHolder.quantity.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
        }
        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
        }
        @Override
        public void afterTextChanged(Editable arg0) {
            itemsArrayList.get(viewHolder.position).setQuantity(arg0.toString());
        }
    });

    viewHolder.description.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
        }
        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
        }
        @Override
        public void afterTextChanged(Editable arg0) {
            itemsArrayList.get(viewHolder.position).setDescription(arg0.toString());
        }
    });


    return convertView;
}


 private static class ViewHolder {
    EditText description;
    EditText quantity;
    int position;
}

我正在使用adjustPan 来进行清单中的活动。

这是我的问题:这在我测试过的所有设备上都可以正常工作,但是在三星 Galaxy-Tab2(10 英寸平板电脑)上,当我添加一个新项目并点击第二个 EditText(即描述字段)时,键盘只显示在描述字段下方,这很好。现在,如果我按任意键,则键盘将覆盖描述字段。我看不到该字段中输入的确切内容。第二个 EditText 完全被键盘隐藏。第一个 EditText 字段不会发生这种情况。我哪里错了?为什么它在galaxy-Tab2 上没有按预期工作?请帮我。提前致谢。

4

2 回答 2

0

尝试这个,

 android:windowSoftInputMode="adjustResize".

如果这还不够,您可能需要添加属性 android:fitsSystemWindows="true"

到包含您的 EditText 的根布局。

或者

根据这个改变你的布局,不要错过那一行

安卓:isScrollContainer="真"

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scrollview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:isScrollContainer="true"
    android:orientation="vertical">

    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:background="#000000"
        android:padding="0dp"
        android:stretchColumns="*">
        ...
    </TableLayout>
</ScrollView>
于 2016-05-25T08:10:38.220 回答
0

将此行添加到您的清单:

android:windowSoftInputMode="adjustPan|adjustResize"

或者您可以将此行提供给您的 oncreate :

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
于 2015-12-17T13:42:48.653 回答