Android中的一些技巧,后续碰到新的继续增加
技巧目录
1、字符串资源里变量替换
2、TextView中设置多种字体大小
3、TextView的超链接
4、EditText与软键盘
5、Java文件中字体加粗
######################################################################################
1、字符串资源里变量替换
工作中是拒绝硬编码的,android里会把一些字符串等放在xml中当做资源使用,如项目中values下的strings.xml列出了app_name.
有些情况是这样的,程序中要使用的字符串如第345页,345是变量,那么我们不可能用两个字符串资源如
- <string name="di">第</string>
- <string name="page">页</string>
在程序中拼接字符串。那么我们可能会想,在我们学习C的时候,有%s这样的神奇的符号,可以替换变量的格式化操作符。
其实,在android中也有这样的东西,那就是XLIFF,全称叫XML本地化数据交换格式,英文全称XML Localization Interchange File Format。
用法也是很简单的,如
- <string name="page">第%1$s页</string>
程序中只要给变量赋值就可以了,如
- String page = getString(R.string.page,"345");
那么,要是有多个变量呢,如第345页24行?这也好办,如下:
- <string name="page">第%1$s页%2$s行</string>
- String page = getString(R.string.page,"345","24");
2、TextView中设置多种字体大小
这是项目中经常遇到的,比如UI是这样的:
Android实战技巧之文本与布局
像这样的两种字体,要如何处理呢?需要用到android.text命名空间下的一些与spannable相关的类和接口。例子如:
- String text = "Android实战技巧之文本与布局";
- int start = text.indexOf('之');
- int end = text.length();
- Spannable textSpan = new Spannable(text);
- textSpan.setSpan(new AbsoluteSizeSpan(20),0,start,Spannable.SPAN_INCLUSIVE_INCLUSIVE);
- 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。例子如下(摘自网络):
- public class MainActivity extends Activity {
- private TextView testText;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- testText = (TextView) findViewById(R.id.testText);
-
- testText.setText(getClickableSpan());
-
- testText.setMovementMethod(LinkMovementMethod.getInstance());
- }
-
-
- private SpannableString getClickableSpan(){
- SpannableString spanStr = new SpannableString("使用该软件,即表示您同意该软件的使用条款和隐私政策");
-
- spanStr.setSpan(new UnderlineSpan(), 16, 20,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
-
- spanStr.setSpan(new ClickableSpan() {
-
- @Override
- public void onClick(View widget) {
-
- startActivity(new Intent(MainActivity.this, TestActivity1.class));
- }
- }, 16, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
-
- spanStr.setSpan(new ForegroundColorSpan(Color.WHITE), 16, 20,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
-
- spanStr.setSpan(new UnderlineSpan(), 21, 25,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
-
- spanStr.setSpan(new ClickableSpan() {
-
- @Override
- public void onClick(View widget) {
-
- startActivity(new Intent(MainActivity.this, TestActivity2.class));
- }
- }, 21, 25, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
-
- spanStr.setSpan(new ForegroundColorSpan(Color.WHITE), 21, 25,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- return spanStr;
- }
- }
4、EditText与软键盘
当界面有EditText并且光标落在上面时,软键盘就会弹出。本来是为了方便,但有些情况这样挺讨厌的。比如登录界面。
取消它只需要在Manifest文件中使用windowSoftInputMode即可,如下:
- <activity
- android:name=".LoginActivity"
- android:label="@string/app_name"
- android:windowSoftInputMode="stateHidden|adjustResize"
- >
5、Java文件中字体加粗
-
- textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
-
- textView.getPaint().setFakeBoldText(true);