Apk应用开发
名人名言:生而富者骄,生而贵者傲
多语言适配
- 多国语言value文件夹命名方式
语言 | 文件夹 | 语言 | 文件夹 |
---|---|---|---|
中文(中国) | values-zh-rCN | 法文(法国) | values-fr-rFR |
中文(香港) | values-zh-rHK | 希伯来文 | values-iw-rIL |
中文(台湾) | values-zh-rTW | 印地文 | values-hi-rIN |
英语(美国 | values-en-rUS | 克罗里亚文 | values-hr-rHR |
英语(英国) | values-en-rGB | 匈牙利文 | values-hu-rHU |
英文(澳大利亚) | values-en-rAU | 印度尼西亚文 | values-in-rID |
英文(加拿大) | values-en-rCA | 意大利文(瑞士) | values-it-rCH |
英文(爱尔兰) | values-en-rIE | 意大利文(意大利) | values-it-rIT |
英文(印度) | values-en-rIN | 日文 | values-ja-rJP |
英文(新西兰) | values-en-rNZ | 韩文 | values-ko-rKR |
英文(新加坡) | values-en-rSG | 立陶宛文 | valueslt-rLT |
英文(南非) | values-en-rZA | 拉脱维亚文 | values-lv-rLV |
阿拉伯文(埃及) | values-ar-rEG | 挪威博克马尔文 | values-nb-rNO |
阿拉伯文(以色列) | values-ar-rIL | 荷兰文(比利时) | values-nl-BE |
保加利亚文 | values-bg-rBG | 荷兰文(荷兰) | values-nl-rNL |
加泰罗尼亚文 | values-ca-rES | 波兰文 | values-pl-rPL |
捷克文 | values-cs-rCZ | 葡萄牙文(巴西) | values-pt-rBR |
丹麦文 | values-da-rDK | 葡萄牙文(葡萄牙) | values-pt-rPT |
德文(奥地利) | values-de-rAT | 罗马尼亚文 | values-ro-rRO |
德文(瑞士) | values-de-rCH | 俄文 | values-ru-rRU |
德文(德国) | values-de-rDE | 斯洛伐克文 | values-sk-rSK |
德文(列支敦士登) | values-de-rLI | 斯洛文尼亚文 | values-sl-rSI |
希腊文 | values-el-rGR | 塞尔维亚文 | values-sr-rRS |
西班牙文(西班牙) | values-es-rES | 瑞典文 | values-sv-rSE |
西班牙文(美国) | values-es-rUS | 泰文 | values-th-rTH |
芬兰文(芬兰) | values-fi-rFI | 塔加洛语 | values-tl-rPH |
法文(比利时) | values-fr-rBE | 土耳其文 | values–r-rTR |
法文(加拿大) | values-fr-rCA | 乌克兰文 | values-uk-rUA |
法文(瑞士) | values-fr-rCH | 越南文 | values-vi-rVN |
主题样式
- Android中定义的系统主题样式
Style属性android:theme=* | 样式说明 |
---|---|
theme="@android:style/Theme.Dialog" | 将Activity显示为对话框模式 |
theme="@android:style/Theme.NoTitleBar" | 不显示应用程序标题栏 |
theme="@android:style/Theme.NoTitleBar.Fullscreen" | 不显示应用程序标题栏,并全屏 |
theme="@android:style/Theme.Light" | 背景为白色 |
theme="@android:style/Theme.Light.NoTitleBar" | 白色背景并无标题栏 |
theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" | 白色背景,无标题栏,全屏 |
theme="@android:style/Theme.Black" | 背景黑色 |
theme="@android:style/Theme.Black.NoTitleBar" | 黑色背景并无标题栏 |
theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" | 黑色背景,无标题栏,全屏 |
theme="@android:style/Theme.Wallpaper" | 用系统桌面为APP背景 |
theme="@android:style/Theme.Wallpaper.NoTitleBar" | 用桌面为APP背景,且无标题栏 |
theme="@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen" | 桌面为APP背景,无标题栏全屏 |
theme="@android:style/Translucent" | 半透明效果 |
theme="@android:style/Theme.Translucent.NoTitleBar" | 半透明并无标题栏 |
theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" | 半透明效果,无标题栏,全屏 |
theme="@android:style/Theme.Panel" |
- Android系统中三种字体大小
xml
android:textSize="?android:attr/textAppearanceLarge"
android:textSize="?android:attr/textAppearanceMedium"
android:textSize="?android:attr/textAppearanceSmall"
- Android系统中字体颜色定义
xml
android:textColor="?android:attr/textColorPrimary"
android:textColor="?android:attr/textColorSecondary"
android:textColor="?android:attr/textColorTertiary"
android:textColor="?android:attr/textColorPrimaryInverse"
android:textColor="?android:attr/textColorSecondaryInverse"
- Android系统中ProgressBar样式
xml
style="?android:attr/progressBarStyleHorizontal"
style="?android:attr/progressBarStyleLarge"
style="?android:attr/progressBarStyleSmall"
style="?android:attr/progressBarStyleSmallTitle"
- 其他更多Style
xml
style="?android:attr/starStyle" #CheckBox样式
android:background="?android:attr/listDivider" #分隔符
style="?android:attr/listSeparatorTextViewStyle" #标题栏效果的TextView
<item name="android:background">#778899</item>
<item name="android:windowTitleSize">32dp</item>
<item name="android:windowTitleBackgroundStyle">@style/AutoWindowTitleBackground</item>
多形式弹窗
java
public void demo() {
String[] item = new String[]{ "Item1", "Item2" };
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("我是标题");
builder.setMessage("我是消息提示!"); //设置列表时需屏蔽消息提示
//builder.setItems(item, null); //列表Arg:items ClickListener
//builder.setView(new EditText(this)); //自定义View简单演示编辑框,可使用LayoutInflater.from(this).inflate扩展
//builder.setMultiChoiceItems(item, null, null); //多选列表Arg:items checkedItems ClickListener
//builder.setSingleChoiceItems(item, 0, null); //单选列表Arg:items checkedItems ClickListener
builder.setIcon(R.drawable.music); //ICON
builder.setNegativeButton("取消按钮", null);
//builder.setNeutralButton("中间按钮", null);
builder.setPositiveButton("确定按钮", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
/* ClickListener Close */
dialog.dismiss();
}
});
builder.create().show(); //创建显示
}
获取内存
- 读取/proc/meminfo实现、第一行为总内存
- /proc/cpuinfo为Cpu信息、版本/proc/version
java
public void getTotalMemory() {
String str = "";
try {
FileReader fr = new FileReader("/proc/meminfo");
BufferedReader bfReader = new BufferedReader(fr, 8192);
/* Single line Read
String[] list = bfReader.readLine().split("\\s+");
for (String item : list) Log.i(TAG, "--->" + item);
*/
while ((str = bfReader.readLine()) != null) {
Log.i(TAG, "--->" + str);
}
} catch (IOException e) {
}
}
- 通过ActivityManager服务获取内存
java
public void getAvailMemory() {
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
am.getMemoryInfo(mi);
Log.i(TAG, "--->" + mi.availMem);
}
获取ROM大小
java
public void getRomMemroy() {
/*
* Sdcard If there is any
* Environment.getExternalStorageDirectory()
*/
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
long size = totalBlocks * blockSize;
Log.i(TAG, "--->" + size);
long availableBlocks = stat.getAvailableBlocks();
long availableSize = blockSize * availableBlocks;
Log.i(TAG, "--->" + availableSize);
}
电池电量
java
public void init() {
registerReceiver(batteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
private BroadcastReceiver batteryReceiver = new BroadcastReceiver(){
public void onReceive(Context context, Intent intent) {
int level = intent.getIntExtra("level", 0);
Log.i(TAG, "--->" + level + "%");
}
};
获取Mac地址
java
public void getWifiMacInfo(){
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo.getMacAddress() != null) Log.i(TAG, "--->" + wifiInfo.getMacAddress());
}
开机时间
java
private void getTimes() {
long ut = SystemClock.elapsedRealtime() / 1000;
if (ut == 0) ut = 1;
int m = (int) ((ut / 60) % 60);
int h = (int) ((ut / 3600));
Log.i(TAG, "--->" + h + "h:" + m);
}
shape使用
- shape用于设定形状,可以在selector,layout等里面使用,有6个属性
xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 圆角=左上角=右上角=左下角=右下角=radius为所有角不可同时设置-->
<corners android:radius="9dp" android:topLeftRadius="2dp" android:topRightRadius="2dp" android:bottomLeftRadius="2dp" android:bottomRightRadius="2dp"/>
<!-- 渐变 -->
<gradient android:useLevel="true" android:angle="45" android:type="radial" android:centerX="0" android:centerY="0"
android:startColor="@android:color/white"
android:centerColor="@android:color/black"
android:endColor="@android:color/black"
android:gradientRadius="90" />
<!-- 间隔->各方向的间隔 -->
<padding android:left="2dp" android:top="2dp" android:right="2dp" android:bottom="2dp" />
<!-- 大小->宽度和高度 -->
<size android:width="50dp" android:height="50dp" />
<!-- 填充->填充的颜色 -->
<solid android:color="@android:color/white" />
<!-- 描边->dashWidth虚线宽度dashGap虚线间隔宽度#任意一个设置为0则实心-->
<stroke android:width="2dp" android:color="@android:color/black" android:dashWidth="1dp" android:dashGap="2dp"/>
</shape>
APP编译模式
- 执行getprop | grep pm命令即可查看
Android超链接
- 方式一
xml
android:autoLink="web"
android:autoLink="all" #TextView添加
- 方式二
xml
<string name="str_link">百度:<a href="http://m.baidu.com">点击跳转</a></string>
- 方式三
java
tv.setText(Html.fromHtml("百度:" + "<a href='http://m.baidu.com'>点击跳转</a> "));
tv.setMovementMethod(LinkMovementMethod.getInstance());
- 方式四
java
SpannableString ss = new SpannableString("百度: 点击跳转");
ss.setSpan(new URLSpan("http://m.baidu.com"), 5, 9, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //5-9
tv.setText(ss);
tv.setMovementMethod(LinkMovementMethod.getInstance());
- Spannable富文本
java
SpannableString ss = new SpannableString("demo text");
ss.setSpan(AbsoluteSizeSpan(size), index, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); #text size
ss.setSpan(ForegroundColorSpan(color), index, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); #text Color
ss.setSpan(BackgroundColorSpan(color), index, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); #text bgColor
ss.setSpan(TextAppearanceSpan(this, R.style.TextStyle), index, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
ss.setSpan(UnderlineSpan(), index, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); #Under line
ss.setSpan(SuperscriptSpan(), index, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); #Superscript
ss.setSpan(SubscriptSpan(), index, end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); #Subscript