【android編程】第五講-Android高級組件

Android第五講高級組件

零. 適配器Adapter

  1. 將各種數據以合適的形式顯示在View中給用戶看。

    img

  2. ArrayAdapter

    支持泛型操作,最簡單的一個Adapter,只能展現一行文字~
    
    adapter = new ArrayAdapter<>(this,android.R.layout.simple_expandable_list_item_1,datas);
    
    ArrayAdapter的參數說明:
    
    第一個參數:context上下文對象
    第二個參數:每一個item的樣式,可以使用系統提供,也可以自定義就是一個TextView
    第三個參數:數據源,要顯示的數據
    
    系統提供的item的樣式,可以試一試
    
    simple_list_item1:單獨的一行文本框
    simple_list_item2:有兩個文本框組成
    simple_list_item_checked每項都是由一個已選中的列表項
    simple_list_item_multiple_choice:都帶有一個複選框
    simple_list_item_single_choice:都帶有一個單選框
    

    ArrayAdapter有五種佈局類型:

simple_expandable_list_item_1: img
simple_expandable_list_item_2: img
simple_list_item_checked: img
simple_list_item_multiple_choice: img
simple_list_item_single_choice: img
  1. SimpleAdapter(簡單適配器)

    同樣具有良好擴展性的一個Adapter,可以自定義多種效果!
    
    adapter = new SimpleAdapter(MainActivity.this,lists,R.layout.list_item
                    ,new String[]{"image","theme","content"}
                    ,new int[]{R.id.image1,R.id.text1,R.id.text2});
    
    simpleAdapter中五個參數的
    
    第一個參數:上下文對象
    第二個參數:數據源是含有Map的一個集合
    第三個參數:每一個item的佈局文件
    第四個參數:new String[]{}數組,數組的裏面的每一項要與第二個參數中的存入map集合的的key值一樣,一一對應
    第五個參數:new int[]{}數組,數組裏面的第三個參數中的item裏面的控件id
    
  2. BaseAdapter

    BaseAdapter使用相對最廣,因爲侷限性小,使用起來更加自由,自己寫,抽象類
    使用BaseAdapter比較簡單,主要是通過繼承此類來實現BaseAdapter的四個方法:
    
    public int getCount(): 適配器中數據集的數據個數;
    
    public Object getItem(int position): 獲取數據集中與索引對應的數據項;
    
    public long getItemId(int position): 獲取指定行對應的ID;
    
    public View getView(int position,View convertView,ViewGroup parent): 獲取沒一行Item的顯示內容。
    
  3. 參考鏈接:

    https://www.cnblogs.com/endv/p/9774417.html

    https://www.cnblogs.com/xianfeng-zhang/p/8134684.html

