用户在android studio中按下空格/逗号后如何装入每个单词?

时间:2017-10-15 22:57:20

标签: android search text views

我正在尝试制作一个Android应用程序,但我遇到了一个问题。你如何允许用户输入一个单词,一旦他们按下空格/逗号,它就会输入单词,最好是退出选项。

https://i.stack.imgur.com/BwpZ9.png

https://i.stack.imgur.com/zqOLo.png

这些图片的任何内容都是完美的。

2 个答案:

答案 0 :(得分:1)

您想要的内容在Android中被称为 chips ,它是您可以阅读其中的一个原生设计的规范here
Here是一些让你入门的例子,上次我检查没有适当的文档或支持这个功能,所以我最终使用了一个构建它的库,你可以通过实现自定义自己做一些事情按照here

的说明查看

答案 1 :(得分:0)

以下是我将如何实现它。这是一个有效的例子。当用户点击空间时,它会添加和项目。单击某个项目时,它将删除它。

这是一个实际的GIF。 https://giphy.com/gifs/l4EpayEaAuGV58tgY

添加到gradle:

compile 'com.android.support:design:26.0.0-alpha1'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
compile 'com.xiaofeng.android:flowlayoutmanager:1.2.3.2'

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler);
        recyclerView.setLayoutManager(new FlowLayoutManager());
        recyclerView.setAdapter(new CustomRecyclerAdapter());
    }
}

public class CustomRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private static final int HOLDER_ERROR = 0;
    private static final int HOLDER_BOX = 1;
    private static final int HOLDER_EDIT = 2;
    private List<Object> objectList = new ArrayList<>();

    public CustomRecyclerAdapter() {
        objectList.add(0);
    }

    public void addItem(String item) {
        objectList.add(getItemCount() - 1, item);
        notifyItemInserted(getItemCount() - 1);

    }

    public void removeItem(int position) {
        objectList.remove(position);
        notifyItemRemoved(position);
    }

    @Override
    public int getItemCount() {
        return objectList.size();
    }

    @Override
    public int getItemViewType(int position) {
        if (objectList.get(position) instanceof String) {
            return HOLDER_BOX;
        } else if (objectList.get(position) instanceof Integer) {
            return HOLDER_EDIT;
        } else {
            return HOLDER_ERROR;
        }
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        switch (viewType) {
            case HOLDER_ERROR:
                return null;
            case HOLDER_BOX:
                return new ViewHolderBox(LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_box, parent, false));
            case HOLDER_EDIT:
                return new ViewHolderEdit(LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_edit_text, parent, false));
            default:
                return null;
        }
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof ViewHolderBox) {
            ViewHolderBox mHolder = (ViewHolderBox) holder;
            mHolder.bindItems();
        } else if (holder instanceof ViewHolderEdit) {
            ViewHolderEdit mHolder = (ViewHolderEdit) holder;
            mHolder.bindItems();
        }
        holder.itemView.setTag(this);
    }

    private class ViewHolderEdit extends RecyclerView.ViewHolder implements TextWatcher {
        private EditText edit;

        private ViewHolderEdit(View itemView) {
            super(itemView);
            edit = itemView.findViewById(R.id.edit);
            InputMethodManager imm = (InputMethodManager) itemView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInputFromInputMethod(edit.getWindowToken(), 0);
        }

        private void bindItems() {
            edit.addTextChangedListener(this);
        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            String editString = edit.getText().toString();
            Pattern pattern = Pattern.compile("\\s");
            Matcher matcher = pattern.matcher(editString);
            if (matcher.find()) {
                if (!editString.trim().equalsIgnoreCase("")) {
                    addItem(editString.trim());
                    edit.setText("");
                    edit.requestFocus();
                }
            }
        }

        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }


        @Override
        public void afterTextChanged(Editable editable) {

        }
    }

    private class ViewHolderBox extends RecyclerView.ViewHolder implements View.OnClickListener {
        private TextView text;

        private ViewHolderBox(View itemView) {
            super(itemView);
            text = itemView.findViewById(R.id.text);
            text.setOnClickListener(this);
        }

        private void bindItems() {
            String item = (String) objectList.get(getAdapterPosition());
            text.setText(item);
        }

        @Override
        public void onClick(View view) {
            removeItem(getAdapterPosition());
        }
    }
}

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/recycler"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="resume.eugene.com.testing.MainActivity" />

recycler_box.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center">

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="34dp"
        android:layout_marginBottom="2dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="2dp"
        android:background="#90CAF9"
        android:clickable="true"
        android:gravity="center"
        android:paddingLeft="12dp"
        android:paddingRight="12dp"
        android:text="Testing" />
</LinearLayout>

recycler_edit_text.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <EditText
        android:id="@+id/edit"
        android:layout_width="wrap_content"
        android:layout_height="34dp"
        android:layout_marginBottom="2dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:layout_marginTop="2dp"
        android:background="@android:color/transparent"
        android:gravity="center_vertical"
        android:hint="Add Item"
        android:minWidth="50dp"
        android:textSize="15sp" />
</LinearLayout>