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

问题描述:

我目前正在尝试做一个android应用程序,我遇到了一个问题。你会如何让用户输入一个单词,一旦他们按空格/逗号,它会打开单词,最好使用退出选项。如何在用户按下android studio中的空格/逗号后填充每个单词?

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

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

什么沿着这些图片的线路将是完美的。

你想要的是Android叫什么chips,这是你可以看到它的规格here本土设计之一。
Here是让你入门的几个例子,上次我检查了没有适当的文档或支持这个功能,所以我最终使用了一个已经构建它的库,你可以通过实现一个自定义视图解释here

+0

谢谢!我无法弄清楚它叫什么。 – xToyo

+0

没问题,很高兴我可以帮助你,快乐的编码 –

这是我将如何实现它。这是一个工作示例。当用户点击它添加的项目和项目时。当你点击一个项目时,它会将其删除。

这是它在行动中的一个gif。 https://giphy.com/gifs/l4EpayEaAuGV58tgY

添加到摇篮:

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>