今日翻看胡凱大神的官方training的翻譯版本栏尚,發(fā)現(xiàn)已經(jīng)跟不上官方的版本的更新了归苍,遂直接看英文原版宠默,雖然英語(yǔ)不算好麸恍,但是好在沒(méi)有特別難理解的單詞和句子」饧冢看了好幾篇之后發(fā)現(xiàn)雖然知識(shí)點(diǎn)比較簡(jiǎn)單或南,但是容易忘。我將把關(guān)鍵知識(shí)點(diǎn)記錄在此艾君,方便以后翻閱采够。如果能夠幫助到任何其他路過(guò)的朋友,那是再好不過(guò)了冰垄。每一個(gè)標(biāo)題對(duì)應(yīng)著官方的相應(yīng)章節(jié)蹬癌。
Get Started
1、在EditText中想要在用戶沒(méi)有輸入時(shí)給出提示信息虹茶,可以使用android:hint="@string/edit_message"逝薪。
2、使用android:layout_weight="1"蝴罪,即根據(jù)權(quán)重來(lái)計(jì)算各個(gè)組件的寬度董济,使得填滿手機(jī)屏幕的寬度。這是組件的寬度還應(yīng)該設(shè)為android:layout_width="0dp"要门,如果設(shè)置成wrap_content虏肾,這時(shí)的寬度屬性也起不到任何作用。如果給View設(shè)置了match_parent的屬性欢搜,那么上面計(jì)算權(quán)重時(shí)則不是通常的正比封豪,而是反比,也就是權(quán)重值大的反而占據(jù)空間小炒瘟。
3吹埠、button有個(gè)onclick屬性android:onClick="sendMessage",這樣當(dāng)點(diǎn)擊它就會(huì)去執(zhí)行sendMessage方法,這個(gè)方法有三個(gè)限制:
- 必須是public的
- 返回類型必須是void
- 有且僅有一個(gè)參數(shù)缘琅,而且參數(shù)必須是View
不過(guò)我覺(jué)得這個(gè)并不常用粘都,看看就行了。很多時(shí)候我們是在button上添加點(diǎn)擊事件的監(jiān)聽(tīng)器來(lái)實(shí)現(xiàn)的胯杭。
4驯杜、支持多國(guó)語(yǔ)言,在res/中創(chuàng)建一個(gè)額外的values目錄以連字符和ISO語(yǔ)言代碼結(jié)尾命名做个,比如values-es/ 是為語(yǔ)言代碼為"es"的區(qū)域設(shè)置的簡(jiǎn)單的資源文件的目錄。
比如滚局,西班牙語(yǔ)所在的文件居暖,/values-es/strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title">Mi Aplicación</string>
<string name="hello_world">Hola Mundo!</string>
</resources>
5、res目錄下各個(gè)文件的含義藤肢,注意名字不要隨便更改太闺,否則即使路徑正確也會(huì)提示找不到你的資源。
animator/ : 用于定義屬性動(dòng)畫的 XML 文件嘁圈。
anim/ : 定義漸變動(dòng)畫的 XML 文件省骂。(屬性動(dòng)畫也可以保存在此目錄中,但是為了區(qū)分這兩種類型最住,屬性動(dòng)畫首選 animator/ 目錄钞澳。)
color/ :用于定義顏色狀態(tài)列表的 XML 文件。
drawable/ :位圖文件(.png涨缚、.9.png轧粟、.jpg、.gif)或編譯為以下Drawable 資源子類型的 XML 文件:位圖文件脓魏、九宮格(可調(diào)整大小的位圖)兰吟、狀態(tài)列表、形狀茂翔、動(dòng)畫Drawable混蔼、其他Drawable 。
mipmap/ :適用于不同啟動(dòng)器圖標(biāo)密度的 Drawable 文件珊燎。
menu/ :用于定義應(yīng)用菜單(如選項(xiàng)菜單惭嚣、上下文菜單或子菜單)的 XML 文件。
raw/ : 要以原始形式保存的任意文件俐末。要使用原始 InputStream 打開(kāi)這些資源料按,請(qǐng)使用資源 ID(即 R.raw.filename)調(diào)用 Resources.openRawResource()。但是卓箫,如需訪問(wèn)原始文件名和文件層次結(jié)構(gòu)载矿,則可以考慮將某些資源保存在 assets/ 目錄下(而不是 res/raw/)。assets/ 中的文件沒(méi)有資源 ID,因此您只能使用 AssetManager 讀取這些文件闷盔。
values/ : 包含字符串弯洗、整型數(shù)和顏色等簡(jiǎn)單值的 XML 文件。其他 res/ 子目錄中的 XML 資源文件是根據(jù) XML 文件名定義單個(gè)資源逢勾,而目錄中的 values/ 文件可描述多個(gè)資源牡整。由于每個(gè)資源均用其自己的 XML 元素定義,因此您可以根據(jù)自己的需要命名文件溺拱,并將不同的資源類型放在一個(gè)文件中逃贝。但是,為了清晰起見(jiàn)迫摔,您可能需要將獨(dú)特的資源類型放在不同的文件中沐扳。 例如,對(duì)于可在此目錄中創(chuàng)建的資源句占,下面給出了相應(yīng)的文件名約定:
arrays.xml:用于資源數(shù)組(類型化數(shù)組)沪摄。
colors.xml:顏色值。
dimens.xml:尺寸值纱烘。
strings.xml:字符串值杨拐。
styles.xml:樣式。xml/ : 可以在運(yùn)行時(shí)通過(guò)調(diào)用 Resources.getXML() 讀取的任意 XML 文件擂啥。各種 XML 配置文件(如可搜索配置)都必須保存在此處哄陶。
6、有4種普遍尺寸:小(small)啤它,普通(normal)奕筐,大(large),超大(xlarge)变骡。4種普遍分辨率:低精度(ldpi), 中精度(mdpi), 高精度(hdpi), 超高精度(xhdpi)离赫。創(chuàng)建不同的layout,目錄以-(screen_size)為后綴命名塌碌。例如渊胸,對(duì)大尺寸屏幕(large screens),一個(gè)唯一的layout文件應(yīng)該保存在res/layout-large/中台妆。但是在引用的時(shí)候依然是R.layout.XXX翎猛,系統(tǒng)會(huì)根據(jù)不同的設(shè)備去加載合適的文件,值得注意的是接剩,要保證在各個(gè)目錄下都要有相同名字的文件切厘。官方還建議在你的所有的activity中都用toolbar來(lái)當(dāng)作app bar。在你的manifest.xml中將application聲明為NoActionBar的主題來(lái)禁用原生的actionBar懊缺,因?yàn)樵贏ndroid 3.0(API level 11)使用的默認(rèn)主題都是含有actionbar的疫稿。
<application
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
/>
在layout文件中引用toolbar組件:
<android.support.v7.widget.Toolbar
android:id="@+id/my_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
然后在oncreate方法中調(diào)用setSupportActionBar:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(myToolbar);
}
Best Practices For User Interface
1、actionBar由于兼容性問(wèn)題,已經(jīng)被toolbar所取代遗座。首先你要在SDK manager中下載兼容包v7 appcompat舀凛,然后是你的activity繼承AppCompatActivity。
2途蒋、在toolbar中添加button猛遍,寫在res/menu/目錄下。多余的放置不下的button將進(jìn)入menu号坡,也可以顯式的指定它一直在menu中收起來(lái):
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- "Mark Favorite", should appear as action button if possible -->
<item
android:id="@+id/action_favorite"
android:icon="@drawable/ic_favorite_black_48dp"
android:title="@string/action_favorite"
app:showAsAction="ifRoom"/>
<!-- Settings, should always be in the overflow -->
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
app:showAsAction="never"/>
</menu>
其中懊烤,ifRoom表示如果還有空間,就將該item展示出來(lái)筋帖;如果沒(méi)有空間的話奸晴,就將它收起來(lái)放在堆疊的item菜單中。item的點(diǎn)擊事件作出響應(yīng)邏輯寫在onOptionsItemSelected中日麸。當(dāng)點(diǎn)擊某個(gè)item時(shí),系統(tǒng)會(huì)回調(diào)這個(gè)函數(shù)逮光。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_settings:
// User chose the "Settings" item, show the app settings UI...
return true;
case R.id.action_favorite:
// User chose the "Favorite" action, mark the current item
// as a favorite...
return true;
default:
// If we got here, the user's action was not recognized.
// Invoke the superclass to handle it.
return super.onOptionsItemSelected(item);
}
}
3代箭、在tool bar添加返回箭頭,官方叫做up Action涕刚。實(shí)現(xiàn)方法是在配置文件中指定一個(gè)父activity嗡综。
<application ... >
...
<!-- The main/home activity (it has no parent activity) -->
<activity
android:name="com.example.myfirstapp.MainActivity" ...>
...
</activity>
<!-- A child of the main activity -->
<activity
android:name="com.example.myfirstapp.MyChildActivity"
android:label="@string/title_activity_child"
android:parentActivityName="com.example.myfirstapp.MainActivity" >
<!-- Parent activity meta-data to support 4.0 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.myfirstapp.MainActivity" />
</activity>
</application>
Enable the Up Button
android:parentActivityName屬性是Android 4.1 (API level 16)才加入的,要想支持低版本的設(shè)備杜漠,還需要添加meta-data极景,它是一個(gè)鍵值對(duì),name是固定的android.support.PARENT_ACTIVITY驾茴,value是你想要返回到的activity的路徑盼樟。到這里還沒(méi)完,還需要在代碼中激活這個(gè)button锈至。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_child);
// my_child_toolbar is defined in the layout file
Toolbar myChildToolbar =
(Toolbar) findViewById(R.id.my_child_toolbar);
setSupportActionBar(myChildToolbar);
// Get a support ActionBar corresponding to this toolbar
ActionBar ab = getSupportActionBar();
// Enable the Up button
ab.setDisplayHomeAsUpEnabled(true);
}
鏈接:Up Action
想要持續(xù)關(guān)注的朋友晨缴,請(qǐng)關(guān)注我的個(gè)人博客-->電梯直達(dá)