//別看這個標題挺大,其實這次要說的只是3個小技巧。
//2014.11.7 update
#### 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);??
????????//將TextView的顯示文字設置為SpannableString??
????????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、布局中只在界面底部
在大部分的android程序中,都會發現一個底部的菜單欄。這通常是一個線性布局加一些按鈕。如何讓其始終在底部,無論是哪個分辨率呢?
這要用到關系布局的屬性
` android:layout_alignParentBottom="true"??`
在關系布局內部,如果把此屬性設置true,就會在關系布局的底部了。
這個用途還是很廣泛的。
#### 5.EditText與軟鍵盤
當界面有EditText并且光標落在上面時,軟鍵盤就會彈出。本來是為了方便,但有些情況這樣挺討厭的。比如登錄界面。
取消它只需要在Manifest文件中使用windowSoftInputMode即可,如下:
~~~
activity???
????android:name=".LoginActivity"??
????android:label="@string/app_name"??
??android:windowSoftInputMode="stateHidden|adjustResize"??
????>??
~~~
**6.布局的邊框顏色**
// 2014.11.24 updated
嘗試一下用各種layout仿制listview,就是把layout的邊框設置對應的顏色。
在drawable下添加layer_list,
~~~
xml?version="1.0"?encoding="utf-8"?>??
layer-list?xmlns:android="http://schemas.android.com/apk/res/android">??
??item>??
????shape>??
????????stroke?android:width="3px"?android:color="#ffff0000"?/>??
????????solid?android:color="#FFFCFCFC"?/>??
????????corners?android:radius="4dp"?/>??
????shape>??
??item>??
layer-list>??
~~~
在layout中引用:
~~~
LinearLayout???
????android:layout_width="match_parent"??
????android:layout_height="300dp"??
????android:orientation="vertical"??
????android:background="@drawable/layout_bg"??
????>??
~~~
//2014.11.27 update?
其他widget如ImageView的邊框也可以像這樣設置。
#### 7.Java文件中字體加粗
~~~
//2015.1.12?update??
//Typeface??
textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));??
//use?TextPaint??
~~~
- 前言
- 一:文本與布局
- 二:組合控件
- 三:性能測試類
- 四:語音識別
- 五:讀取Excel
- 六:PreferenceActivity使用詳解
- 七:按鈕控制ViewPager的左右翻頁
- 八:Ubuntu下切換JDK版本
- 九:最新Android開發環境(Eclipse+ADT+Android 5.0)
- 十:獲得屏幕物理尺寸、密度及分辨率
- 十一:Android Studio和Gradle
- 十二:Android Studio導入第三方類庫、jar包和so庫
- 十三:APK簽名
- 十四:混淆與反編譯
- 十五:多分辨率適配常用目錄
- 十六:getprop與dumpsys命令
- 十七:Linux下的模擬器硬件加速
- 十八:adb取出安裝在手機中的apk
- 十九:android studio導出jar包(Module)并獲得手機信息
- 二十:兩個開源的圖表/報表控件
- 二十一:Android原型設計工具探索
- 二十二:Android 5.1 SDK下載與配置
- 二十三:Android Studio的NDK開發
- 二十四:橫豎屏切換
- 二十五:模擬器如何重啟?試試Genymotion!
- 二十六:persistableMode與Activity的持久化
- 二十七:Maven編譯開源二維碼掃描項目zxing