Android第五講高級組件
文章目錄
零. 適配器Adapter
-
將各種數據以合適的形式顯示在View中給用戶看。
-
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: | |
---|---|
simple_expandable_list_item_2: | |
simple_list_item_checked: | |
simple_list_item_multiple_choice: | |
simple_list_item_single_choice: |
-
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
-
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的顯示內容。
-
參考鏈接:
一. 列表和列表視圖
-
Spinner
在value中arrays.xml定義一個數組
使用步驟:
- 在佈局中添加Spinner
- 設置數據源
- 設置顯示的主題
- 添加點擊的響應事件
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"); } });
-
ListView列表視圖
- 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(); } }); } }
- 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);
-
參考鏈接:
二.網格視圖 GridView
- 當屏幕上有很多元素(文字、圖片或其他元素)需要按矩陣格式進行顯示時,就可以使用GridView控件來實現。
- 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) |
-
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
-
ImageSwitcher是Android中控制圖片展示效果的一個控件,如:幻燈片效果
-
重要方法
setImageURI([Uri](file:///F:/Android/api/docs_r01-linux/reference/android/net/Uri.html) uri):設置圖片地址
setImageResource(int))(int resid):設置圖片資源庫
setImageDrawable(Drawable drawable):繪製圖片
-
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 -
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
-
介紹
TabHost可以方便地在窗口上放置多個標籤頁,每個標籤頁相當於獲得了一個與外部容器大小相同的組件擺放區域
TabHost是一個簡單的容器,提供如下兩種方法來創建選項卡
newTabSpec(String tag):創建選項卡
addTab(TabHost.TabSpec tabSpec):添加選項卡
使用TabHost有三種方法 -
方法1,繼承TabActivity
主佈局文件不需要定義TabHost組件,這裏用三個垂直的LinearLayout作爲標籤頁,每個標籤頁裏面有兩個TextView組件 -
方法2,在佈局文件中使用TabHost,不用繼承TabActivity
使用findViewById獲取TabHost組件
1 在界面佈局中定義TabHost組件,併爲該組件定義選項卡內容
2 使用findViewById獲取TabHost組件
3 通過TabHost對象的方法來創建和添加選項卡 -
方法3基本和方法2類似,不用繼承TabActivity,只是Tab的內容分開到單獨的xml文件,每個標籤頁都需要inflate一次,和方法2最大的區別就是標籤頁分開到不同的xml文件中
六.滾動視圖 ScrollView
- 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(或者其它的)將括起來,這樣就不會報錯了
-
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>
七.自動完成文本框 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
八. 題目記錄
- 列表選擇框的功能是 B
- A.按下按鈕後出現一個列表
- B.提供一系列選擇項供用戶選擇1.00/1.00
- C.可以選擇若干個列表
- D.可以有選擇性地把列表框起來
-
獲取列表選擇框的值可以使用 A
- A.getSelectItem()方法
- B.getText()方法
- C.findViewById()方法
- D.OnItemSelected()方法 0000
-
關於列表選擇框下列說法錯誤的是 D
- A.通常只能選擇一個選擇項
- B.可以使用適配器保存列表選擇項
- C.可以使用String資源保存列表選擇0.00/1.00
- D.可以直接將列表項賦值給選擇框
-
列表選擇框和列表視圖的區別是 B
-
A.列表視圖佔屏幕空間較小
-
B.列表選擇框是下拉形式的,而列表視圖是平鋪的1.00/1.00
-
C.列表選擇框不能使用適配器
-
D.列表選擇框比列表視頻直觀
-
-
關於適配器下列哪些說法是正確的 D
- A.適配器用於手機與外設之間的兼容問題
- B.ArrayAdapter可以提供多種信息
- C.SimpleAdapter只能提供文字信息
- D.適配器主要是將數據綁定在UI控件上
-
圖像切換器特有的功能是 B
- A.可以設置適配器
- B.可以使用動畫效果1.00/1.00
- C.可以使用src加載圖片
- D.可以顯示圖像
-
畫廊視圖 C
- A.某一時刻只能看到一幅圖片
- B.標記爲ImageSwitcher
- C.按水平方向排列顯示內容1.00/1.00
- D.不能使用適配器
- 關於選項卡下列不正確的說法是 C
- A.需要爲每一個標籤頁創建一個佈局文件
- B.TabHost是選項卡的標記
- C.選項卡會增加窗體的數量1.00/1.00
- D.選項卡的好處是將頁面分成多個標籤頁
- 滾動視圖 C
- A.一般在.XML文件中創建滾動視圖
- B.滾動視圖可以放置多個組件
- C.使用滾動視圖可以瀏覽比窗口大的頁面1.00/1.00
- D.滾動視圖實現了翻頁功能
- 自動完成文本框 B
- A.使用EditText標記
- B.在輸入了一些文字後提供一相關的可選項
- C.可以使用entris設置可選項
- D.可以自動填充文本框
- 列表選擇框的標籤是 D
- A.ArrayAdaptor
- B.ListView
- C.List
- D.Spinner