1 / 30

Android App Development

Layout, Widget, Fragment. Android App Development. 今日目標 - List, Detail. 一個 Activity ,兩個 Fragment 一個 Fragment 顯示 List 點選 List 裡的 item 開啟另一個 Fragment 顯示 Detail 按返回鍵回到 List. XML. 可延伸標記式語 言 <tag attr =" attr ">value</tag > tag 元素的名稱。 attr 屬性,前者是屬性名稱,後者是屬性的值,一個元素可以有多個屬性。

Download Presentation

Android App Development

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Layout, Widget, Fragment Android App Development

  2. 今日目標 - List, Detail • 一個Activity,兩個Fragment • 一個Fragment顯示List • 點選List裡的item開啟另一個Fragment • 顯示Detail • 按返回鍵回到List

  3. XML • 可延伸標記式語言 • <tag attr="attr">value</tag> • tag 元素的名稱。 • attr屬性,前者是屬性名稱,後者是屬性的值,一個元素可以有多個屬性。 • value 內容,經常包覆其他元素 • <tag attr="attr" />

  4. 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

  5. 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]

  6. Layout • FrameLayout • 最單純的排版 • 會將子元素全部疊起來顯示 • 類似PS的圖層

  7. Layout • LinearLayout • 最常用的排版之一 • 依序排列 • android:orientation • horizontal or vertical • 搭配ScrollView

  8. Layout • GridLayout • 表格狀的排版 • android:layout_row第幾列 • android:layout_column第幾行

  9. Layout • RelativeLayout • 最複雜的排版 • 屬性描述元素之間的關係 • 用滑鼠拉吧

  10. Widget • TextView • 顯示文字 • 可用html • Html.fromHtml([html]) • getText、setText • EditText • 輸入文字 • 存取方式同上

  11. Widget • Button • 按鈕 • setOnClickListener • setOnLongClickListener • setOnTouchListener

  12. Widget • DatePicker • 日期選擇器 • getYear、getMonth、getDayOfMonth • TimePicker • 時間選擇器(小時、分鐘) • getCurrentHour、getCurrentMinute • AnalogClock & DigitalClock • 顯示時間

  13. Widget • ProgressBar • 進度條 • setMax、setProgress • SeekBar • 可讓使用者拖動的進度條 • setMax、getProgress

  14. Widget • ScrollView • 垂直捲動 • HorizontalScrollView • 水平捲動

  15. ListView • 清單 • 用於重複結構 • No ScrollView

  16. ListView • 開新專案 • Blank Activity with Fragment • 在fragment_my.xml加入ListView • 打開MyActivity.java

  17. ListView ListViewlistView = (ListView) rootView.findViewById(R.id.listView); ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, data); listView.setAdapter(adapter);

  18. ListView • 必須透過Adapter顯示資料 • ArrayAdapter建構子參數: • Activity、樣式、資料 • setAdapter

  19. Fragment • 小型Activity • LifeCycle

  20. 新增Fragment • New -> Fragment -> Fragment (Blank) • DetailFragment • 取消include interface callbacks • fragment_detail.xml • 新增Large Text

  21. Fragment • DetailFragment.java • 處理TODO • Title、Detail • 善用shift+F6

  22. 開啟Fragment • 讓MyActivity implements AdapterView.OnItemClickListener • listView.setOnItemClickListener( (AdapterView.OnItemClickListener) getActivity()); • 當有項目被點選時,會去呼叫MyActivity的onItemClick

  23. 開啟Fragment @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { FragmentManagerfragmentManager = getFragmentManager(); FragmentTransactionfragmentTransaction = fragmentManager.beginTransaction(); DetailFragmentdetailFragment = DetailFragment.newInstance(data[position], detail[position]); fragmentTransaction.replace(R.id.container, detailFragment); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); }

  24. DetailFragment - 顯示 • 在onCreateView getActivity().getActionBar().setTitle(title); View rootView = inflater.inflate( R.layout.fragment_detail, container, false); TextViewtextView = (TextView) rootView.findViewById(R.id.detail); textView.setText(detail); return rootView;

  25. DetailFragment • 關閉時將標題設定回去 @Override public void onPause() { super.onPause(); getActivity().getActionBar(). setTitle(R.string.app_name); }

  26. Navigation Back @Override public void onActivityCreated( Bundle savedInstanceState) { super.onActivityCreated( savedInstanceState); getActivity().getActionBar(). setDisplayHomeAsUpEnabled(true); setHasOptionsMenu(true); }

  27. 關閉Fragment @Override public booleanonOptionsItemSelected( MenuItemitem) { switch (item.getItemId()) { case android.R.id.home: getActivity().getFragmentManager(). popBackStack(); return true; } return super.onOptionsItemSelected(item); }

  28. DetailFragment • 在onPause getActivity().getActionBar(). setDisplayHomeAsUpEnabled(false);

  29. 成果

  30. 下集預告 • Menu • Dialog • Toast • Notification

More Related