1. 程式人生 > >Android基礎之AdapterView系列學習

Android基礎之AdapterView系列學習

AdapterView介紹
AdapterView是ListView的間接父類。定義了一個可以通過介面卡載入和顯示多個列表項的容器控制元件。其兩個主要子類是:AbsListView和

AbsSpinner,二者最大的區別在於核心響應事件不同。
·AdapterView是ViewGroup的子類
·可包含多個列表項用於顯示一組資料
·AdapterView類中啊addView方法被禁用,其資料提供通過介面卡物件來完成
·兩個直接子類的區別在於核心事件不同

        AbsListView:顯項被單擊時不會有特殊顯示
            GridView 網格形式顯示列表項  
            ListView 垂直線性佈局顯示
        AbsSpinner:列表項中的選中事件一旦被選中,列表項會被特殊顯示
            Gallery  4.0之後不建議使用
            Spinner   

GridView控制元件:
·GridView與ListView一樣都是容器控制元件
·繼承自AbsListView
·用網格的形式顯示列表項

主要屬性        Java方法          作用
ColumnWidth     setCoumnWidth(int i)        設定列表寬度
Gravity         setGravity(int i)       設定對齊方式
horizontalSpacing   setHorizontalSpacing        設定各元素之間的水平問題
numColumns      setNumColumns(int i)        設定列數
stretchMode     setStretchMode(int i)       設定拉伸模式

NO_STRETCH      不拉伸
STRETCH_SPACING     僅拉伸元素之間的間距
STRETCH_SPACING_UNIFORM 表格元素本身,元素之間的間距一起拉伸
STRETCH_COLLUMN_WIDTH   僅拉伸表格元素本身

Spinner
Spinner是AbsSpinner的子類,通常稱為下拉列表。其介面主要由兩部分構成:內容顯示區和下拉提示列表。其核心事件是列表項選中事件。

被選中的列表項會在顯示區顯示。

示例:
效果圖:
這裡寫圖片描述

package com.example.spinner;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public
class MainActivity extends Activity { private String[] number ={ "一","二","三","四","五","六","七","八","九" }; private Spinner spinner; private ArrayAdapter<String> adapter; private void setupView(){ spinner = (Spinner) findViewById(R.id.spinner); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, number); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setupView(); } }
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <Spinner 
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

AutoCompleteTextView
AutoCompleteTextView是EditText的直接子類,該類繼承了EditText的所有行為和屬性,同時該類的內部組合了一個AdapterView物件,通過

該物件可以實現對輸入框內輸入的文字的過濾顯示。
·繼承自EditText
·其內部包含一個AdapterView物件,可以通過該控制元件的setAdapter方法,為AdapterView物件提供過濾資料
·setAdapter方法中接受的介面卡必須實現Filterable藉口
·主要方法:
- void setThreshold(int threshold) //指定輸入幾個字元之後才開始過濾匹配
- void setCompletionHint(CharSequence hint) //列表最後顯示的資訊

示例:
這裡寫圖片描述
效果圖

package com.example.autocompletetextview;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;

public class MainActivity extends Activity {
    private AutoCompleteTextView auto;
    private ArrayAdapter<String> adapter;
    private String[] str={
            "able","ajk","ajkgf","ahisd","ksdfa","ksadfg","kwerw","kvbsb","msadf","msadg"
    };
    private void setupView(){
        auto = (AutoCompleteTextView) findViewById(R.id.auto);
        auto.setThreshold(1);
        auto.setCompletionHint("搜尋結果...");
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, str);
        auto.setAdapter(adapter);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setupView();
    }


}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <AutoCompleteTextView 
        android:id="@+id/auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</RelativeLayout>

MultiAutoCompleteTextView
MultiAutoCompleteTextView繼承自AutoCompleteTextView,與其父類最重要的區別在於MultiAutoCompleteTextView控制元件允許使用者進行多次輸入補全。該控制元件使用時必須設定分詞符。該類內部包含了一個預設的逗號分詞符。

·繼承自AutoCompleteTextView
·充許進行多次提示
·多次輸入項使用指定的分詞符間隔
·主要方法:
    - void setTokenizer(Tokenizer t)
·MultiAutoConpleteTextView類中包含一個Tokenizer介面的實現類CommaTokenizer

示例:
這裡寫圖片描述
效果圖

package com.example.multiautocompletetextview;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.MultiAutoCompleteTextView;

public class MainActivity extends Activity {
    private String[] str={
            "able","ajk","ajkgf","ahisd","ksdfa","ksadfg","kwerw","kvbsb","msadf","msadg"
    };
    private MultiAutoCompleteTextView multi;
    private ArrayAdapter<String> adapter;
    private void setupView(){
        multi = (MultiAutoCompleteTextView) findViewById(R.id.multi);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, str);
        multi.setAdapter(adapter);
        multi.setThreshold(1);
        multi.setCompletionHint("歷史搜尋結果..");
        multi.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setupView();
    }
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <MultiAutoCompleteTextView 
        android:id="@+id/multi"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</RelativeLayout>