Android攻城獅學習筆記-進階篇一

點擊快速抵達:javascript

第1章 AndroidManifest配置文件html

第2章 使用ListView顯示信息列表java

第3章 使用DatePicker及TimePicker顯示當前日期和時間android

第4章 使用GridView以表格形式顯示多張照片web

第5章 使用Spinner實現下拉列表數據庫

第6章 使用ProgressBar實現進度條數組

第7章 使用WebView顯示網頁瀏覽器

第8章 Fragment基礎app

第9章 Fragment與Activity通訊ide

第10章 使用ViewPager實現導航

第11章 使用ViewFilpper實現屏幕切換動畫效果

第12章 使用ScrollView實現滾動效果

第13章 使用Gallery和ImagePicker製做圖片瀏覽器

第14章 使用SeekBar實現可拖動的滾動條

第15章 Android佈局優化

第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佈局優化

相關文章
相關標籤/搜索