android app development
DESCRIPTION
Layout, Widget, Fragment. Android App Development. 今日目標 - List, Detail. 一個 Activity ,兩個 Fragment 一個 Fragment 顯示 List 點選 List 裡的 item 開啟另一個 Fragment 顯示 Detail 按返回鍵回到 List. XML. 可延伸標記式語 言 value tag 元素的名稱。 attr 屬性,前者是屬性名稱,後者是屬性的值,一個元素可以有多個屬性。 - PowerPoint PPT PresentationTRANSCRIPT
ANDROID APP DEVELOPMENT
Layout, Widget, Fragment
今日目標 - List, Detail
一個 Activity ,兩個 Fragment 一個 Fragment 顯示 List 點選 List 裡的 item 開啟另一個 Fragment 顯示 Detail 按返回鍵回到 List
XML
可延伸標記式語言 <tag attr="attr">value</tag> tag 元素的名稱。 attr 屬性,前者是屬性名稱,後者是屬性
的值,一個元素可以有多個屬性。 value 內容,經常包覆其他元素 <tag attr="attr" />
XML 常見通用屬性 android:id android:layout_width (android:layout_height)
match_parent 、 wrap_content 、或是精確的值 android:layout_margin
與其他元素之間的距離Left 、 Right 、 Top 、 Bottom
android:layout_padding 自己的邊界往內的留白Left 、 Right 、 Top 、 Bottom
XML 常見通用屬性 android:layout_weight
自動分配高度及寬度的權重 android:layout_gravity
自己的對齊方向center 、 left 、 right 、 top 、 bottom
android:gravity內容的對齊方向center 、 left 、 right 、 top 、 bottom
android:background#AARRGGBB or #RRGGBB@drawble/[resourceId]
Layout
FrameLayout 最單純的排版 會將子元素全部疊起來顯示 類似 PS 的圖層
Layout
LinearLayout 最常用的排版之一 依序排列 android:orientation
horizontal or vertical 搭配 ScrollView
Layout
GridLayout 表格狀的排版 android:layout_row 第幾列 android:layout_column 第幾行
Layout
RelativeLayout 最複雜的排版 屬性描述元素之間的關係 用滑鼠拉吧
Widget
TextView顯示文字可用 html
○ Html.fromHtml([html])getText 、 setText
EditText輸入文字存取方式同上
Widget
Button按鈕setOnClickListenersetOnLongClickListenersetOnTouchListener
Widget
DatePicker日期選擇器getYear 、 getMonth 、 getDayOfMonth
TimePicker時間選擇器(小時、分鐘)getCurrentHour 、 getCurrentMinute
AnalogClock & DigitalClock顯示時間
Widget
ProgressBar進度條setMax 、 setProgress
SeekBar可讓使用者拖動的進度條setMax 、 getProgress
Widget
ScrollView垂直捲動
HorizontalScrollView水平捲動
ListView
清單 用於重複結構 No ScrollView
ListView
開新專案 Blank Activity with Fragment 在 fragment_my.xml 加入 ListView 打開 MyActivity.java
ListView
ListView listView = (ListView) rootView.findViewById(R.id.listView);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, data);
listView.setAdapter(adapter);
ListView
必須透過 Adapter 顯示資料 ArrayAdapter 建構子參數:
Activity 、樣式、資料 setAdapter
Fragment
小型 Activity LifeCycle
新增 Fragment
New -> Fragment -> Fragment (Blank) DetailFragment 取消 include interface callbacks fragment_detail.xml 新增 Large Text
Fragment
DetailFragment.java 處理 TODO Title 、 Detail 善用 shift+F6
開啟 Fragment
讓 MyActivity implements AdapterView.OnItemClickListener
listView.setOnItemClickListener( (AdapterView.OnItemClickListener) getActivity());
當有項目被點選時,會去呼叫 MyActivity的 onItemClick
開啟 Fragment@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
DetailFragment detailFragment = DetailFragment.newInstance(data[position], detail[position]);
fragmentTransaction.replace(R.id.container, detailFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
DetailFragment - 顯示 在 onCreateView
getActivity().getActionBar().setTitle(title);
View rootView = inflater.inflate(R.layout.fragment_detail,
container, false);
TextView textView = (TextView) rootView.findViewById(R.id.detail);
textView.setText(detail);
return rootView;
DetailFragment
關閉時將標題設定回去@Override
public void onPause() {
super.onPause();
getActivity().getActionBar(). setTitle(R.string.app_name);
}
Navigation Back
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated( savedInstanceState);
getActivity().getActionBar(). setDisplayHomeAsUpEnabled(true);
setHasOptionsMenu(true);
}
關閉 Fragment
@Override
public boolean onOptionsItemSelected( MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getActivity().getFragmentManager(). popBackStack();
return true;
}
return super.onOptionsItemSelected(item);
}
DetailFragment
在 onPause
getActivity().getActionBar().setDisplayHomeAsUpEnabled(false);
成果
下集預告 Menu Dialog Toast Notification