天天看點

004 Android之其他控件

文章目錄

    • ListView
      • ListView常用屬性
      • ListView基本使用
      • ListView動态插入資料
      • ListView實作圖文混排
    • Adapter
      • Adapter(擴充卡種類)
      • 自定義Adapter的使用
    • Spinner下拉清單
    • AutoCompleteTextView自動補全

ListView

ListView常用屬性

屬性 說明
divider 設定分割線的顔色
dividerHeight 設定分割線的高度
Scrollbars 設定滾動條的顯示或者隐藏
Fadescrollbars 設定滾動條自動隐藏或者顯示
Entries 引用一個将使用在此ListView裡的數組,若數組是固定的,使用此屬性将比在程式中寫入更為簡單

ListView基本使用

設定基礎屬性

<ListView
        android:id="@+id/lv1"
        android:divider="#FF00FF"
        android:dividerHeight="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
		android:entries="@array/names"
    </ListView>
           

設定字元串數組

<string-array name="names">
    <item>Tome</item>
    <item>Andy</item>
    <item>GuiShou</item>
    <item>Jack</item>
    <item>Andy</item>
    <item>Niko</item>
    </string-array>
           

效果如圖:

004 Android之其他控件

ListView動态插入資料

想要在ListView中動态插入資料,需要下面幾個步驟

  1. 在布局檔案中編寫代碼
  2. 在xml中添加ListView标簽
  3. 在Activity中編寫代碼
  4. 擷取ListView對象
  5. 準備資料源(Array數組)
  6. 配置擴充卡(ArrayAdapter)
  7. 将擴充卡關聯到ListView中

什麼是擴充卡

擴充卡是資料和視圖間的橋梁,它負責把資料所提供的内容顯示到視圖所定義的外觀中

004 Android之其他控件

示例代碼如下:

private void InitListView() {
        //擷取界面對象
        ListView listview=findViewById(R.id.lv1);

        //準備資料源
        String data[]={"上海","北京","廣州","武漢","三亞","成都","南昌","廈門","福建","海口","南昌"};

        //建立擴充卡
        ArrayAdapter<String> adaper=new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1,android.R.id.text1,data);

        //将擴充卡和ListView關聯
        listview.setAdapter(adaper);
    }
           

實際效果如圖:

004 Android之其他控件

ListView實作圖文混排

首先建立一個layout檔案,實作一個單一的ListView樣式,代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_margin="6dp"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/logo"
        android:layout_margin="5dp"
        android:src="@mipmap/ic_launcher"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/title"
            android:text="王者榮耀"
            android:textSize="20dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/version"
            android:text="版本:1.8.8"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/size"
            android:text="大小:1998MB"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </LinearLayout>


    <Button
        android:id="@+id/btn1"
        android:layout_margin="5dp"
        android:text="解除安裝應用"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>
           

預覽效果如圖:

004 Android之其他控件

接着編寫JAVA代碼

private void InitListView() {
        //擷取界面對象
        ListView listview=findViewById(R.id.lv1);

        //準備資料源
        List<Map<String,Object>> maplist=new ArrayList<>();

        Map<String,Object> map1=new HashMap<>();
        map1.put("logo",R.mipmap.ic_launcher);
        map1.put("title","王者榮耀");
        map1.put("version","1.8.8");
        map1.put("size","1178M");



        Map<String,Object> map2=new HashMap<>();
        map2.put("logo",R.mipmap.ic_launcher);
        map2.put("title","爐石傳說");
        map2.put("version","2.8.8");
        map2.put("size","1878M");

        Map<String,Object> map3=new HashMap<>();
        map3.put("logo",R.mipmap.ic_launcher);
        map3.put("title","極品飛車");
        map3.put("version","2.8.8");
        map3.put("size","2478M");

        maplist.add(map1);
        maplist.add(map2);
        maplist.add(map3);

        //建立擴充卡
        SimpleAdapter adaper=new SimpleAdapter(this,
                maplist,R.layout.list_item,
                new String[]{"logo","title","version","size"},
                new int[]{R.id.logo,R.id.title,R.id.version,R.id.size}
                );

        //将擴充卡和ListView關聯
        listview.setAdapter(adaper);
    }
           