一. 列表和列表視圖

  1. Spinner

    在value中arrays.xml定義一個數組

    使用步驟:

    1. 在佈局中添加Spinner
    2. 設置數據源
    3. 設置顯示的主題
    4. 添加點擊的響應事件

    code:

    <Spinner 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/spinner2"
        android:entries="@array/spingarr"
        />
    
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="spingarr">
         <item>北京</item>  
        <item>上海</item>  
        <item>廣州</item>  
        <item>深圳</item>  
        </string-array>
    </resources>
    
    mySpinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {//選擇item的選擇點擊監聽事件  
                        public void onItemSelected(AdapterView<?> arg0, View arg1,  
                                int arg2, long arg3) {  
                            // TODO Auto-generated method stub  
                            // 將所選mySpinner 的值帶入myTextView 中   
                            myTextView.setText("您選擇的是:" + arg2+"個");//文本說明  
                        }  
      
                        public void onNothingSelected(AdapterView<?> arg0) {  
                            // TODO Auto-generated method stub  
                            myTextView.setText("Nothing");  
                        }  
                    });  
    
  2. ListView列表視圖

    1. ListView添加組件 xml

    code:

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    
    
    <LinearLayout android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        xmlns:android="http://schemas.android.com/apk/res/android">
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="26dp"
            android:text="我喜歡的教科書"/>
        <ListView
            android:id="@+id/list0"
            android:entries="@array/item0"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
        </ListView>
        
    </LinearLayout>
    

    array.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="item0">
            <item>第一行代碼Android</item>
            <item>Android開發與實踐</item>
            <item>瘋狂Android講義</item>
            <item>精通Android Studio</item>
        </string-array>
    </resources>
    

    mainActivity.java

    package com.example.bean.myapplication39v1;
    
    import android.app.Activity;
    import android.app.ListActivity;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            String[] data = new String[]{"第一行代碼Android","Android開發與實踐","瘋狂Android講義","精通Android Studio"};
            ListView listView;
            ArrayAdapter<String> adapter;
            adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,data);
            //setListAdapter(adapter);
            listView = (ListView) findViewById(R.id.list0);
            listView.setAdapter(adapter);
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
                    //通過下標來獲取內容
                    String str = parent.getItemAtPosition(position).toString();
    
                    Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
    
                    //position 數據的下標  id 數據的id
                    //Toast.makeText(MainActivity.this, "position="+position+"id="+id, Toast.LENGTH_SHORT).show();
                }
            });
        }
    }
    
    
    1. Activity繼承ListActivity(extends)

    code:

    <ListView
        android:id="@+id/lv_expense"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
    </ListView>
    
    <ImageView
        android:id="@+id/image_expense"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="10dp"
        android:paddingRight="10dp"
        android:paddingBottom="10dp"
        android:adjustViewBounds="true"
        android:maxWidth="72dp"
        android:maxHeight="72dp"/>
    <TextView
        android:id="@+id/tv_expense_category"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:padding="10dp"/>
    <TextView
        android:id="@+id/tv_expense_money"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="10.0000"/>
    
    List<Map<String, Object>> listitem = new ArrayList<Map<String, Object>>(); //存儲數據的數組列表
    //寫死的數據,用於測試
    int[] image_expense = new int[]{R.mipmap.detail_income, R.mipmap.detail_payout }; //存儲圖片
    String[] expense_category = new String[] {"發工資", "買衣服"};
    String[] expense_money = new String[] {"30000.00", "1500.00"};
    for (int i = 0; i < image_expense.length; i++)
    {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("image_expense", image_expense[i]);
        map.put("expense_category", expense_category[i]);
        map.put("expense_money", expense_money[i]);
        listitem.add(map);
    }
    
    //創建適配器
    // 第一個參數是上下文對象
    // 第二個是listitem
    // 第三個是指定每個列表項的佈局文件
    // 第四個是指定Map對象中定義的兩個鍵(這裏通過字符串數組來指定)
    // 第五個是用於指定在佈局文件中定義的id(也是用數組來指定)
    SimpleAdapter adapter = new SimpleAdapter(getActivity()
            , listitem
            , R.layout.fragment_one_item
            , new String[]{"expense_category", "expense_money", "image_expense"}
            , new int[]{R.id.tv_expense_category, R.id.tv_expense_money, R.id.image_expense});
            
    ListView listView = (ListView) v.findViewById(R.id.lv_expense);
    listView.setAdapter(adapter);
    
  3. 參考鏈接:

    https://blog.csdn.net/qq_38217237/article/details/79044448

    https://www.cnblogs.com/AnneHan/p/9726391.html

二.網格視圖 GridView

  1. 當屏幕上有很多元素(文字、圖片或其他元素)需要按矩陣格式進行顯示時,就可以使用GridView控件來實現。
  2. GridView的一些屬性:
