PREAMBLE:从API 17(Android 4.2)开始,有一种方法TextView.setTextLocale()可以明确地解决TextViews和派生类的这个问题.分配日语语言环境(Locale.JAPAN),Unihan字符将显示日语.
我在Android上有一个应用程序,它在WebViews和TextViews中显示日文文本.按照惯例,在中国和日本,有一些汉字(汉字)看起来不同,但共享相同的Unicode码点.通常,浏览器会依赖lang标签来选择正确的字形.在Android上,它们都默认为中文形状,我想要日本形状.
这篇文章很好地解释了这个问题.本文也可以作为问题的完美例证 - 当在Android上观看(最多2.2)时,"语言相关字符示例"中的字符看起来都是一样的,中文也是如此.
使用该lang="ja"属性没有帮助.将整个系统区域设置切换为日语也无济于事.
我想知道在日本销售的Android手机.像rect,今,化这样的人物也会看起来像中国式吗?我假设不是.
所以问题是:那里有Android官方本地化图片吗?我可以让一个人在模拟器上运行吗?DroidSansFallback字体仍然是那些唯一支持CJK的字体吗?如果是的话,它与香草美国Android上的相同吗?
我有点希望日语字形隐藏在字体深处(Unicode私有区域或其他东西).如果是这样,我可以利用它们......
编辑:位于DroidSansJapanese.ttf,通过复制到/ system/fonts,重新启动它在模拟器上安装.它对Unihan文章的外观没有任何影响.即使日文输入的提示区域(应该知道更好)也显示为中文.
我怎么知道DroidSansJapanese.ttf的字体名称?我觉得它仍然是Droid Sans,与内置的DroidSansFallback字体相同.但是,如果它们包含相同的字体,那么哪个应该优先考虑?有人会想 - 系统区域设置,但显然不是.Android中的字体只是通过复制安装,对吗?
我在从Android平台上的InputStream读取时遇到了一个奇怪的问题.我不确定这是Android特定的问题,还是我一般都做错了.
唯一特定于Android的是此调用:
InputStream is = getResources().openRawResource(R.raw.myfile);
Run Code Online (Sandbox Code Playgroud)
这将从Android资产返回文件的InputStream.无论如何,这是我遇到问题的地方:
bytes[] buffer = new bytes[2];
is.read(buffer);
Run Code Online (Sandbox Code Playgroud)
当read()执行时抛出IOException.奇怪的是,如果我执行两个连续的单字节读取(或任意数量的单字节读取),则没有例外.例如,这有效:
byte buffer;
buffer = (byte)buffer.read();
buffer = (byte)buffer.read();
Run Code Online (Sandbox Code Playgroud)
任何想法为什么两个连续的单字节读取工作,但一次调用同时读取两个引发异常?该InputStream中似乎罚款... is.available()回报超过一百万个字节(因为它应该).
堆栈跟踪显示在以下行之前的这些行InputStream.read():
java.io.IOException
at android.content.res.AssetManager.readAsset(Native Method)
at android.content.res.AssetManager.access$800(AssetManager.java:36)
at android.content.res.AssetManager$AssetInputStream.read(AssetManager.java:542)
Run Code Online (Sandbox Code Playgroud)
将缓冲区大小更改为单个字节仍会引发错误.看起来只有在读入字节数组时才会引发异常.
如果我将文件截断为100,000字节(文件最初为:1,917,408字节),它可以正常工作.超过一定大小的文件有问题吗?
任何帮助表示赞赏!
谢谢!
我的程序从assets文件夹中打开一个.txt文件并从中读取.这是代码:
AssetManager myAssetManager = myContext.getAssets();
try{
InputStream is = myAssetManager.open("databaseeleven.txt");
byte[] bytes = new byte[is.available()];
is.read(bytes);
commands = new String(bytes);
} catch(IOException e){
Toast.makeText(myContext, e.getMessage(), Toast.LENGTH_SHORT).show();
e.printStackTrace();
}//try-catch
Run Code Online (Sandbox Code Playgroud)
我注意到当我对名为databaseeleven.txt的文件进行更改并保存文件时,当我再次运行程序时,我的更改不会反映在模拟器上.该项目保存到拇指驱动器.我检查了它以确保只有一个具有该名称的文件,并且它是最新的.我知道由于代码的更改,应用程序被重新下载.我正在使用egit,Eclipse版本3.6.2和ADT版本10.0.1.有谁知道为什么我的程序没有处理这个保存的文件?
更新:刷新然后再次清理项目没有帮助.
我的要求是通过内容提供商从另一个应用程序打开一个应用程序的资产文件.(我使用ContentProvider实现公开该文件)
我能够打开几个文件并阅读,但在打开一些文件时我会遇到异常.请找到打开资产文件的实现.
@Override
public AssetFileDescriptor openAssetFile(Uri uri, String mode) throws FileNotFoundException {
AssetManager am = getContext().getAssets();
String file_name = uri.getLastPathSegment();
if(file_name == null)
throw new FileNotFoundException();
AssetFileDescriptor afd = null;
try {
afd = am.openFd(file_name);
} catch (IOException e) {
e.printStackTrace();
}
return afd;//super.openAssetFile(uri, mode);
}
Run Code Online (Sandbox Code Playgroud)
有时候am.openFd(file_name);会抛出一个例外说,
java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed
at android.content.res.AssetManager.openAssetFd(Native Method)
at android.content.res.AssetManager.openFd(AssetManager.java:329)
at com.pineone.swfinstaller.SwfProvider.openAssetFile(SwfProvider.java:25)
at android.content.ContentProvider$Transport.openAssetFile(ContentProvider.java:218)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:234)
at android.os.Binder.execTransact(Binder.java:288)
at dalvik.system.NativeStart.run(Native Method) …Run Code Online (Sandbox Code Playgroud) 可能重复:
如何将现有数据库放在.apk文件中?
是否有可能获得对位于apk的sqlite数据库的只读访问权限?如果可以从apk中以只读方式访问数据库,我不想复制数据库.
我正在尝试播放我在项目中保存的视频.我已经下载了这个 (.mp4测试视频),然后在项目的根目录中创建了一个名为vid的文件夹.然后我使用了这段代码:
public void PlayLocalVideo(View view)
{
VideoView video=(VideoView) findViewById(R.id.video1);
MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(video);
video.setMediaController(mediaController);
video.setKeepScreenOn(true);
video.setVideoPath("android.resource://uk.co.SplashActivity/vid/big_buck_bunny.mp4");
video.start();
video.requestFocus();
}
Run Code Online (Sandbox Code Playgroud)
我的xml看起来像这样:
<VideoView
android:id="@+id/video1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)
PlayLocalVideo是我在按钮上的onclick事件中使用的方法.但是当我按下播放时没有任何反应:(
android ×6
java ×2
apk ×1
assets ×1
cjk ×1
directory ×1
eclipse ×1
inputstream ×1
ioexception ×1
localization ×1
media-player ×1
sqlite ×1
unicode ×1
video ×1