版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】a?n?d?r?o?i?d?4.x新?特?征?總?結(jié)
Android新特征為了兼容老版本,改變了很多東西,這里先對(duì)幾個(gè)重要的特征進(jìn)行研究。
第一,系統(tǒng)生成工程出現(xiàn)一個(gè)v7的東西,這個(gè)是兼容包,很多人覺得很不爽,忘了他把,這個(gè)是必要的,不能刪除,工程要用到里面的v7擴(kuò)展包和主題資源什么的,而且你用到fragment的話就必須要那個(gè)包里的主題!測(cè)試可以直接點(diǎn)中你要的工程進(jìn)行測(cè)試就可以了,無需其他操作,和之前的一樣!
第二:系統(tǒng)默認(rèn)的布局變成了兩個(gè),一個(gè)是main_activity和fragment_activity兩個(gè)。這個(gè)是什么原因,main的布局默認(rèn)是<fragment>根節(jié)點(diǎn),fragment的布局是默認(rèn)相對(duì)布局的,這個(gè)你可以隨便改,線性布局,幀布局的都可以用,和我們之前用的main_activity是一樣的,那他們有什么關(guān)系呢,其實(shí)這里要說一點(diǎn),對(duì)于fragment有兩種裝載方式:第一是布局裝載,直接在布局中寫入fragment節(jié)點(diǎn),如下:
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayout
xmlns:android="/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:name="com.example.news.ArticleListFragment"
android:id="@+id/list"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent"/>
<fragment
android:name="com.example.news.ArticleReaderFragment"
android:id="@+id/viewer"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent"/>
</LinearLayout>
這個(gè)fragment節(jié)點(diǎn)必須要有id,這樣代碼才能針對(duì)不同的id進(jìn)行不同的裝載。
第二是代碼裝載,就是官方提供的默認(rèn)裝載,如下:
<FrameLayout
xmlns:android="/apk/res/android"
xmlns:tools="/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="walleeva.android4_4_frame.MainActivity"
tools:ignore="MergeRootFrame"
/>
然后通過framelayout的id進(jìn)行代碼裝載,目測(cè)兩種其實(shí)有不同,一個(gè)是針對(duì)一個(gè)頁面多個(gè)fragment分塊顯示,一個(gè)是一個(gè)頁面顯示一個(gè)fragment,然后通過裝載來切換!
這里我們簡單總結(jié)一下fragment和一activity的區(qū)別:
Activity的布局是一個(gè)容器,好比一個(gè)房間的整個(gè)空間,fragment好比是對(duì)其進(jìn)行裝修,你可以一個(gè)裝修風(fēng)格布滿整個(gè)房間,也可以分開很多塊分別專修,可以通過不同時(shí)候,顯示不同燈光效果達(dá)到參觀者(用戶)看到不同表現(xiàn)。
既然谷歌選擇默認(rèn)后一種,我們就從這種開始研究,首先,我們看到MainActivity,發(fā)現(xiàn)大問題,不是繼承了Activity,而是ActionBarActivity,這里又有新知識(shí),(我是對(duì)fragment和actionbar不熟悉的,所以我覺得是新知識(shí)),actionbaractivity和activity有什么區(qū)別呢?
百度是這樣回答的:AndroidBarActivity是支持庫里的類可以兼容2.x版本activity提供的actionbar只有在3.0以上才可以用.
顯然這個(gè)答案太抽象,現(xiàn)在我們先完成fragment的顯示切換,然后在修改使得他通過actionbar進(jìn)行切換。
完成fragment布局切換:
1,在manifest文件中的application節(jié)點(diǎn)修改主題:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light"
>
貌似都要用appcompat下的主題才行!當(dāng)然你可以針對(duì)activity節(jié)點(diǎn)進(jìn)行修改,我這樣一勞永逸。
2,新建多一個(gè)fragment_main布局,內(nèi)容可以隨意,
3,新建兩個(gè)類,你可以將系統(tǒng)默認(rèn)里面生產(chǎn)的類拷貝出來,然后在新建類中粘帖上去,把原來mainactivity中的內(nèi)部類刪除,這些類都是繼承importandroid.support.v4.app.Fragment;
至于fragment的類要怎么寫,先給出fragment的生命周期
你可以右鍵空白處,source,然后Override選項(xiàng)查看有那些可覆寫的方法,這個(gè)給個(gè)例子public
class
PlaceholderFragment
extends
Fragment
{
public
TextView
text;
SendDateToActivity
sdta;
public
PlaceholderFragment()
{
}
@Override
public
void
onAttach(Activity
activity)
{
super.onAttach(activity);
try{
//這里進(jìn)行綁定實(shí)現(xiàn),如果activity沒有實(shí)現(xiàn)對(duì)應(yīng)辦法,則會(huì)出錯(cuò)!
sdta=(SendDateToActivity)activity;
}catch(ClassCastException
e){
}
}
@Override
public
void
onStart()
{
//所有在frame布局中定義的控件都需要在oncreateview這個(gè)方法執(zhí)行后實(shí)例
//化,最好在這里就可以了,否則死了都不知道什么回事!
text=(TextView)getActivity().findViewById(R.id.fragment1t1);
//這里進(jìn)行調(diào)用
text.setText(sdta.setEditText());
super.onStart();
}
@Override
public
View
onCreateView(LayoutInflater
inflater,
ViewGroup
container,
Bundle
savedInstanceState)
{
//這個(gè)方法進(jìn)行裝載fragment,
View
rootView
=
inflater.inflate(R.layout.fragment_main,container,false);
return
rootView;
}
//這是一個(gè)接口,對(duì)應(yīng)的實(shí)現(xiàn)寫在activity中,實(shí)現(xiàn)對(duì)應(yīng)的方法,這樣,這里就可以調(diào)用activity中的方法,實(shí)現(xiàn)數(shù)據(jù)傳遞。
public
interface
SendDateToActivity{
public
String
setEditText();
}
}這里是mainactivity的源代碼,一起貼出來
public
class
MainActivity
extends
ActionBarActivity
implements
SendDateToActivity,SendDateToActivity2{
public
String
edittext;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
//requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
if
(savedInstanceState
==
null)
{
//這里預(yù)先裝載了一個(gè)fragment進(jìn)行顯示。
getSupportFragmentManager().beginTransaction().add(R.id.container,
new
PlaceholderFragment2()).commit();
}
}
@Override
public
boolean
onCreateOptionsMenu(Menu
menu)
{
//這里定義了兩個(gè)按鈕
MenuInflater
menuInflater
=
getMenuInflater();
menuInflater.inflate(R.menu.main,
menu);
MenuItem
menuItem
=
menu.findItem(R.id.action_search);
MenuItem
findItem
=
menu.findItem(R.id.action_compose);
MenuItemCompat.setShowAsAction(menuItem,
MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
MenuItemCompat.setShowAsAction(findItem,
MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
return
true;
}
//這里進(jìn)行按鈕選擇
@Override
public
boolean
onOptionsItemSelected(MenuItem
item)
{
int
id
=
item.getItemId();
if
(id
==
R.id.action_compose)
{
getSupportFragmentManager().beginTransaction().replace(R.id.container,
new
PlaceholderFragment()).commit();
return
true;
}else
if(id
==
R.id.action_search){
getSupportFragmentManager().beginTransaction().replace(R.id.container,
new
PlaceholderFragment2()).commit();
return
true;
}
return
super.onOptionsItemSelected(item);
}
}菜單布局如下:<menu
xmlns:android="/apk/res/android"
xmlns:app="/apk/res-auto"
xmlns:tools="/tools"
tools:context="walleeva.android4_4_frame.MainActivity">
<item
android:id="@+id/action_search"
android:icon="@drawable/abc_ic_clear"
android:title="@string/action_settings"/>
<item
android:id="@+id/action_compose"
android:icon="@drawable/abc_ic_go"
android:title="@string/abc_activity_chooser_view_see_all"/>
</menu>
這樣就實(shí)現(xiàn)了按菜單按鈕實(shí)現(xiàn)fragment切換,按fragment2中的按鈕可以實(shí)現(xiàn)參數(shù)傳遞到另一個(gè)fragment進(jìn)行顯示,
這里完成了fragment切換及其參數(shù)傳遞的功能,這樣面對(duì)新的默認(rèn)布局,我們也能從容面對(duì)了。
可是還有一個(gè)問題就actionbar,首先明白actionbar是什么,顧名思義就是action的一個(gè)bar,也就是動(dòng)作的點(diǎn)擊按鈕之類的!可以這么理解吧!Csdn有人這么歸納:
通過查資料,最后實(shí)現(xiàn)了通過actionbar進(jìn)行頁面切換,下拉導(dǎo)航,標(biāo)簽頁切換fragment,第四第五個(gè)還不知道什么意思,畢竟也是初次接觸。大神請(qǐng)忽略這篇文檔!
其實(shí)要實(shí)現(xiàn)actionbar,需要做以下幾件事,
1,就是你的activity必須是以android:theme="@style/Theme.AppCompat.Light"為主題,或者繼承它的自定義主題
2,必須要顯示標(biāo)題欄,不可設(shè)置為無標(biāo)題欄顯示狀態(tài),網(wǎng)上有方法說可以解決,但是試過不行,有待研究,
3,如果要在底部出現(xiàn)菜單欄請(qǐng)?jiān)趯?duì)于的activity節(jié)點(diǎn)中加入如下:
android:uiOptions="splitActionBarWhenNarrow"
4,對(duì)于要顯示的item一般和系統(tǒng)的meun寫法一樣,只不過多一個(gè)android:showAsAction="never"
建議這個(gè)屬性用代碼實(shí)現(xiàn),因?yàn)楹苋菀壮霈F(xiàn)沒效果的,如之前onCreateOptionsMenu方法中的代碼所示
5,對(duì)于MenuItemCompat.SHOW_AS_ACTION_ALWAYS,后面的為參數(shù)有5,6種類型,可以直接百度,具體是用來控制bar顯示還是隱藏的相關(guān)屬性,不同屬性有不同表現(xiàn)方式!
6,對(duì)于顯示下拉列表功能則是通過如下代碼實(shí)現(xiàn)
PopupMenu
mPopupMenu=null;
case
R.id.myselfitem:
//這個(gè)為監(jiān)聽的按鈕,也可是一個(gè)bar
if
(mPopupMenu
==
null)
{
mPopupMenu
=
new
PopupMenu(this,
findViewById(R.id.myselfitem));
//這個(gè)id為按鈕id
mPopupMenu.inflate(R.menu.mymeun);
//此時(shí)所在類要實(shí)現(xiàn)OnMenuItemClickListener,然后在接口中獲取item的id,根據(jù)id
//進(jìn)行響應(yīng)即可
mPopupMenu.setOnMenuItemClickListener(this);
}
mPopupMenu.show();
return
true;對(duì)應(yīng)布局很簡單
和系統(tǒng)的meun寫法一樣的!自己去定義,
7,標(biāo)簽頁現(xiàn)在應(yīng)該都是統(tǒng)一用actionbar來實(shí)現(xiàn)了,而不是用之前的tabhost,actionbar完成可以通過控制不同的fragment顯示,具體代碼如下:protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_theme_holo);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
final
ActionBar
actionBar
=
getSupportActionBar();
//提示getActionBar方法一定在setContentView后面
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayOptions(0,
ActionBar.DISPLAY_SHOW_TITLE);
Fragment
artistsFragment
=
new
PlaceholderFragment();
actionBar.addTab(actionBar.newTab().setText("first").setTabListener(
new
MyTabListener(artistsFragment)));
Fragment
albumsFragment
=
new
PlaceholderFragment2();
actionBar.addTab(actionBar.newTab().setText("second").setTabListener(
new
MyTabListener(albumsFragment)));
}在對(duì)于的a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘭州科技職業(yè)學(xué)院《循證護(hù)理實(shí)踐》2023-2024學(xué)年第一學(xué)期期末試卷
- 江西科技師范大學(xué)《商務(wù)智能與數(shù)據(jù)挖掘Ⅰ》2023-2024學(xué)年第一學(xué)期期末試卷
- 吉首大學(xué)《輕量化平臺(tái)開發(fā)》2023-2024學(xué)年第一學(xué)期期末試卷
- 【物理】重力 同步練習(xí)+2024-2025學(xué)年人教版物理八年級(jí)下冊(cè)
- 黑龍江幼兒師范高等??茖W(xué)?!董h(huán)境3S技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶郵電大學(xué)《公體戶外運(yùn)動(dòng)》2023-2024學(xué)年第一學(xué)期期末試卷
- 中央音樂學(xué)院《中醫(yī)大健康》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江農(nóng)林大學(xué)暨陽學(xué)院《汽車電氣設(shè)備》2023-2024學(xué)年第一學(xué)期期末試卷
- 鄭州食品工程職業(yè)學(xué)院《德國史專題》2023-2024學(xué)年第一學(xué)期期末試卷
- 小學(xué)2024-2025學(xué)年度勞動(dòng)技能大賽方案
- AQ 1029-2019 煤礦安全監(jiān)控系統(tǒng)及檢測(cè)儀器使用管理規(guī)范
- 太陽能驅(qū)動(dòng)的污水處理技術(shù)研究與應(yīng)用
- 未成年旅游免責(zé)協(xié)議書
- 預(yù)防保健科主任競聘課件
- 團(tuán)隊(duì)成員介紹
- 水泵行業(yè)銷售人員工作匯報(bào)
- 《流感科普宣教》課件
- 離職分析報(bào)告
- 春節(jié)家庭用電安全提示
- 醫(yī)療糾紛預(yù)防和處理?xiàng)l例通用課件
- 廚邦醬油推廣方案
評(píng)論
0/150
提交評(píng)論