1. android:numColumns=”auto_fit” //GridView的列數設置爲自動,也可以設置成2、3、4……
2. android:columnWidth=”90dp " //每列的寬度,也就是Item的寬度
3. android:stretchMode=”columnWidth" //縮放與列寬大小同步
4. android:verticalSpacing=”10dp” //兩行之間的邊距
5. android:horizontalSpacing=”10dp” //兩列之間的邊距
6. android:cacheColorHint="#00000000" //去除拖動時默認的黑色背景
7. android:listSelector="#00000000" //去除選中時的黃色底色
8. android:scrollbars=“none” //隱藏GridView的滾動條
9. android:fadeScrollbars=“true” //設置爲true就可以實現滾動條的自動隱藏和顯示
10. android:fastScrollEnabled=“true” //GridView出現快速滾動的按鈕(至少滾動4頁纔會顯示)
11. android:fadingEdge=“none” //GridView衰落(褪去)邊緣顏色爲空,缺省值是vertical。(可以理解爲上下邊緣的提示色)
12. android:fadingEdgeLength=“10dip” //定義的衰落(褪去)邊緣的長度
13. android:stackFromBottom=“true” //設置爲true時,你做好的列表就會顯示你列表的最下面
14. android:transcriptMode=“alwaysScroll” //當你動態添加數據時,列表將自動往下滾動最新的條目可以自動滾動到可視範圍內
15. android:drawSelectorOnTop=“false” //點擊某條記錄不放,顏色會在記錄的後面成爲背景色,內容的文字可見(缺省爲false)
  1. code:

    界面佈局

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent" >
      
          <GridView 
              android:id="@+id/gridView"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:numColumns="4"
              android:horizontalSpacing="10dp"
              android:verticalSpacing="10dp">
          </GridView>
      
      </LinearLayout>
    
    

    在GridView控件中,我們通過android:numColumns="4"指定了網格的列數爲4;通過android:horizontalSpacing="10dp"和android:verticalSpacing="10dp"指定了網格之間的水平距離和垂直距離都爲10dp。

    網格元素佈局

    <?xml version="1.0" encoding="utf-8"?>
      <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"    >
          
          <ImageView
              android:id="@+id/itemImage"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_centerHorizontal="true"    >
          </ImageView>
          
          <TextView
              android:id="@+id/itemName"
              android:layout_below="@+id/itemImage"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_centerHorizontal="true"    >
          </TextView>
          
      </RelativeLayout>
    
    

    資源儲存

    在該實例中,我們需要對衆多的應用軟件圖標以及應用軟件名稱進行儲存。很顯然,應用軟件圖標以及應用軟件名稱之間存在着一一對應的關係,我們可以使用HashMap分別對應用軟件圖標以及應用軟件名稱進行存儲,然後再將HashMap添加到ArrayList中,便可以完成資源的儲存了。具體實現方法如下

    //將圖標圖片和圖標名稱存入ArrayList中
      //Author:博客園-依舊淡然
      ArrayList<HashMap<String, Object>> item = new ArrayList<HashMap<String, Object>>();
      for (int i = 0; i < resIds.length; i++) {
          HashMap<String, Object> map = new HashMap<String, Object>();
          map.put("itemImage", resIds[i]);
          map.put("itemName", name[i]);
          item.add(map);
      }
    
    

    其中,數組resIds[]儲存着應用軟件圖標的資源id;數組name[]儲存着應用軟件名稱,並通過for循環遍歷語句將其存入了HashMap中。

    簡單適配器SimpleAdapter

    簡單適配器SimpleAdapter繼承自BaseAdapter,用於將靜態數據映射到xml文件中定義好的視圖當中。比如可以指定靜態數據爲由Map組成的ArrayList。在ArrayList中每個條目對應List中的一行,Map可以包含多項數據。

    SimpleAdapter的構造方法如下:

    public SimpleAdapter (Context context, List<? extends Map

三.圖像切換器 ImageSwitcher

  1. ImageSwitcher是Android中控制圖片展示效果的一個控件,如:幻燈片效果

  2. 重要方法

    setImageURI([Uri](file:///F:/Android/api/docs_r01-linux/reference/android/net/Uri.html) uri):設置圖片地址

    setImageResource(int))(int resid):設置圖片資源庫

    setImageDrawable(Drawable drawable):繪製圖片

  3. 1.獲取到xml佈局中的ImageSwitcer控件
    2.給isImages設置工廠方法.setFactory((ViewSwitcher.ViewFactory)this);這個方法就是要給ImageSwitcher這個控件中加入ImageView這樣的內容,方便切換。這裏需要重寫一個方法View makeView(){return imageView}
    3.得到傳入該Activity的參數(點擊這個圖片時要傳入該圖片的position)
    4.數據源需要用到,在這裏初始化了。
    5.給ImageSwitcher設置數據源isImage.setImageResource(images[currentPosition]);
    6.寫一下兩個button的點擊觸發方法。一個displayPrevious(View view) 一個displayNext(View view)方法。改變圖片的方式就是增加/減少currentPosition,然後設置ImageResource

  4. code:

    <ImageSwitcher
            android:id="@+id/imageSwitcher1"
            android:layout_width="match_parent"
            android:layout_height="fill_parent"
            android:layout_above="@+id/linear"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true">
        </ImageSwitcher>
    
    
    public class DisplayActivity extends Activity implements ViewSwitcher.ViewFactory {
    //注意這裏該Activity需要實現ViewFactory這個接口中的一些方法,就是下面我們要用到的makeView這個方法
    
    //聲明一個圖片切換器
    private ImageSwitcher isImages;
    //記錄當前顯示的第幾張圖片,是一個數組的索引
    private int currentPosition;
    int[] images;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display);
    //初始化切換器
    isImages = (ImageSwitcher) findViewById(R.id.imageSwitcher1);
    //給切換器加一個factory 可以把它看成是一個容器
    isImages.setFactory((ViewSwitcher.ViewFactory) this);
    //當前顯示的圖片的索引就是從intent傳過來的附加信息,我們通過getIntExtra得到他
    currentPosition = getIntent().getIntExtra("position",0);
    
    images = new int[]{
    R.mipmap.image1,R.mipmap.image2,R.mipmap.image3,
    R.mipmap.image4,R.mipmap.image5,R.mipmap.image6,
    R.mipmap.image7,R.mipmap.image8,R.mipmap.image9,
    R.mipmap.image1,R.mipmap.image2,R.mipmap.image3,
    R.mipmap.image4,R.mipmap.image5,R.mipmap.image6,
    R.mipmap.image7,R.mipmap.image8,R.mipmap.image9
    };
    //給圖片切換器設置圖片
    isImages.setImageResource(images[currentPosition]);
    }
    /**
    * 顯示上一張圖片
    * 給圖片索引做一個--的動作,判斷噹噹前值小於0時,給它提示當前爲第一張。
    */
    public void displayPrevious(View view){
    currentPosition--;
    if(currentPosition<0){
    Toast.makeText(this,"已經是第一張圖片了",Toast.LENGTH_SHORT).show();
    currentPosition = 0;
    }
    isImages.setImageResource(images[currentPosition]);
    }
    
    /**
    * 顯示下一張圖片
    * 給圖片索引做一個++操作,判斷當 當前值大於最後一張時,提示它爲最後一張
    */
    public void displayNext(View view){
    currentPosition++;
    if(currentPosition>images.length-1){
    Toast.makeText(this,"已經是最後一張圖片了",Toast.LENGTH_SHORT).show();
    currentPosition = images.length-1;
    }
    isImages.setImageResource(images[currentPosition]);
    }
    
    /**完成ViewFactory接口的時候,必須要重寫的方法makeView
    * 他的作用是返回來一個ImageView對象,同來顯示選中的圖片。
    * 我們需要給他設置一些屬性,例如,設置佈局等等。
    */
    @Override
    public View makeView() {
    ImageView imageView = new ImageView(this);
    imageView.setLayoutParams(new ImageSwitcher.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
    return imageView;
    }
    }
    
    原文鏈接:https://blog.csdn.net/a243845305/article/details/50254961
    
    

四.畫廊視圖 Gallery

Gallery與之前講的Spinner有共同的父類:AbsSpinner,表明Gallery和Spinner都是一個列表框。他們之間的區別在於Spinner顯示的是一個垂直的列表框,而Gallery顯示的是一個水平的列表框。Gallery與Spinner有一個區別:Spinner的作用是供用戶選擇,而Gallery則允許用戶通過拖動來查看上一個、下一個列表項。

Gallery常用的XML屬性及相關方法

XML屬性 相關方法 說明
android:animationDuration setAnimationDuration(int) 設置列表項切換時的動畫持續時間
android:gravity setGravity(int) 設置對齊方式
android:spacing setSpacing(int) 設置Gallery內列表項之間的間距
android:unselectedAlpha setUnselectedAlpha(int) 設置沒有選中列表項的透明性

Gallery本身的用法非常簡單----基本上和Spinner的用法相似,只要爲他提供一個內容Adapter即可,該Adapter的getView方法返回的View作爲Gallery列表的列表項;如果程序需要監控到Gallery選擇項的改變,可以通過爲Gallery添加OnItemSelectedListener監聽器即可實現。

Layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
<!-- 定義一個ImageSwitcher組件 -->
<ImageSwitcher android:id="@+id/switcher"
    android:layout_width="320dp"
    android:layout_height="320dp"
    />
<!-- 定義一個Gallery組件 -->
<Gallery android:id="@+id/gallery"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="25dp" 
    android:unselectedAlpha="0.6"
    android:spacing="3pt"
    />    
</LinearLayout>

上面的佈局很簡單,只定義了兩個組件:ImageSwitcher和Gallery組件。主程序也很簡單,爲ImageSwitcher傳入一個ViewFactory對象,爲Gallery傳入一個Adapter對象。這樣ImageSwitcher和Gallery就可以工作了。

爲了讓ImageSwitcher可以顯示Gallery中選中的圖片,爲Gallery綁定一個叫做OnItemSelectedListener監聽。

主程序:GalleryTest.java

import android.app.Activity;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.ViewSwitcher.ViewFactory;

public class GallaryTest extends Activity{
    int[] imageIds = new int[]
    {
        R.drawable.shuangzi, R.drawable.shuangyu,
        R.drawable.chunv, R.drawable.tiancheng, R.drawable.tianxie,
        R.drawable.sheshou, R.drawable.juxie, R.drawable.shuiping,
        R.drawable.shizi, R.drawable.baiyang, R.drawable.jinniu,
        R.drawable.mojie };

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final Gallery gallery = (Gallery) findViewById(R.id.gallery);
        // 獲取顯示圖片的ImageSwitcher對象
        final ImageSwitcher switcher = (ImageSwitcher) 
            findViewById(R.id.switcher);
        // 爲ImageSwitcher對象設置ViewFactory對象
        switcher.setFactory(new ViewFactory()
        {
            @Override
            public View makeView()
            {
                ImageView imageView = new ImageView(GallaryTest.this);
                imageView.setBackgroundColor(0xff0000);
                imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
                imageView.setLayoutParams(new ImageSwitcher.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                return imageView;
            }
        });
        // 設置圖片更換的動畫效果
        switcher.setInAnimation(AnimationUtils.loadAnimation(this,
            android.R.anim.fade_in));
        switcher.setOutAnimation(AnimationUtils.loadAnimation(this,
            android.R.anim.fade_out));
        // 創建一個BaseAdapter對象,該對象負責提供Gallery所顯示的圖片
        BaseAdapter adapter = new BaseAdapter()
        {
            @Override
            public int getCount()
            {
                return imageIds.length;
            }
            @Override
            public Object getItem(int position)
            {
                return position;
            }
            @Override
            public long getItemId(int position)
            {
                return position;
            }

            // 該方法的返回的View就是代表了每個列表項
            @Override
            public View getView(int position, View convertView, ViewGroup parent)
            {
                // 創建一個ImageView
                ImageView imageView = new ImageView(GallaryTest.this);
                imageView.setImageResource(imageIds[position % imageIds.length]);
                // 設置ImageView的縮放類型
                imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                imageView.setLayoutParams(new Gallery.LayoutParams(75, 100));
                TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);
                imageView.setBackgroundResource(typedArray.getResourceId(R.styleable.Gallery_android_galleryItemBackground, 0));
                return imageView;
            }
        };
        gallery.setAdapter(adapter);
        gallery.setOnItemSelectedListener(new OnItemSelectedListener()
        {
            // 當Gallery選中項發生改變時觸發該方法
            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                int position, long id)
            {
                switcher.setImageResource(imageIds[position % imageIds.length]);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent)
            {
            }
        });
    }
}

