当前位置:首页 » 安卓系统 » android阿拉伯语

android阿拉伯语

发布时间: 2023-10-31 14:31:46

‘壹’ 如何在 Android 上的 TextView 上显示阿拉伯语文本

import android.content.Context;
import android.graphics.Typeface;
public final class Farsi {
public static boolean isFarsiConversionNeeded = true;
private final static String szLamAndAlef = Character
.toString((char) 0xfedf)
+ Character.toString((char) 0xfe8e); // Lam + Alef
private final static String szLamStickAndAlef = Character
.toString((char) 0xfee0)
+ Character.toString((char) 0xfe8e); // Lam (Sticky !!!)+
// Alef
private final static String szLa = Character.toString((char) 0xfefb); // La
private final static String szLaStick = Character.toString((char) 0xfefc); // La
// (Sticky!!!)
private final static String szLamAndAlefWoosim = Character
.toString((char) 0xe1)
+ Character.toString((char) 0xbb); // Lam + Alef

private final static String szLamStickAndAlefWoosim = Character
.toString((char) 0x90)
+ Character.toString((char) 0xbb); // Lam (Sticky !!!)+
// Alef

private final static String szLaWoosim = Character.toString((char) 0xd9); // La
private final static String szLaStickWoosim = Character
.toString((char) 0xd9); // La

// (Sticky!!!)

private static final class struc {
public char character;
public char endGlyph;
public char iniGlyph;
public char midGlyph;
public char isoGlyph;

public struc(char Character, char EndGlyph, char IniGlyph,
char MidGlyph, char IsoGlyph) {
character = Character;
endGlyph = EndGlyph;
iniGlyph = IniGlyph;
midGlyph = MidGlyph;
isoGlyph = IsoGlyph;
}
}

static struc[] arrStruc = {
new struc((char) 0x630, (char) 0xfeac, (char) 0xfeab,
(char) 0xfeac, (char) 0xfeab),
new struc((char) 0x62f, (char) 0xfeaa, (char) 0xfea9,
(char) 0xfeaa, (char) 0xfea9),
new struc((char) 0x62c, (char) 0xfe9e, (char) 0xfe9f,
(char) 0xfea0, (char) 0xfe9d),
new struc((char) 0x62d, (char) 0xfea2, (char) 0xfea3,
(char) 0xfea4, (char) 0xfea1),
new struc((char) 0x62e, (char) 0xfea6, (char) 0xfea7,
(char) 0xfea8, (char) 0xfea5),
new struc((char) 0x647, (char) 0xfeea, (char) 0xfeeb,
(char) 0xfeec, (char) 0xfee9),
new struc((char) 0x639, (char) 0xfeca, (char) 0xfecb,
(char) 0xfecc, (char) 0xfec9),
new struc((char) 0x63a, (char) 0xfece, (char) 0xfecf,
(char) 0xfed0, (char) 0xfecd),
new struc((char) 0x641, (char) 0xfed2, (char) 0xfed3,
(char) 0xfed4, (char) 0xfed1),
new struc((char) 0x642, (char) 0xfed6, (char) 0xfed7,
(char) 0xfed8, (char) 0xfed5),
new struc((char) 0x62b, (char) 0xfe9a, (char) 0xfe9b,
(char) 0xfe9c, (char) 0xfe99),
new struc((char) 0x635, (char) 0xfeba, (char) 0xfebb,
(char) 0xfebc, (char) 0xfeb9),
new struc((char) 0x636, (char) 0xfebe, (char) 0xfebf,
(char) 0xfec0, (char) 0xfebd),
new struc((char) 0x637, (char) 0xfeTypeface tf = Farsi.GetFarsiFont(this);
MyTextView.setTypeface(tf);
MyTextView.setText(Farsi.Convert("سلام"));
, (char) 0xfeMyTextView.setText(Farsi.Convert("سلام"));
,
(char) 0xfec4, (char) 0xfec1),
new struc((char) 0x643, (char) 0xfeda, (char) 0xfedb,
(char) 0xfedc, (char) 0xfed9),
new struc((char) 0x645, (char) 0xfee2, (char) 0xfee3,
(char) 0xfee4, (char) 0xfee1),
new struc((char) 0x646, (char) 0xfee6, (char) 0xfee7,
(char) 0xfee8, (char) 0xfee5),
new struc((char) 0x62a, (char) 0xfe96, (char) 0xfe97,
(char) 0xfe98, (char) 0xfe95),
new struc((char) 0x627, (char) 0xfe8e, (char) 0xfe8d,
(char) 0xfe8e, (char) 0xfe8d),
new struc((char) 0x644, (char) 0xfede, (char) 0xfedf,
(char) 0xfee0, (char) 0xfedd),
new struc((char) 0x628, (char) 0xfe90, (char) 0xfe91,
(char) 0xfe92, (char) 0xfe8f),
new struc((char) 0x64a, (char) 0xfef2, (char) 0xfef3,
(char) 0xfef4, (char) 0xfef1),
new struc((char) 0x633, (char) 0xfeb2, (char) 0xfeb3,
(char) 0xfeb4, (char) 0xfeb1),
new struc((char) 0x634, (char) 0xfeb6, (char) 0xfeb7,
(char) 0xfeb8, (char) 0xfeb5),
new struc((char) 0x638, (char) 0xfec6, (char) 0xfec7,
(char) 0xfec8, (char) 0xfec5),
new struc((char) 0x632, (char) 0xfeb0, (char) 0xfeaf,
(char) 0xfeb0, (char) 0xfeaf),
new struc((char) 0x648, (char) 0xfeee, (char) 0xfeed,
(char) 0xfeee, (char) 0xfeed),
new struc((char) 0x629, (char) 0xfe94, (char) 0xfe93,
(char) 0xfe93, (char) 0xfe93),
new struc((char) 0x649, (char) 0xfef0, (char) 0xfeef,
(char) 0xfef0, (char) 0xfeef),
new struc((char) 0x631, (char) 0xfeae, (char) 0xfead,
(char) 0xfeae, (char) 0xfead),
new struc((char) 0x624, (char) 0xfe86, (char) 0xfe85,
(char) 0xfe86, (char) 0xfe85),
new struc((char) 0x621, (char) 0xfe80, (char) 0xfe80,
(char) 0xfe80, (char) 0xfe80),
new struc((char) 0x626, (char) 0xfe8a, (char) 0xfe8b,
(char) 0xfe8c, (char) 0xfe89),
new struc((char) 0x623, (char) 0xfe84, (char) 0xfe83,
(char) 0xfe84, (char) 0xfe83),
new struc((char) 0x622, (char) 0xfe82, (char) 0xfe81,
(char) 0xfe82, (char) 0xfe81),
new struc((char) 0x625, (char) 0xfe88, (char) 0xfe87,
(char) 0xfe88, (char) 0xfe87),
new struc((char) 0x67e, (char) 0xfb57, (char) 0xfb58,
(char) 0xfb59, (char) 0xfb56), // peh
new struc((char) 0x686, (char) 0xfb7b, (char) 0xfb7c,
(char) 0xfb7d, (char) 0xfb7a), // cheh
new struc((char) 0x698, (char) 0xfb8b, (char) 0xfb8a,
(char) 0xfb8b, (char) 0xfb8a), // jeh
new struc((char) 0x6a9, (char) 0xfb8f, (char) 0xfb90,
(char) 0xfb91, (char) 0xfb8e), // keheh
new struc((char) 0x6af, (char) 0xfb93, (char) 0xfb94,
(char) 0xfb95, (char) 0xfb92), // gaf
// new struc((char) 0x6cc, (char) 0xfbfd, (char) 0xfbfe,
// (char) 0xfbff, (char) 0xfbfc), // Farsi yeh
new struc((char) 0x6cc, (char) 0xfbfd, (char) 0xfef3,
(char) 0xfef4, (char) 0xfbfc), // Arabic yeh
new struc((char) 0x6c0, (char) 0xfba5, (char) 0xfba4,
(char) 0xfba5, (char) 0xfba4) // heh with yeh
};

‘贰’ Android中selector使用详解

选择器在android中使用的非常广泛,点击反馈、选中、使能、聚焦等状态切换都会用到选择器。
一:下面是一个简单的选择器:

android:enterFadeDuration="200" 、android:exitFadeDuration="200":进入新状态或退出旧状态时会有一个200毫秒的渐变动画。这两个属性使用的比较常见,可以使选择器的状态切换更加平滑。

以下几个都是Drawable的属性。
android:autoMirrored="true"对应drawable.setAutoMirrored(),这个属性表示是否将drawable镜像显示,只有在从右往左布局的环境下才会生效。将此属性设置成true,并将语言调节成阿拉伯语便可以看到效果。
android:dither="true"对应drawable.setDither(),这个属性表示是否对图像进行抖动处理。当图像的bit-color较少时,通过颜色值的抖动来增加可用颜色数量,并保持较好的显示效果。
android:visible="true" 对应drawable.setVisible(),设置Drawable是否可见,一般不会影响Drawable的行为,但是它是Drawable是否运行了动画的一个暗示。例如:AnimationDrawable可以通过这个方法启动或者停止动画。

剩下两个属性对应DrawableContainer$DrawableContainerState里面的属性(DrawableContainer是Drawable的一个子类,DrawableContainerState是DrawableContainer的内部类)。
android:constantSize="true":当选择器各个状态的图片大小不一时,设置为 true表示以最大的图片的尺寸显示,设置为false以默认的图片的尺寸显示(控件大小会对现象有影响,需要是包裹内容的)。
android:variablePadding="false" :默认为false,这个属性意义不大,通常不去设置。

二:Item的各种状态,理解起来相对简单,都可以从属性的名字去理解其含义,例如:

状态为加速的时候会显示ic_launcher_m图片,那么是什么加速呢?这就需要自己去分析一下,其实这里指的加速是对View的软件加速或硬件加速。

当给View设置background、foreground或ImageView设置src时只能写android:drawable="id":

当给文字颜色添加选择器的时候必须要写android:color="ARGB|RGB颜色值"

三:注意安卓程序在读取选择器文件时,是从上往下一个一个节点进行遍历的,程序会选择符合当前控件状态的第一个Item的内容。如果一个Item不写任何状态,表示它任何状态都符合, 所以一般最后一个Item是不会写任何状态的(就像if(){}else if(){}else{}语句一样,最后一个包含了剩下的所有情况)。

四:选择器的Item和animated-rotate一起使用。

五:动态创建选择器
动态创建一个简单的选择器:

用一张图片,通过对图片的着色创建选择器:

创建矢量图选择器:

TextView文字颜色选择器:

部分常用状态数组:

‘叁’ Android资源标签属性及优先级(一)

在写前一篇文章 浅述Android Apk打包流程 的时候发现解压后的apk里res的资源文件,有多于我本地项目中的res资源文件夹

如果我的项目中依赖了Android的一些库,比如design库,design里面有自己的res,那么在打包我的项目的时候,这些res会合并一起打包。
我查看了下,我确实依赖了design等库。

对比一下前三张图,我本地项目没有建anim、anim-v21、animator-v21(不再截图了)等资源文件夹,但是design库有,最终一并打包到我的项目中。

res目录下的文件夹是有命名规则的,不能随便起,为的是要适配不同的设备,而且是要做到最佳的资源匹配。

2.1、资源标签属性及优先级
除了分辨率外,同种资源之间可以有下面许多资源属性标签,它们在匹配过程中是有优先级顺序的。大家可以快速浏览一下即可。以下资源标签修饰语按照优先级从高到低的顺序排列。

3、Locale(语言和区域)
例如en表示英语,fr表示法语,en-rUS表示英语和美国地区。不区分大小写,r用于区分区域码。

4、Layout Direction(布局方向)
ldrtl,布局方向从右到左(阿拉伯语等会这样布局);ldltr,布局方向从左到右,是默认的隐式值。(这就解答了我前面第二个提的问题了)

5、Smallest Screen Width(最小宽度)
sw<N>dp,屏幕的基本尺寸。
sw320dp:适用于320 320 ldpi、320 480 mdpi、480 480 hdpi
sw600dp:适用于600 1024mdpi (7英寸的平板电脑)
sw720dp:适用于720*1280 mdpi (10英寸平板电脑)
当你的屏幕的绝对宽度大于600dp时,屏幕就会自动调用layout-sw600dp文件夹里面的布局。这里的绝对宽度是指手机的实际宽度,即与手机是否横屏没关系,也就是手机较小的边的长度。

6、Screen Width(屏幕宽度)
w<N>dp ,设备的可用宽度值随着当前是横屏还是竖屏会产生变化,即它表示的是当前真实的宽度值。即当手机竖屏时,为较小边的长度;当手机横屏时,为较长边的长度。

7、Screen Height(屏幕高度)
h<N>dp,与lScreen Width的使用一样,只是这里指的是相对的高度。指手机相对放置的高度;即当手机竖屏时,为较长边的长度;当手机横屏时,为较小边的长度。

8、Size(屏幕大小)
samll:低密度,最小布局尺寸为320 426dp
normal:中等密度,标准屏幕最小布局尺寸约为320 470dp
large:中等密度,大屏幕最小布局尺寸为480 640dp
xlarge:大于中等密度,最小布局尺寸为720 960dp。基本用于平板电脑。
该配置并不仅适用于指定设备,如果没有匹配的资源,会选择与之最近的。 如果所有资源均大于当前屏幕的尺寸限定符,则系统不会使用这些资源,且应用运行时会崩溃。

9、Ratio(屏幕纵横比)
long:宽屏
notlong:非宽屏

10、Orientation(屏幕方向)
port:竖向的
land:横向的
square:正方形的(我也不知道这个是什么样子的)

11、UI Mode(UI模式)
无、car、desk、 television、appliance、 watch6种模式。(其实我没看明白是干嘛的,哈哈)

12、Night Mode(夜间模式)
night:夜间模式
notnight:非夜间模式
可以通过UiModeManager来开启和关闭这一功能。

13、Density(屏幕像素密度)
ldpi:低密度,约120dpi;mdpi:中等密度,160dpi;hdpi:高密度,240dpi;xhdpi:超高密度,320dpi;xxhdpi:超超高密度,480dpi;xxxhdpi:超超超高密度,640dpi;nodpi:不希望以匹配设备密度的位图资源;tvdpi:主要用于电视,约213dpi。anydpi:适用于所有密度,优先级高于其他限定符。

14、Touch Screen(触摸屏)
notouch:设备不带触摸屏
stylus:触摸屏通过手写笔操作
finger:触摸屏通过手指操作

15、Keyboard(键盘可用性)
keysexposed:设备有可用键盘。如果当前的软键盘被启用,那么即便设备没有键盘或者键盘不可用,这个状态仍可能有效。
keyshidden:设备有键盘,但当前被隐藏,而且没有软键盘启用。
keyssoft:设备当前软键盘启动,即便它处于可见或不可见状态。

16、Text Input(文本输入法)
nokeys:设备不带用用于文本输入的按键
qwerty:设备具有标准硬键盘(无论是否对用户可见)
12key:设备具有 12 键硬键盘(无论是否对用户可见)

17、Navigation State(定位键可用性)
描述定位键是否可用,指的是光标定位,非GPS导航的定位。
navexposed:定位键对用户可用
navhidden:定位键对用户不可用

18、Navigation Method(主要的非触摸屏定位方式)
nonav:设备除了触摸屏外没有其他定位方式
dpad:设备具有用于导航的方向键
trackball:设备具有用于导航的轨迹球
wheel:设备有方向滚轮用于定位,不常用

19、Dimension(尺寸)

20、Version(平台版本)
设备支持的 API 级别。例如v4 对应于 API 级别 4,带有 Android 1.6 或更高版本系统的设备。

2.2、怎么在AS中创建这些文件夹呢?

‘肆’ android自定义软键盘支持多语言

支持。android自定义软键盘支持阿拉伯语、英语、德语、意大利语、汉语、葡萄牙语和西班牙语等,还支持用各种新语言搜索表情符号的能力。

‘伍’ android应用内怎么设置语言切换

1.在工程res文件下添加对应语种的values文件,ar:阿拉伯语, en:英语 zh_rCN: 简体中文
截图如下:

2 .在功能清单文件中对要进行切换acitivity 进行配置添加

android:configChanges="locale"

3.对语言选择的处理

public class MainActivity extends Activity {

Context context = MainActivity.this;;
int languageId;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
read();//设置
setContentView(R.layout.main);

findViewById(R.id.btn_change).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
save();
}
});
}

