返回

EditText 输入自定义话题#话题

Android

发布动态的流程大体上需要以下几个步骤:

  1. 输入文本框,输入文本内容。
  2. 选择图片或视频,上传到资源服务器。
  3. 将文本内容和图片或视频数据提交给后端。

如果想要在文本框中输入自定义话题#话题,那么我们就可以把这个流程拆解成更细的步骤:

  1. 将光标移动到文本框的开头。
  2. 输入#号。
  3. 输入话题的内容。
  4. 输入一个空格。
  5. 继续输入其他内容。

当然,我们也可以使用第三方库来简化这个流程,比如我们就可以使用TextWatcher来监听文本框的内容变化,当文本框中输入#号时,就可以自动弹出话题列表,然后用户可以选择想要添加的话题。

具体实现步骤如下:

  1. 在布局文件中添加一个EditText控件。
  2. 在Activity或Fragment中,给EditText控件添加一个TextWatcher。
  3. 在TextWatcher的afterTextChanged方法中,判断文本框中是否输入了#号。
  4. 如果输入了#号,就弹出话题列表。
  5. 用户可以选择想要添加的话题。

注意:

  1. 话题列表需要从后端获取。
  2. 话题列表可以根据用户输入的内容进行筛选。
  3. 用户可以选择多个话题。

实现步骤

  1. 在布局文件中添加一个EditText控件。
<EditText
    android:id="@+id/et_content"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="分享你的想法..." />
  1. 在Activity或Fragment中,给EditText控件添加一个TextWatcher。
EditText etContent = findViewById(R.id.et_content);
etContent.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void afterTextChanged(Editable s) {
        if (s.toString().contains("#")) {
            // 弹出话题列表
            showTopicList();
        }
    }
});
  1. 在TextWatcher的afterTextChanged方法中,判断文本框中是否输入了#号。
if (s.toString().contains("#")) {
    // 弹出话题列表
    showTopicList();
}
  1. 如果输入了#号,就弹出话题列表。
private void showTopicList() {
    // 获取话题列表
    List<Topic> topicList = getTopicList();

    // 创建话题列表适配器
    TopicListAdapter adapter = new TopicListAdapter(this, topicList);

    // 创建话题列表对话框
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("选择话题");
    builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // 获取用户选择的话题
            Topic topic = topicList.get(which);

            // 将话题添加到文本框中
            etContent.getText().insert(etContent.getSelectionStart(), "#" + topic.getName() + " ");
        }
    });

    // 显示话题列表对话框
    builder.show();
}
  1. 用户可以选择想要添加的话题。
builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // 获取用户选择的话题
        Topic topic = topicList.get(which);

        // 将话题添加到文本框中
        etContent.getText().insert(etContent.getSelectionStart(), "#" + topic.getName() + " ");
    }
});

需要注意的是,话题列表需要从后端获取。话题列表可以根据用户输入的内容进行筛选。用户可以选择多个话题。