參考鏈接:https://www.cnblogs.com/Yang-jing/p/3922119.html

五.選項卡 TabHost

  1. 介紹

    TabHost可以方便地在窗口上放置多個標籤頁,每個標籤頁相當於獲得了一個與外部容器大小相同的組件擺放區域
    TabHost是一個簡單的容器,提供如下兩種方法來創建選項卡
    newTabSpec(String tag):創建選項卡
    addTab(TabHost.TabSpec tabSpec):添加選項卡
    使用TabHost有三種方法

  2. 方法1,繼承TabActivity
    主佈局文件不需要定義TabHost組件,這裏用三個垂直的LinearLayout作爲標籤頁,每個標籤頁裏面有兩個TextView組件

  3. 方法2,在佈局文件中使用TabHost,不用繼承TabActivity
    使用findViewById獲取TabHost組件
    1 在界面佈局中定義TabHost組件,併爲該組件定義選項卡內容
    2 使用findViewById獲取TabHost組件
    3 通過TabHost對象的方法來創建和添加選項卡

  4. 方法3基本和方法2類似,不用繼承TabActivity,只是Tab的內容分開到單獨的xml文件,每個標籤頁都需要inflate一次,和方法2最大的區別就是標籤頁分開到不同的xml文件中

六.滾動視圖 ScrollView

  1. xml創建