//保存
private void save() {
String[] languages = { "默认", "CN", "EN" };
AlertDialog.Builder builder = new AlertDialog.Builder(context,
android.R.style.Animation_Dialog);
builder.setTitle("选择语言");
final SharedPreferences languagePre = context.getSharedPreferences(
"language_choice", context.MODE_PRIVATE);
final int id = languagePre.getInt("id", 0);
builder.setSingleChoiceItems(languages, id,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int index) {
switch (index) {
case 0:
// 系统默认语言
languageId = 0;
break;
case 1:
// 简体中文
languageId = 1;
break;
case 2:
// 英语
languageId = 2;

break;
case 3:
// 阿拉伯语
languageId = 3;

break;
default:
break;
}
languagePre.edit().putInt("id", languageId).commit();
}
});
// 保存
builder.setPositiveButton("保存", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
((Activity) context).finish();
Intent intent = new Intent();
intent.setClass(context, MainActivity.class);
context.startActivity(intent);
}
});
builder.show();
}
//读取
private void read() {
SharedPreferences languagePre = getSharedPreferences("language_choice",
Context.MODE_PRIVATE);
int id = languagePre.getInt("id", 0);
Log.d("MainActivity", "langauge_id=" + id);
Toast.makeText(context, "langauge_id=" + id, Toast.LENGTH_LONG).show();
// 应用内配置语言
Resources resources = getResources();// 获得res资源对象
Configuration config = resources.getConfiguration();// 获得设置对象
DisplayMetrics dm = resources.getDisplayMetrics();// 获得屏幕参数:主要是分辨率,像素等。
switch (id) {
case 0:
config.locale = Locale.getDefault(); // 系统默认语言
break;
case 1:
config.locale = Locale.SIMPLIFIED_CHINESE; // 简体中文
break;
case 2:
config.locale = Locale.ENGLISH; // 英文
break;
default:
config.locale = Locale.getDefault();
break;
}
resources.updateConfiguration(config, dm);
}
}

热点内容
sqlce数据库 发布:2024-11-30 07:41:21 浏览:725
奇瑞5x配置如何 发布:2024-11-30 07:39:50 浏览:641
魔域数据库修改 发布:2024-11-30 07:37:10 浏览:130
c语言开发者 发布:2024-11-30 07:30:34 浏览:387
西门子触摸屏字体无法编译 发布:2024-11-30 07:26:13 浏览:301
云服务器低 发布:2024-11-30 07:24:47 浏览:300
这首歌密码是多少 发布:2024-11-30 07:19:35 浏览:523
c语言数组最大长度 发布:2024-11-30 07:16:51 浏览:367
在线编程刷题 发布:2024-11-30 07:15:17 浏览:72
监控管理服务器有什么要求 发布:2024-11-30 07:09:46 浏览:172