實作效果如圖:

004 Android之其他控件

Adapter

Adapter(擴充卡種類)

  1. ArrayAdapter:适用于簡單的文字清單
  2. SimpleAdapter:适用于簡單的圖文混排
  3. SimpleCursorAdapter:适用于資料源是資料庫的清單
  4. 自定義Adapter(繼承自BaseAdapter):最靈活的擴充卡,适用于絕大多數情況

自定義Adapter的使用

之前我們已經用過ArrayAdapter和SimpleAdapter,現在來學習一下自定義自定義Adapter的使用。

004 Android之其他控件

首先建立一個類,繼承自BaseAdapter,

[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-jKqLM4HU-1623032124581)(004 Android之其他控件.assets/1622808098021.png)]

BaseAdapter是個抽象類,需要重寫這個類下面的方法

@Override
    public int getCount() {
        return mList.size();
    }

    @Override
    public Object getItem(int i) {
        return mList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        //輸出日志
        Log.d("GuiShou","位置"+i+"view"+view);

        //加載一個清單項的布局檔案,擷取界面對象
        //擷取布局管理器
        LayoutInflater layoutInflater=LayoutInflater.from(mContext);

        View iview=layoutInflater.inflate(R.layout.list_item,null);

        //将資料添加到布局對象中
        Map<String,Object> map=mList.get(i);
        int resid= (int)map.get("logo");
        String version =(String)map.get("version");
        String title=(String)map.get("title");
        String Size=(String)map.get("size");

        //擷取界面對象
        ImageView ilogo=iview.findViewById(R.id.logo);
        TextView ititle=iview.findViewById(R.id.showTitle);
        TextView iversion=iview.findViewById(R.id.version);
        TextView isize=iview.findViewById(R.id.size);

        //将資料設定到界面上
        ilogo.setImageResource(resid);
        ititle.setText(title);
        iversion.setText(version);
        isize.setText(Size);


        //傳回對象
        return iview;
    }
           

在類内建立兩個成員變量,并填寫構造方法,用于将資料傳輸到界面

private List<Map<String,Object>> mList;
    private Context mContext;

    public MyAdapter(List<Map<String,Object>> mList,Context mContext) {
        this.mList=mList;
        this.mContext=mContext;
    }
           

然後建立擴充卡關聯ListView即可

//建立擴充卡
       MyAdapter adaper=new MyAdapter(maplist,this);

        //将擴充卡和ListView關聯
        listview.setAdapter(adaper);
           

Spinner下拉清單

Spinner和ListView很相似,使用步驟都差不多

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

首先準備控件,接着編寫代碼,關聯擴充卡

private void InitSpinner() {
        //自己準備一個下拉清單
        final String[] strings={"北京","上海","廣州","深圳"};

        //擷取控件對象
        Spinner spinner=(Spinner)findViewById(R.id.spinner);


        //建立擴充卡
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1,android.R.id.text1,strings);

        //關聯擴充卡
        spinner.setAdapter(adapter);

        //設定監聽器
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                String sel=strings[i];
                Toast.makeText(MainActivity.this,sel,Toast.LENGTH_LONG);

            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });

    }
           

實際效果如圖:

004 Android之其他控件

AutoCompleteTextView自動補全

控件代碼如下:

<AutoCompleteTextView
       android:id="@+id/auto1"
       android:completionThreshold="1"
       android:layout_width="match_parent"
       android:layout_height="wrap_content" />
           

completionThreshold屬性表示輸入第幾個字元開始提示。

Activity設定代碼如下:

private void InitAutoText() {
        //擷取界面對象
        AutoCompleteTextView actv=(AutoCompleteTextView)findViewById(R.id.auto1);

        //準備資料源
        String[] objects=new String[]{"hello1","hello2","hello3","world"};

        //建立擴充卡 設定資料
        //建立擴充卡
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1,android.R.id.text1,objects);

        //關聯擴充卡
        actv.setAdapter(adapter);
    }
           

實際效果如圖:

004 Android之其他控件