滾動視圖有兩種,一種是ScrollView,另一種是HorizontalScrollView.

<HorizontalScrollView                            <!--水平方向滾動視圖-->
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <TextView
            android:textSize="50sp"
            android:text="@string/content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
 
    </HorizontalScrollView>

請注意:ScrollView裏只能有一個子控件,如果有多個就會報錯!!

如果想要用兩個TextView的話可以用線性佈局管理器LinearLayout(或者其它的)將括起來,這樣就不會報錯了

  1. Java中new關鍵字創建

    MainActivity.java文件

   package com.example.c_huimin.myapplication;

   import android.support.v7.app.AppCompatActivity;
   import android.os.Bundle;
   import android.widget.ImageView;
   import android.widget.LinearLayout;
   import android.widget.ScrollView;
   import android.widget.TextView;

   public class MainActivity extends AppCompatActivity {

       @Override
       protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);
        
           LinearLayout ll = super.findViewById(R.id.ll);
           LinearLayout ll2 = new LinearLayout(MainActivity.this);
           ll2.setOrientation(LinearLayout.VERTICAL);
           
           ScrollView scrollView = new ScrollView(MainActivity.this);
           ll.addView(scrollView);
           scrollView.addView(ll2);
           
           ImageView imageView = new ImageView(MainActivity.this);
           imageView.setImageResource(R.drawable.img03);
           ll2.addView(imageView);
           
           TextView textView = new TextView(MainActivity.this);
           textView.setText(R.string.dictionary);
           ll2.addView(textView);
       }
   }

   //這段代碼好比一個線性佈局管理器裏嵌套一個線性佈局管理器,子線性佈局管理器裏又有2個控件,一個是ImageView, 另一個是TextView 

