- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我想制作一个旋转和翻转的 EditText View ,它具有普通 EditText View 的所有属性。
我已经成功地(在 SO 用户的帮助下)制作了一个自定义的 EditText View ,该 View 既可以旋转又可以翻转。这是通过覆盖 onDraw 方法完成的。但是,光标和突出显示消失了,longtouch 事件仍然指示原始文本位置。基本上, View 被重绘,但触摸事件没有。
如何让触摸事件、突出显示和光标也被旋转和翻转?
EditText scale with selection (类似的问题,但不完全相同。)
How to make a custom Edittext,so that it will look like as 45 degree rotated in android (@CommonsWare 指出了一种解决方案,即需要对触摸事件进行附加工作。那是什么工作?)
http://developer.android.com/training/graphics/opengl/touch.html (有帮助,但我不明白如何在这种情况下应用它。)
我制作了一个扩展 EditText 的自定义 View 。其中覆盖了 onDraw 方法来旋转和翻转 Canvas 。我覆盖了 onMeasure 以使 View 具有适合布局的尺寸。
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Typeface;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.widget.EditText;
public class MongolEditText extends EditText {
// Constructors
public MongolEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public MongolEditText(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MongolEditText(Context context) {
super(context);
init();
}
// This class requires the mirrored Mongolian font to be in the assets/fonts folder
private void init() {
Typeface tf = Typeface.createFromAsset(getContext().getAssets(),
"fonts/MongolChagaanMirrored.ttf");
setTypeface(tf);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(heightMeasureSpec, widthMeasureSpec);
setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
}
@Override
protected void onDraw(Canvas canvas) {
TextPaint textPaint = getPaint();
textPaint.setColor(getCurrentTextColor());
textPaint.drawableState = getDrawableState();
canvas.save();
canvas.translate(getWidth(), 0);
canvas.rotate(90);
canvas.translate(0, getWidth());
canvas.scale(1, -1);
canvas.translate(getCompoundPaddingLeft(), getExtendedPaddingTop());
getLayout().draw(canvas);
canvas.restore();
}
}
布局 xml 没有什么特别之处。
(更新)这个问题是另一个尝试,但最后我无法让它工作:Does invalidateDrawable() need to be overridden in addition to onDraw()?
如果您想知道为什么我要旋转和翻转 EditText View ,这就是原因。传统的蒙古文是从左到右垂直书写的。结合垂直镜像的蒙古字体,将文本顺时针旋转 90 度并翻转它会产生具有正确换行的可读输出。
这不是一个模糊或孤立的问题。传统蒙古语用户数以百万计,但安卓应用却很少。其中,我还没有找到任何开源的。如果我能让这个工作,我想让其他开发人员可以使用代码。
我正在考虑从头开始创建自定义 View (扩展 View
)以创建类似于 TextView
的东西。此 TextView
可以从应用程序中更新,以充当 EditText
View 。在这种情况下,我只需要使用普通字体将文本旋转 90 度,但不需要翻转它。但是,我必须自己进行换行。
但是,在阅读@Chitrang 的回答后,我想我可以通过扩展 TextView 来做类似的事情。这样我就可以避免自己做换行的麻烦了。
图片更新
蒙古语是从上到下,从左到右书写的。现在我正在使用这个键盘在文本周围移动光标,但我希望能够触摸屏幕将光标移动到某个位置。
最佳答案
试图通过微小的更改获得部分解决方案,检查是否是您想要的。
1) 在 xml 中的 edittext 声明中设置 android:gravity="top|left"。
2)注意到在onDraw方法中没有super方法调用,不能显示光标。于是我打了电话,
super.onDraw(canvas);
相反,
getLayout().draw(canvas);
3) 对于触摸事件,我尝试交换 x 和 y 坐标。这样您就可以根据触摸事件获得光标。(刚刚尝试过,它正在工作,很幸运:))
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
event.setLocation(event.getY(), event.getX());
return super.onTouchEvent(event);
}
在 onDraw 方法中注释此行,以获得精确的触摸事件(通过反复试验找到)。
canvas.translate(getCompoundPaddingLeft(), getExtendedPaddingTop());
4) 我无法对突出显示或选择文本做任何事情。
?) 另一个解决方案: 如果您这么认为,那么您将如何获得 RTL 语言支持处理edittext然后你只需要旋转它。但不幸的是,它无法在 android 上正常工作。引用:How to handle RTL languages on pre 4.2 versions of Android?和 Android setting with TextView for Hebrew text?
关于android - 具有工作选择、光标位置等的自定义旋转 EditText View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25036816/
我有一个包含透明区域的 png,并将其设置为图像标签。 当光标位于图像的不透明部分上时,如何将光标设置为手? 谢谢 最佳答案 为此,您需要查看位图本身。 WPF 的 HitTest 机制认为任何使用“
我想隐藏圆形仪表的手(那就是中间的东西,对吧?)。到目前为止,我尝试过: myCircularGauge.getHand().setVisible(false); 但是,绘制图表时这似乎会产生崩溃。如
我有两张图片:一张是张开的手,一张是抓着的手。我希望一个简单的“onmousedown”和“onmouseup”函数有助于制作出著名的抓手,您可以在类似谷歌地图的东西中看到它。但...抱歉,从头开始:
是否可以在sequelize迁移中使用光标?我正在尝试创建 DML 脚本,其想法是循环表中的值,即。使用游标输入日期,然后将值插入到其他表中,即。光标内的膳食日。 table : day dayId
我正在尝试使用格式加载值 +02:00 - mysql> select SUBSTR('2016-01-12T14:29:31.000+02:00',24,6); +02:00
我一直在尝试构建一个基于网络的文本编辑器。作为该过程的一部分,我正在尝试动态创建和修改基于元素的事件和用于字体编辑的击键事件。在这个特别的jsfiddle示例 我试图在按下 CTRL+b 并将焦点/插
我同时使用了 supertab 和 snipmate 插件。假设我正在使用 snipmate 创建一个 if 语句结构。在 if 语句中完成添加语句后,如何快速将光标移动到 if 语句之后。例如: i
我正在为我的 BlackBerry 项目创建一个搜索框,但看起来 BlackBerry 没有用于创建单行 EditField 的 API。我通过扩展 BasicEditField 和覆盖布局和绘制等方
我想知道如何获得 not-allowed光标在我禁用的链接上。我试图将它添加到禁用事件中,但它在那里不起作用,然后我尝试使用相同的光标事件引入悬停效果。关于如何让它发挥作用的任何想法?我在这里包含了我
在 Delphi 6 中,我可以使用 Screen.Cursor 更改所有表单的鼠标光标: procedure TForm1.Button1Click(Sender: TObject); begin
这个 Meteor 服务器代码需要每 n 秒从集合中打印一次文档,我该如何让它工作?谢谢 myCol.find({abc: undefined}).forEach( fun
在这个论坛上花了相当长的时间寻找与我的问题类似的答案,但找不到符合我的情况的答案。 我有一个 HTML 表单,通过 javascript 将其提交到我的 aspx 页面。 function Submi
是否可以在网页上创建透明的 HTML 光标?我使用 div 作为光标,我想让 div 50% 透明: http://jsfiddle.net/mCgmP/16/ I want this cursor
我正在使用 Cursor 来获取存储在我的 SQLite 数据库中的一些数据。当我的光标有数据库中的一些数据时,代码可以正常工作。但是,当 Cursor 不包含任何数据时,我在 Cursor.move
我希望隐藏特定范围的 x 和 y 位置中的光标。这是一些示例代码,代表了我想要做的事情。 if(x >= xLowerBound && x = yLowerBound + 20 && y = xLow
我有一个 .jsp 页面,用户可以在其中输入信息,然后使用保存按钮保存。该应用程序可以运行,但由于按钮的单击事件正在运行 Java 代码,然后将保存的信息添加到 Oracle 数据库,因此需要一些时间
为什么 Android 中 Cursor 没有 moveBeforeFirst()? 其他风格的 Java 中也有类似的方法,如果您需要重新迭代结果集(例如,在 while(cursor.moveTo
我想使用 Tkinter 捕获相对鼠标运动。我附上一个监听器并且能够获取鼠标移动。但是,我希望能够“捕获”/“锁定”光标,使其不可见并且无法离开窗口(就像游戏一样)。我的目标是获得相对鼠标移动而不受窗
当应用程序同步时,我尝试更新数据库中每一行的“html”列。我用过这个教程Here将应用程序添加到“配置文件”列表中。这是我在 SyncAdapter 中使用的代码: private static v
我正在使用 Uploadify带有图像按钮。一切正常。除了,我需要在鼠标悬停时使用 cursor:crosshair; 而不是 cursor:default;。 我试着在 CSS 中这样设置它: ob
我是一名优秀的程序员,十分优秀!