我正在尝试学习 android 编程。我已经成功地创建了屏幕并在其中导航。现在我正在尝试一些冒险的事情。
我正在创建一个像 MS Word 这样的文本编辑器,您可以在其中键入文本并使用上下文菜单插入图库中的图像。
我浏览了链接 Get/pick an image from Android's built-in Gallery app programmatically .但是我有几个问题。
- EditText 是正确的控件吗?
- 如何从光标所在的位置调用上下文菜单?
- 如何将图片粘贴到光标所在位置?
对此的任何见解都会有很大帮助。
好吧,让我们一一解决:
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 Text
与 imageView
完全一样,但是如果它没有上传,那么您可以用同样的方式调用 removeView
作为 addView