string.xml文件

   <resources>
       <string name="app_name">My Application</string>
       <string name="dictionary">123\n我愛你\n123\n我愛你\n123\n我愛你\n123\n我愛你\n123\n我愛你\n123\n我愛你\n123\n我愛你\n123\n我愛你\n123\n我愛你\n123\n我愛你\n123\n我愛你\n123\n我愛你\n123\n我愛你\n123\n我愛你\n123\n我愛你\n123\n我愛你\n</string>
   </resources>

activity_main.xml文件

   <?xml version="1.0" encoding="utf-8"?>
   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:app="http://schemas.android.com/apk/res-auto"
       xmlns:tools="http://schemas.android.com/tools"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       tools:context=".MainActivity"
       android:id="@+id/ll"
       android:orientation="vertical"
       android:padding="16dp">
   </LinearLayout>

  1. 參考鏈接:https://blog.csdn.net/Huimin_520/article/details/80377179

七.自動完成文本框 AutoCompleteTextView

自動完成文本框(AutoCompleteTextView)從EditText派生而出,實際上他也是一個文本編輯框,但它比普通編輯框多了一個功能:當用戶輸入一定字符後,自動完成文本框會顯示一個下拉菜單,供用戶選擇,當用戶選擇某個菜單後,AutoCompleteTextView按用戶選擇自動填寫該文本框

AutoCompleteTextView除了可使用EditText提供的XML屬性和方法之外,還有以下的屬性

android:completionHint setCompletionHint(CharSequence) 設置下拉菜單中的提示標題
android:completionHintView 設置下拉菜單中提示標題的視圖
android:completionThreshold setThreshold(int) 設置用戶至少輸入幾個字符纔會顯示提示
adnroid:dropDownAnchor setDropDownAnchor(int) 設置下拉菜單的定位“錨點”組件,如果沒有指定該屬性,將使用該TextView本身作爲定位”錨點“組件
adnroid:dropDownHeight setDropDownHeight(int) 設置下拉菜單的高度
android:dropDownHorizontalOffest 設置下拉菜單與文本框之間的水平偏移,下拉菜單默認與文本框左對齊
adnroid:dropDownVerticalOffest 設置下拉菜單與文本框之間的垂直偏移,下拉菜單默認緊跟文本框
android:dropDownWidth setDropDownWidth(int) 設置下拉菜單的寬度
android:popupBackground setDropDownBackgroundResource(int) 設置下拉菜單的背景

