在我提出问题之前,这是来自Apple的文档:如何使用Quartz确定字符串的宽度:
如果文本测量对您的应用程序很重要,则可以使用Quartz 2D函数计算它们.但是,您可能首先考虑使用ATSUI,其优势在于文本布局和测量.ATSUI有几个获取文本度量的函数.您不仅可以获得布局后文本指标,而且在极少数情况下需要它们,您可以获得布局前文本指标.与Quartz不同,您必须自己执行计算,ATSUI会为您计算测量值.例如,您可以通过调用ATSUI函数ATSUMeasureTextImage来获取文本的图像边界矩形.
如果您决定Quartz文本比ATSUI(或Cocoa)更适合您的需求,您可以按照以下步骤在Quartz绘制之前测量文本的宽度:
- 调用函数CGContextGetTextPosition以获取当前文本位置.
- 使用函数CGContextSetTextDrawingMode将文本绘制模式设置为kCGTextInvisible.
- 通过调用函数CGContextShowText绘制文本以在当前文本位置绘制文本.
- 通过调用函数CGContextGetTextPosition确定最终文本位置.
- 从结束位置减去起始位置以确定文本的宽度.
这是我的问题:
这真的是使用Core Graphics确定字符串宽度的最佳方法吗?它似乎很脆弱,因为我的文本与2D图形元素共存,我想对所有渲染使用相同的上下文.我希望有一些紧凑的方法,如:
CGContextGetTextWidthAndHeight(context, text);
Run Code Online (Sandbox Code Playgroud)我读到ATSUI已经过时,将被Core Text取代.这是真的,如果是这样,是在iOS吗?
我创建了一个测试Activity,它在Android主屏幕上安装了自己的快捷方式.单击按钮时,Activity应该删除它刚刚创建的相同快捷方式.但是,我没做什么似乎删除了快捷方式.
这是Java代码(ShortcutTest.java):
import java.net.URISyntaxException;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class ShortcutTest extends Activity {
String shortcutUri;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
addShortcut(getBaseContext());
Button button = (Button)findViewById(R.id.Button01);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
removeShortcut(getBaseContext());
finish();
}
});
}
public void addShortcut(Context context) {
Intent shortcutIntent = new Intent();
shortcutIntent.setClassName("com.telespree.android.client", "com.telespree.android.client.ShortcutTest");
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Intent intent = new Intent();
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "ShortcutTest");
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(context, …Run Code Online (Sandbox Code Playgroud)