Android技巧

Android中的一些技巧,后续碰到新的继续增加

技巧目录

1、字符串资源里变量替换

2、TextView中设置多种字体大小
3、TextView的超链接
4、EditText与软键盘
5、Java文件中字体加粗

######################################################################################

1、字符串资源里变量替换

工作中是拒绝硬编码的,android里会把一些字符串等放在xml中当做资源使用,如项目中values下的strings.xml列出了app_name.

有些情况是这样的,程序中要使用的字符串如第345页,345是变量,那么我们不可能用两个字符串资源如

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <string name="di"></string>  
  2. <string name="page"></string>  

在程序中拼接字符串。那么我们可能会想,在我们学习C的时候,有%s这样的神奇的符号,可以替换变量的格式化操作符。

其实,在android中也有这样的东西,那就是XLIFF,全称叫XML本地化数据交换格式,英文全称XML Localization Interchange File Format。

用法也是很简单的,如

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <string name="page">第%1$s页</string>  

程序中只要给变量赋值就可以了,如

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. String page = getString(R.string.page,"345");  
那么,要是有多个变量呢,如第345页24行?这也好办,如下:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <string name="page">第%1$s页%2$s行</string>  
[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. String page = getString(R.string.page,"345","24");  

2、TextView中设置多种字体大小

这是项目中经常遇到的,比如UI是这样的:

Android实战技巧之文本与布局

像这样的两种字体,要如何处理呢?需要用到android.text命名空间下的一些与spannable相关的类和接口。例子如:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. String text = "Android实战技巧之文本与布局";  
  2. int start = text.indexOf('之');  
  3. int end = text.length();  
  4. Spannable textSpan = new Spannable(text);  
  5. textSpan.setSpan(new AbsoluteSizeSpan(20),0,start,Spannable.SPAN_INCLUSIVE_INCLUSIVE);  
  6. textSpan.setSpan(new AbsoluteSizeSpan(12),start,end,Spannable.SPAN_INCLUSIVE_INCLUSIVE);  
这个textSpan就是你想要的。

3、TextView的超链接

这个很简单,在xml中属性autoLink=“all”。

程序中TextView.setAutoLink(Linkify.ALL);

说下参数:

Linkify.EMAIL_ADDRESS -- 仅识别出TextView中的Email在址,标识为超链接,点击后会跳到Email,发送邮件给此地址
Linkify.PHONE_NUMBERS -- 仅识别出TextView中的电话号码,标识为超链接,点击后会跳到Dialer,Call这个号码
Linkify.WEB_URLS-- 仅识别出TextView中的网址,标识为超链接,点击后会跳到Browser打开此URL
Linkify.ALL -- 这个选项是识别出所有系统所支持的特殊Uri,然后做相应的操作

特殊情况:

当一段文字部分是超链接或者我们需要点击超链接跳到另一个Activity时,如何处理?

答案还是用Spannable。例子如下(摘自网络):

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class MainActivity extends Activity {  
  2.     private TextView testText;  
  3.     @Override  
  4.     protected void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.activity_main);  
  7.         testText = (TextView) findViewById(R.id.testText);  
  8.         //将TextView的显示文字设置为SpannableString  
  9.         testText.setText(getClickableSpan());  
  10.         //设置该句使文本的超连接起作用  
  11.         testText.setMovementMethod(LinkMovementMethod.getInstance());  
  12.     }  
  13.   
  14.     //设置超链接文字  
  15.     private SpannableString getClickableSpan(){  
  16.         SpannableString spanStr = new SpannableString("使用该软件,即表示您同意该软件的使用条款和隐私政策");  
  17.         //设置下划线文字  
  18.         spanStr.setSpan(new UnderlineSpan(), 1620,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);    
  19.         //设置文字的单击事件  
  20.         spanStr.setSpan(new ClickableSpan() {  
  21.   
  22.             @Override  
  23.             public void onClick(View widget) {  
  24.   
  25.                 startActivity(new Intent(MainActivity.this, TestActivity1.class));  
  26.             }  
  27.         }, 1620, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  28.         //设置文字的前景色  
  29.         spanStr.setSpan(new ForegroundColorSpan(Color.WHITE), 1620,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  30.         //设置下划线文字  
  31.         spanStr.setSpan(new UnderlineSpan(), 2125,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);    
  32.         //设置文字的单击事件  
  33.         spanStr.setSpan(new ClickableSpan() {  
  34.               
  35.             @Override  
  36.             public void onClick(View widget) {  
  37.                   
  38.                 startActivity(new Intent(MainActivity.this, TestActivity2.class));  
  39.             }  
  40.         }, 2125, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  41.         //设置文字的前景色  
  42.         spanStr.setSpan(new ForegroundColorSpan(Color.WHITE), 2125,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  43.         return spanStr;  
  44.     }  
  45. }  


4、EditText与软键盘

当界面有EditText并且光标落在上面时,软键盘就会弹出。本来是为了方便,但有些情况这样挺讨厌的。比如登录界面。

取消它只需要在Manifest文件中使用windowSoftInputMode即可,如下:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <activity   
  2.     android:name=".LoginActivity"  
  3.     android:label="@string/app_name"  
  4.   android:windowSoftInputMode="stateHidden|adjustResize"  
  5.     >  


5、Java文件中字体加粗

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //Typeface  
  2. textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));  
  3. //use TextPaint  
  4. textView.getPaint().setFakeBoldText(true);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值