使用AutoCompleteTextView很簡單,只要爲它設置一個Adapter,該Adapter封裝了AutoCompleteTextView的預測文本

<?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" >
   <!--  定義一個自動完成文本框,指定輸入一個字符後進行提示 -->
   <AutoCompleteTextView 
       android:id="@+id/auto"
       android:layout_width="fill_parent"
       android:layout_height="40dip"
       android:background="#CDCDB4"
       android:completionHint="請選擇您喜歡的書"   
       android:dropDownHorizontalOffset="20dp"
       android:completionThreshold="1"/>           
    
</LinearLayout>

package com.example.autocompletetextview;
 
import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.os.Build;
 
public class MainActivity extends Activity {
	//定義字符串數組,作爲提示的文本
	String[] books = new String[] {
			"my name is xie",
			"my name is qing",
			"my name is cheng",
			"my name is ding",
			"my name is na"
	};
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
        //創建一個ArrayAdapter,封裝數組
        ArrayAdapter<String> aa = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, books);
        AutoCompleteTextView view = (AutoCompleteTextView)findViewById(R.id.auto);
        //設置Adapter
        view.setAdapter(aa);
        
    }
}

參考鏈接:https://blog.csdn.net/qq_27384607/article/details/47151195

八. 題目記錄

  1. 列表選擇框的功能是 B
  • A.按下按鈕後出現一個列表
  • B.提供一系列選擇項供用戶選擇1.00/1.00
  • C.可以選擇若干個列表
  • D.可以有選擇性地把列表框起來
  1. 獲取列表選擇框的值可以使用 A

    • A.getSelectItem()方法
    • B.getText()方法
    • C.findViewById()方法
    • D.OnItemSelected()方法 0000
  2. 關於列表選擇框下列說法錯誤的是 D

    • A.通常只能選擇一個選擇項
    • B.可以使用適配器保存列表選擇項
    • C.可以使用String資源保存列表選擇0.00/1.00
    • D.可以直接將列表項賦值給選擇框
  3. 列表選擇框和列表視圖的區別是 B

    • A.列表視圖佔屏幕空間較小

    • B.列表選擇框是下拉形式的,而列表視圖是平鋪的1.00/1.00

    • C.列表選擇框不能使用適配器

    • D.列表選擇框比列表視頻直觀

  4. 關於適配器下列哪些說法是正確的 D

    • A.適配器用於手機與外設之間的兼容問題
    • B.ArrayAdapter可以提供多種信息
    • C.SimpleAdapter只能提供文字信息
    • D.適配器主要是將數據綁定在UI控件上
  5. 圖像切換器特有的功能是 B

    • A.可以設置適配器
    • B.可以使用動畫效果1.00/1.00
    • C.可以使用src加載圖片
    • D.可以顯示圖像
  6. 畫廊視圖 C

  • A.某一時刻只能看到一幅圖片
  • B.標記爲ImageSwitcher
  • C.按水平方向排列顯示內容1.00/1.00
  • D.不能使用適配器
  1. 關於選項卡下列不正確的說法是 C
    • A.需要爲每一個標籤頁創建一個佈局文件
    • B.TabHost是選項卡的標記
    • C.選項卡會增加窗體的數量1.00/1.00
    • D.選項卡的好處是將頁面分成多個標籤頁
  2. 滾動視圖 C
    • A.一般在.XML文件中創建滾動視圖
    • B.滾動視圖可以放置多個組件
    • C.使用滾動視圖可以瀏覽比窗口大的頁面1.00/1.00
    • D.滾動視圖實現了翻頁功能
  3. 自動完成文本框 B
    • A.使用EditText標記
    • B.在輸入了一些文字後提供一相關的可選項
    • C.可以使用entris設置可選項
    • D.可以自動填充文本框
  4. 列表選擇框的標籤是 D
    • A.ArrayAdaptor
    • B.ListView
    • C.List
    • D.Spinner
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章