點擊快速抵達:javascript
第3章 使用DatePicker及TimePicker顯示當前日期和時間android
第13章 使用Gallery和ImagePicker製做圖片瀏覽器
第1章 AndroidManifest配置文件
四大組件中,只有broadcast組件能夠在代碼中聲明註冊,其餘必須在AndroidManifest.xml文件中進行註冊,不然會報錯
<application>標籤在其中只有1個
<activity>啓動沒有在AndroidManifest.xml文件中定義的Activity會報錯 有且只有1個入口Activity
<service>
<provider>
<receiver>
另外還須要配置權限
<uses-permission> 說明該應用須要使用那些系統權限
另外,能夠給某一個應用自定義一個權限,供其餘應用使用
例如,須要實現:在應用B的一個activity中點擊按鈕後跳轉到應用A的一個activity上,則步驟以下:
1)在應用A的AndroidManifest.xml文件中對應的activity下使用<per>子標籤訂義一個權限
2)在應用A的AndroidManifest.xml文件中聲明這個權限,使用<permission>標籤,則該activity即被保護起來,須要有對應權限才能夠訪問
3)在應用B的AndroidManifest.xml文件中使用<uses-permission>標籤申請使用這個權限
第2章 使用ListView顯示信息列表
ListView須要結合數據適配器將數據源(如數組、鏈表、數據庫、集合)顯示出來
ArrayAdapter:能夠用於顯示格式一致的,如數組、集合
SimpleAdapter:功能強大,能夠顯示覆雜的
public class MainActivity extends ActionBarActivity { private ListView listView; private ArrayAdapter<String>arrAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.listviewtest); listView = (ListView)findViewById(R.id.listView1); //1 新建一個適配器(3個參數爲:上下文,當前ListView加載的每個列表項對應的佈局文件,數據源) //2 適配器加載數據源 String[] data = {"第一條item","第二條item","第三條item"}; arrAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data); //3 視圖加載適配器 listView.setAdapter(arrAdapter); } }
SimpleAdapter:實現效果
public class MainActivity extends ActionBarActivity { private ListView listView; private SimpleAdapter simpAdapter; private List<Map<String,Object>> dataList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.listviewtest); listView = (ListView)findViewById(R.id.listView1); /*1 新建一個適配器(5個參數爲: *context:上下文 *data:數據源 List<? extends Map<String, ?>> 一個Map所組成的list組合 *每個Map都會去對應ListView列表中的一行 *每個Map(鍵值對)中的鍵必須包含全部在from中所指定的鍵 *resource:列表項的佈局文件ID *from:Map中的鍵名 *to:綁定數據視圖中的ID,與from成對應關係 *2 適配器加載數據源 * * */ dataList = new ArrayList<Map<String, Object>>(); simpAdapter = new SimpleAdapter(this, getData(), R.layout.itemtest, new String[]{"img","text"}, new int[]{R.id.imageView1,R.id.textView1}); //3 視圖加載適配器 listView.setAdapter(simpAdapter); } private List<Map<String,Object>> getData(){ for(int i = 0 ; i<20 ;i++){ Map<String,Object> map = new HashMap<String,Object>(); map.put("img", R.drawable.ic_launcher); map.put("text", "你好" + i); dataList.add(map); } return dataList; } }
監聽器:是程序和用戶交互的橋樑
1)實現接口
2)設置監聽
3)重寫監聽方法
OnItemClickListener:能夠處理視圖中單個條目的點擊事件
public class MainActivity extends ActionBarActivity implements OnItemClickListener
listView.setOnItemClickListener(this);
@Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { String text = listView.getItemAtPosition(arg2) + ""; //這裏有「」 不須要進行類型轉換 不然因爲listView.getItemAtPosition(arg2)返回的是object類型,須要進行類型轉換 Toast.makeText(this, "position = " + arg2 + "text = " + text, Toast.LENGTH_LONG).show(); }
OnScrollListener:監測滾動的變化,能夠用於視圖在滾動中加載數據
public class MainActivity extends ActionBarActivity implements OnScrollListener
listView.setOnScrollListener(this);
@Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch(scrollState){ case SCROLL_STATE_FLING: Log.i("Main", "視圖正在滑動,可是手指已經離開了屏幕"); Map<String, Object> map = new HashMap<String,Object>(); map.put("img", R.drawable.ic_launcher); map.put("text", "新增項"); dataList.add(map); //數據集已經發生變化 simpAdapter.notifyDataSetChanged(); //須要通知界面刷新 break; case SCROLL_STATE_IDLE: Log.i("Main", "視圖沒有滑動"); break; case SCROLL_STATE_TOUCH_SCROLL: Log.i("Main", "視圖正在滑動,手指還沒有離開屏幕"); break; } }
第3章 使用DatePicker及TimePicker顯示當前日期和時間
public class MainActivity extends ActionBarActivity { private Calendar cal; //自帶類,用於獲取年月日時分 private int year; //聲明年月日時分 private int month; private int day; private int hour; private int minute; private DatePicker datePicker; //聲明activity上的兩個控件 private TimePicker timePicker; private Context mcontext; //上下文變量 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cal = Calendar.getInstance(); //得到日曆類實例 year = cal.get(Calendar.YEAR); //年月日時分初始值得到 month = cal.get(Calendar.MONTH) + 1; day = cal.get(Calendar.DAY_OF_MONTH); hour = cal.get(Calendar.HOUR_OF_DAY); minute = cal.get(Calendar.MINUTE); mcontext = this; setTitle(year + "-" + month + "-" + day + " " + hour + ":" + minute); //title欄初始顯示 datePicker = (DatePicker)findViewById(R.id.datePicker1); //獲取頁面按鈕 timePicker = (TimePicker)findViewById(R.id.timePicker1); datePicker.init(year, cal.get(Calendar.MONTH), day, new OnDateChangedListener() { //datePicker經過init()方法進行初始化,其中的OnDateChangedListener()用來監聽日期修改 @Override public void onDateChanged(DatePicker arg0, int arg1, int arg2, int arg3) { setTitle(arg1 + "-" + (arg2 + 1) + "-" + arg3); //日期修改後須要作什麼 } }); timePicker.setOnTimeChangedListener(new OnTimeChangedListener() { //timePicker直接經過setOnTimeChangedListener()中的OnTimeChangedListener來監聽時間變化 @Override public void onTimeChanged(TimePicker arg0, int arg1, int arg2) { setTitle(arg1 + ":" + arg2); //時間修改後須要作什麼 } }); new DatePickerDialog(mcontext, new OnDateSetListener() { //DatePickerDialog和TimePickerDialog 以彈出框的方式來修改 @Override public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) { setTitle(arg1 + "-" + (arg2 + 1) + "-" + arg3); //回調方法,關閉彈框後須要作什麼 } }, year, cal.get(Calendar.MONTH), day).show(); //經過.show()顯示出來 new TimePickerDialog(mcontext, new OnTimeSetListener() { @Override public void onTimeSet(TimePicker arg0, int arg1, int arg2) { setTitle(arg1 + ":" + arg2); } }, hour, minute, true).show(); } }
第4章 使用GridView以表格形式顯示多張照片
效果:
代碼:activity
public class MainActivity extends ActionBarActivity implements android.widget.AdapterView.OnItemClickListener{ private GridView gridView; private List<Map<String,Object>> dataList; private int[] icon = {R.drawable.address_book,R.drawable.calendar,R.drawable.camera,R.drawable.clock, R.drawable.games_control,R.drawable.messenger,R.drawable.ringtone,R.drawable.settings, R.drawable.speech_balloon,R.drawable.weather,R.drawable.world,R.drawable.youtube}; private String[] iconName = {"通信錄","日曆","照相機","鬧鐘","遊戲中心","信息","鈴聲","設置","語音","天氣","瀏覽器","視頻"}; private SimpleAdapter simpleAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); gridView = (GridView)findViewById(R.id.gridView1); dataList = new ArrayList<Map<String,Object>>(); //數據源初始化 simpleAdapter = new SimpleAdapter(this, getData(), R.layout.item, new String[]{"image","text"}, new int[]{R.id.image,R.id.text}); //定義適配器 gridView.setAdapter(simpleAdapter);//加載適配器 gridView.setOnItemClickListener(this); //啓動監聽器 } private List<Map<String,Object>> getData(){ //數據源獲取方法 for(int i = 0; i < icon.length;i++){ Map<String,Object> map = new HashMap<>(); map.put("image", icon[i]); map.put("text", iconName[i]); dataList.add(map); } return dataList; } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { //監聽到動做後 打印文字 Toast.makeText(this, "我是" + iconName[arg2], Toast.LENGTH_SHORT).show(); } }
代碼:activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.gridviewtest.MainActivity" tools:ignore="MergeRootFrame" android:background="#000000"> <!--android:background設置背景色爲黑色 android:numColumns 設置每列有3個item android:verticalSpacing 設置item以前的垂直間距 android:horizontalSpacing 設置item之間的水平間距--> <GridView android:id="@+id/gridView1" android:layout_width="match_parent" android:layout_height="match_parent" android:numColumns="3" android:verticalSpacing="10dp" android:horizontalSpacing="10dp"> </GridView> </FrameLayout>
代碼:item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center"> <ImageView android:id="@+id/image" android:layout_width="60dp" android:layout_height="60dp" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/text" android:layout_margin="5dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#FFFFFF" android:text="Hi nihao" /> </LinearLayout>
第5章 使用Spinner實現下拉列表
public class MainActivity extends ActionBarActivity implements OnItemSelectedListener { private TextView textView; private Spinner spinner; private List<String> list; private ArrayAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView)findViewById(R.id.textView1); textView.setText("你選擇的是:北京"); spinner = (Spinner)findViewById(R.id.spinner1); list = new ArrayList<String>(); //1 定義數據源 list.add("北京"); list.add("上海"); list.add("廣州"); list.add("深圳"); adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, list); //2 定義適配器 加載數據源 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //3 爲適配器設置下拉時的樣式 spinner.setAdapter(adapter); //4 加載適配器 spinner.setOnItemSelectedListener(this); // 5 啓動下拉選擇監聽 } //定義監聽 @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { String cityName = (String) spinner.getItemAtPosition(arg2); textView.setText("你選擇的是:" + cityName); } @Override public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub } }
第6章 使用ProgressBar實現進度條
大環形 小環形 水平進度 有的能夠顯示刻度和百分比 有的不顯示進度
關鍵屬性和方法:
第一顯示進度 第二顯示進度 最大顯示進度
demo效果:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.progressbar.MainActivity" tools:ignore="MergeRootFrame" android:orientation="vertical" > <ProgressBar android:id="@+id/progressBar1" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:max="100" android:progress="30" android:secondaryProgress="40" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/add"/> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/reduce" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/reset" /> <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="TextView" /> </LinearLayout>
public class MainActivity extends ActionBarActivity implements OnClickListener{ private ProgressBar progress; private Button btn_add; private Button btn_reduce; private Button btn_reset; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { progress =(ProgressBar)findViewById(R.id.progressBar1); btn_add = (Button)findViewById(R.id.button1); btn_reduce = (Button)findViewById(R.id.button2); btn_reset = (Button)findViewById(R.id.button3); textView = (TextView)findViewById(R.id.textView1); int firstPro = progress.getProgress(); int secPro = progress.getSecondaryProgress(); int Max = progress.getMax(); textView.setText("第一進度是:" + (int)(firstPro/(float)Max*100) + "%;" + "第二進度是:" + (int)(secPro/(float)Max*100) + "%;"); btn_add.setOnClickListener(this); btn_reduce.setOnClickListener(this); btn_reset.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { //增長進度 case R.id.button1: progress.incrementProgressBy(10); progress.incrementSecondaryProgressBy(10); break; //減小進度 case R.id.button2: progress.incrementProgressBy(-10); progress.incrementSecondaryProgressBy(-10); break; //重置 case R.id.button3: progress.setProgress(30); progress.setSecondaryProgress(40); break; } textView.setText("第一進度是:" + (int)(progress.getProgress()/(float)progress.getMax()*100) + "%;" + "第二進度是:" + (int)(progress.getSecondaryProgress()/(float)progress.getMax()*100) + "%;"); } }
關於progressDialog的內容未詳細看,關於自定義progressBar的內容未作筆記
第7章 使用WebView顯示網頁
使用Intent意圖在咱們的應用中打開瀏覽器顯示網頁
public class MainActivity extends ActionBarActivity { private String url = "http://www.baidu.com"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Uri uri = Uri.parse(url); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); } }
能夠自定義webview,加載本地資源或web資源
定義webview:
public class MainActivity extends ActionBarActivity { private WebView webview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webview = (WebView)findViewById(R.id.webView1); //webview加載本地資源 // webview.loadUrl("file:///android_asset/test.html"); //webview加載web資源,必定要記得加上權限<uses-permission android:name="android.permission.INTERNET"/> webview.loadUrl("http://www.baidu.com"); } }
自定義webview默認使用系統瀏覽器或第三方瀏覽器打開網頁,能夠經過覆蓋這一行爲使得直接在webview中打開網頁
webview.loadUrl("http://www.baidu.com"); webview.getSettings().setJavaScriptEnabled(true); //有些頁面使用js,必須設置容許加載js才能打開 webview.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); //返回true則在webview中直接打開,返回false在系統或第三方瀏覽器中打開 return true; } });
啓用支持javascript
webview = (WebView)findViewById(R.id.webView1); WebSettings webSettings = webview.getSettings(); webSettings.setJavaScriptEnabled(true);
後退與前進
//改寫物理按鍵——返回的邏輯 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (webview.canGoBack()) { webview.goBack(); //返回上一頁面 return true; } else { System.exit(0); //退出系統 } } return super.onKeyDown(keyCode, event); }
另外有setChromeClient()等
第8章 Fragment基礎
android3.0引入了fragments的概念,主要用於大屏幕設備上,他是一個模塊化和可重用的組件,定義了本身的佈局文件
fragment在首次繪製界面時,須要調用onCreateView()方法,該方法返回一個view對象,若是不須要繪製UI,返回null便可
fragment的加載方式分爲靜態加載和動態加載兩種方式
靜態加載:
第9章 Fragment與Activity通訊
第10章 使用ViewPager實現導航
第11章 使用ViewFilpper實現屏幕切換動畫效果
第12章 使用ScrollView實現滾動效果
第13章 使用Gallery和ImagePicker製做圖片瀏覽器
第14章 使用SeekBar實現可拖動的滾動條
第15章 Android佈局優化