android - 使用上下文菜单在编辑器中插入文本和图片

标签 android

<分区>

我正在尝试学习 android 编程。我已经成功地创建了屏幕并在其中导航。现在我正在尝试一些冒险的事情。

我正在创建一个像 MS Word 这样的文本编辑器,您可以在其中键入文本并使用上下文菜单插入图库中的图像。

enter image description here

我浏览了链接 Get/pick an image from Android's built-in Gallery app programmatically .但是我有几个问题。

  1. EditText 是正确的控件吗?
  2. 如何从光标所在的位置调用上下文菜单?
  3. 如何将图片粘贴到光标所在位置?

对此的任何见解都会有很大帮助。

最佳答案

好吧,让我们一一解决:

Is EditText the right control for this?

当然,除非你想创建一个像 MS word 一样的应用程序,否则这将非常有效。

类似多个 Edit Text 的东西可以用作 word 上的不同页面,您可以使用每个“页面”的常用 XML 属性指定长度和宽度,用 view 分隔它们以获得页面结束和新页面机制的开始。

现在要实现用光标添加图片,您只需创建一个上下文菜单并以编程方式将该图像添加到您的布局,结束您的编辑文本,创建一个 ImageView 并继续另一个edit text,让我们看看如何做到这一点:

首先是你的上下文菜单:

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
                            ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
if(item.getTitle().equals("Insert Image") ){

InsertImage(Uri imageUri);
      }
}

How do I invoke the context menu from where the cursor is?

How do I paste the image where the cursor is?

您需要实现一个名为 View.OnCreateContextMenuListener 的东西,它是通过在您按下的任何位置长按 来完成的,因此您将看到您要么必须实现另一个获取光标所在位置的方法,然后将您的编辑文本拆分为两个不同的 edit text 并插入您的图像,否则您将必须始终将图像置于 TextView 下,如图片所示

其次,当创建上下文菜单时,我们可以调用一个名为“InsertImage”的方法,其参数为从 menuInflater 传递的 Uri 或在您的类中定义为一个变量,以创建一个 ImageView 以在你的 EditText 之后假设你的父布局是线性布局:

LinearLayout LLayout = findViewById(R.id.linearLayout);

ImageView mImageView = new ImageView(this);
mImageView.setLayoutParams(new LinearLayout.LayoutParams(
                                     LinearLayout.LayoutParams.WRAP_CONTENT,
                                     LinearLayout.LayoutParams.WRAP_CONTENT));

LLayout.addView(mImageView);

在方法“InsertImage”完成后,您可以返回一个 boolean 来判断图像是否已上传或未上传,如果已上传,则您将创建另一种方法来启动一个新的 edit TextimageView 完全一样,但是如果它没有上传,那么您可以用同样的方式调用 removeView作为 addView

关于android - 使用上下文菜单在编辑器中插入文本和图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54401977/

相关文章:

android - 是否需要取消注册事件总线

android - Android 播放器的自定义媒体播放器控件

android - 应用未在 "Share"菜单中注册为 ACTION_SEND Intent 处理程序

java - 我应该如何处理具有相同名称但不同类的依赖项?

android - 新的谷歌账户添加广播

java - 如何动态地继续从单个 EditText 添加数据到自定义 ArrayList

当我使用移动数据时,带有 admob 的 Android 广告不显示

Android 分发限制证书

Android 轮播像画廊

android - 钛 : Exception Occured While Building Android Project