系出名門Android(8) - 控件(View)之TextSwitcher, Gallery...

系出名門Android(8) - 控件(View)之TextSwitcher, Gallery, ImageSwitcher, GridView, ListView,

ExpandableList java

做者:webabcd 介紹 在 Android 中使用各類控件(View) TextSwitcher - 文字轉換器控件(改變文字時增長⼀些動畫效果) Gallery - 縮略圖瀏覽器控件 ImageSwitcher - 圖片轉換器控件(改變圖片時增長⼀些動畫效果) GridView - 網格控件 ListView - 列表控件 ExpandableList - 支持展開/收縮功能的列表控件 一、TextSwitcher 的 Demo textswitcher.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">     <Button android:id="@+id/btnChange" android:layout_width="wrap_content"         android:layout_height="wrap_content" android:text="改變文字" />     <!--        TextSwitcher - 文字轉換器控件(改變文字時增長⼀些動畫效果)     -->     <TextSwitcher android:id="@+id/textSwitcher"         android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> _TextSwitcher.java 代碼 package com.webabcd.view; import java.util.Random; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.Button; import android.widget.TextSwitcher; import android.widget.TextView; import android.widget.ViewSwitcher; public class _TextSwitcher extends Activity implements ViewSwitcher.ViewFactory {     @Override     protected void onCreate(Bundle savedInstanceState) {         // TODO Auto-generated method stub         super.onCreate(savedInstanceState);         this.setContentView(R.layout.textswithcer);         setTitle("TextSwithcer");         final TextSwitcher switcher = (TextSwitcher) findViewById(R.id.textSwitcher);         // 指定轉換器的 ViewSwitcher.ViewFactory         switcher.setFactory(this);                  // 設置淡入和淡出的動畫效果         Animation in = AnimationUtils.loadAnimation(this, android.R.anim.fade_in);         Animation out = AnimationUtils.loadAnimation(this, android.R.anim.fade_out);         switcher.setInAnimation(in);         switcher.setOutAnimation(out);         // 單擊⼀次按鈕改變⼀次文字         Button btnChange = (Button) this.findViewById(R.id.btnChange);         btnChange.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View v) {                 switcher.setText(String.valueOf(new Random().nextInt()));             }         });     }     // 重寫 ViewSwitcher.ViewFactory 的 makeView(),返回⼀個 View     @Override     public View makeView() {         TextView textView = new TextView(this);         textView.setTextSize(36);         return textView;     } } 二、Gallery 的 Demo gallery.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">     <!--        Gallery - 縮略圖瀏覽器控件             spacing - 縮略圖列表中各個縮略圖之間的間距     -->     <Gallery android:id="@+id/gallery" android:layout_width="fill_parent"         android:layout_height="wrap_content" android:spacing="20px" /> </LinearLayout> _Gallery.java 代碼 package com.webabcd.view; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Gallery; import android.widget.ImageView; import android.widget.Toast; import android.widget.Gallery.LayoutParams; public class _Gallery extends Activity {     @Override     protected void onCreate(Bundle savedInstanceState) {         // TODO Auto-generated method stub         super.onCreate(savedInstanceState);         this.setContentView(R.layout.gallery);         setTitle("Gallery");         Gallery gallery = (Gallery) findViewById(R.id.gallery);         // 爲縮略圖瀏覽器指定⼀個適配器         gallery.setAdapter(new ImageAdapter(this));         // 響應 在縮略圖列表上選中某個縮略圖後的 事件         gallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {             @Override             public void onItemSelected(AdapterView<?> parent, View v,                     int position, long id) {                 Toast.makeText(_Gallery.this, String.valueOf(position), Toast.LENGTH_SHORT).show();             }             @Override             public void onNothingSelected(AdapterView<?> arg0) {             }         });     }     // 繼承 BaseAdapter 用以實現自定義的圖片適配器     public class ImageAdapter extends BaseAdapter {         private Context mContext;         public ImageAdapter(Context context) {             mContext = context;         }         public int getCount() {             return mThumbIds.length;         }         public Object getItem(int position) {             return position;         }         public long getItemId(int position) {             return position;         }         public View getView(int position, View convertView, ViewGroup parent) {             ImageView image = new ImageView(mContext);             image.setImageResource(mThumbIds[position]);             image.setAdjustViewBounds(true);             image.setLayoutParams(new Gallery.LayoutParams(                     LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));             return image;         }     }     // 須要顯示的圖片集合     private Integer[] mThumbIds = { R.drawable.icon01, R.drawable.icon02,             R.drawable.icon03, R.drawable.icon04, R.drawable.icon05 }; } 三、ImageSwitcher 的 Demo imageswitcher.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">     <Gallery android:id="@+id/gallery" android:layout_width="fill_parent"         android:layout_height="wrap_content" android:spacing="20px" />     <!--        ImageSwitcher - 圖片轉換器控件(改變圖片時增長⼀些動畫效果)     -->     <ImageSwitcher android:id="@+id/imageSwitcher"         android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> _ImageSwitcher.java 代碼 package com.webabcd.view; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.view.animation.AnimationUtils; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Gallery; import android.widget.ImageSwitcher; import android.widget.ImageView; import android.widget.ViewSwitcher; import android.widget.Gallery.LayoutParams; // 圖片轉換器的使用基本同文字轉換器 // 如下是⼀個用 ImageSwitcher + Gallery 實現的經典的圖片瀏覽器的 Demo public class _ImageSwitcher extends Activity implements         ViewSwitcher.ViewFactory {     private ImageSwitcher mSwitcher;     @Override     protected void onCreate(Bundle savedInstanceState) {         // TODO Auto-generated method stub         super.onCreate(savedInstanceState);         this.setContentView(R.layout.imageswithcer);         setTitle("ImageSwithcer");         mSwitcher = (ImageSwitcher) findViewById(R.id.imageSwitcher);         mSwitcher.setFactory(this);         mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,                 android.R.anim.fade_in));         mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,                 android.R.anim.fade_out));         Gallery gallery = (Gallery) findViewById(R.id.gallery);         gallery.setAdapter(new ImageAdapter(this));         gallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {             @Override             public void onItemSelected(AdapterView<?> parent, View v,                     int position, long id) {                 mSwitcher.setImageResource(mImageIds[position]);             }             @Override             public void onNothingSelected(AdapterView<?> arg0) {             }         });     }     public class ImageAdapter extends BaseAdapter {         private Context mContext;         public ImageAdapter(Context context) {             mContext = context;         }         public int getCount() {             return mThumbIds.length;         }         public Object getItem(int position) {             return position;         }         public long getItemId(int position) {             return position;         }         public View getView(int position, View convertView, ViewGroup parent) {             ImageView image = new ImageView(mContext);             image.setImageResource(mThumbIds[position]);             image.setAdjustViewBounds(true);             image.setLayoutParams(new Gallery.LayoutParams(                     LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));             return image;         }     }     private Integer[] mThumbIds = { R.drawable.icon01, R.drawable.icon02,             R.drawable.icon03, R.drawable.icon04, R.drawable.icon05 };     private Integer[] mImageIds = { R.drawable.icon01, R.drawable.icon02,             R.drawable.icon03, R.drawable.icon04, R.drawable.icon05 };     @Override     public View makeView() {         ImageView image = new ImageView(this);         image.setMinimumHeight(200);         image.setMinimumWidth(200);         image.setScaleType(ImageView.ScaleType.FIT_CENTER);         image.setLayoutParams(new ImageSwitcher.LayoutParams(                 LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));         return image;     } } 四、GridView 的 Demo gridview.xml 代碼 <?xml version="1.0" encoding="utf-8"?> <!--    GridView - 網格控件         numColumns="auto_fit" - 列數自適應         stretchMode - 縮放模式(stretchMode="columnWidth" - 縮放與列寬大小同步) --> <GridView xmlns:android="http://schemas.android.com/apk/res/android"     android:id="@+id/gridView" android:layout_width="fill_parent"     android:layout_height="fill_parent" android:padding="10px"     android:verticalSpacing="10px" android:horizontalSpacing="10px"     android:numColumns="auto_fit" android:columnWidth="60px"     android:stretchMode="columnWidth" android:gravity="center"> </GridView> _GridView.java 代碼 package com.webabcd.view; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ImageView; public class _GridView extends Activity {     @Override     protected void onCreate(Bundle savedInstanceState) {         // TODO Auto-generated method stub         super.onCreate(savedInstanceState);         this.setContentView(R.layout.gridview);         setTitle("GridView");         GridView gridView = (GridView) findViewById(R.id.gridView);         // 指定網格控件的適配器爲自定義的圖片適配器         gridView.setAdapter(new ImageAdapter(this));     }     // 自定義的圖片適配器     public class ImageAdapter extends BaseAdapter {         private Context mContext;         public ImageAdapter(Context context) {             mContext = context;         }         public int getCount() {             return mThumbIds.length;         }         public Object getItem(int position) {             return position;         }         public long getItemId(int position) {             return position;         }         public View getView(int position, View convertView, ViewGroup parent) {             ImageView imageView;             if (convertView == null) {                 imageView = new ImageView(mContext);                 imageView.setLayoutParams(new GridView.LayoutParams(48, 48));                 imageView.setAdjustViewBounds(false);                 imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);                 imageView.setPadding(5, 5, 5, 5);             } else {                 imageView = (ImageView) convertView;             }             imageView.setImageResource(mThumbIds[position]);             return imageView;         }         // 網格控件所需圖片數據的數據源         private Integer[] mThumbIds = { R.drawable.icon01, R.drawable.icon02,                 R.drawable.icon03, R.drawable.icon04, R.drawable.icon05 };     } } 五、ListView 的 Demo main_list_adapter.xml 代碼 <?xml version="1.0" encoding="utf-8"?> <!--    自定義列表適配器的 layout --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="horizontal" android:layout_width="fill_parent"     android:layout_height="fill_parent">          <TextView android:id="@+id/text" android:layout_width="wrap_content"         android:layout_height="wrap_content" android:textSize="16sp">     </TextView>      </LinearLayout> MainListAdapter.java 代碼 package com.webabcd.view; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; // 繼承 BaseAdapter 以實現自定義的列表適配器 public class MainListAdapter extends BaseAdapter {     private LayoutInflater mInflater;     private List<String> mData;     public MainListAdapter(Context context, List<String> data) {         mInflater = LayoutInflater.from(context);         mData = data;     }     @Override     public int getCount() {         return mData.size();     }     @Override     public Object getItem(int position) {         return mData.get(position);     }     @Override     public long getItemId(int position) {         return position;     }     @Override     public View getView(int position, View convertView, ViewGroup parent) {         TextView text;         if (convertView == null) {             // 指定⼀個 layout 做爲自定義列表適配器的 layout             convertView = mInflater.inflate(R.layout.main_list_adapter, null);             text = (TextView) convertView.findViewById(R.id.text);             convertView.setTag(text);         } else {             text = (TextView) convertView.getTag();         }                  String mItem = mData.get(position);         text.setText(mItem);                  return convertView;     } } Main.java 代碼 package com.webabcd.view; import java.util.ArrayList; import java.util.List; import android.app.ListActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.ListView; // 此處要繼承 ListActivity ,用以實現 ListView 的功能 public class Main extends ListActivity {          private List<String> mData;          /** Called when the activity is first created. */     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setTheme(android.R.style.Theme_Light);         setContentView(R.layout.main);                 mData = getData();                  // 使用自定義的列表適配器來展示數據         // 使用自定義的列表適配器來展示數據         MainListAdapter adapter = new MainListAdapter(this, mData);                  // 如需使用系統內置的列表適配器,則能夠使用相似以下的方法         //  ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, mData);                  this.setListAdapter(adapter);     }     // ListView 的數據源     private List<String> getData()    {         List<String> items = new ArrayList<String>();                  items.add("TextView");         items.add("Button");         items.add("ImageButton");         items.add("ImageView");         items.add("CheckBox");         items.add("RadioButton");         items.add("AnalogClock");         items.add("DigitalClock");         items.add("DatePicker");         items.add("TimePicker");         items.add("ToggleButton");         items.add("EditText");         items.add("ProgressBar");         items.add("SeekBar");         items.add("AutoCompleteTextView");         items.add("MultiAutoCompleteTextView");         items.add("ZoomControls");         items.add("Include");         items.add("VideoView");         items.add("WebView");         items.add("RatingBar");         items.add("Tab");         items.add("Spinner");         items.add("Chronometer");         items.add("ScrollView");         items.add("TextSwitcher");         items.add("ListView");         items.add("Gallery");         items.add("ImageSwitcher");         items.add("GridView");         items.add("ExpandableList");                   return items;     }     // ListView 中某項被選中後的邏輯     @Override     protected void onListItemClick(ListView l, View v, int position, long id) {         Intent intent = new Intent();         intent.setClassName(this, "com.webabcd.view._" + mData.get(position));         startActivityForResult(intent, 0);     } } 六、ExpandableList 的 Demo _ExpandableList.java 代碼 package com.webabcd.view; import android.app.ExpandableListActivity; import android.os.Bundle; import android.view.ContextMenu; import android.view.Gravity; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.ContextMenu.ContextMenuInfo; import android.widget.AbsListView; import android.widget.BaseExpandableListAdapter; import android.widget.ExpandableListAdapter; import android.widget.ExpandableListView; import android.widget.TextView; import android.widget.Toast; import android.widget.ExpandableListView.ExpandableListContextMenuInfo; // ExpandableList - 可展開/收縮列表 // 繼承 ExpandableListActivity 以實現列表的可展開/收縮的功能 public class _ExpandableList extends ExpandableListActivity {          private ExpandableListAdapter mAdapter;     @Override     protected void onCreate(Bundle savedInstanceState) {         // TODO Auto-generated method stub         super.onCreate(savedInstanceState);         setTitle("ExpandableList");                  mAdapter = new MyExpandableListAdapter();         setListAdapter(mAdapter);         registerForContextMenu(this.getExpandableListView());     }     // 爲列表的每⼀項建立上下文菜單(即長按後呼出的菜單)      @Override     public void onCreateContextMenu(ContextMenu menu, View v,             ContextMenuInfo menuInfo) {         menu.setHeaderTitle("ContextMenu");         menu.add(0, 0, 0, "ContextMenu");     }     // 單擊上下文菜單後的邏輯     @Override     public boolean onContextItemSelected(MenuItem item) {         ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo();         String title = ((TextView) info.targetView).getText().toString();         int type = ExpandableListView.getPackedPositionType(info.packedPosition);         if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {             int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);             int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition);                          Toast.makeText(this, title + " - Group Index: " + groupPos + " Child Index: " + childPos, Toast.LENGTH_SHORT).show();                          return true;         } else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {             int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);             Toast.makeText(this, title + " - Group Index: " + groupPos, Toast.LENGTH_SHORT).show();                          return true;         }         return false;     }     public class MyExpandableListAdapter extends BaseExpandableListAdapter {         // 父列表數據         private String[] groups =          {              "group1",              "group2",              "group3",             "group4"          };         // 子列表數據         private String[][] children =          {             { "child1" },             { "child1", "child2" },             { "child1", "child2", "child3" },             { "child1", "child2", "child3", "child4" }         };                  @Override         public Object getChild(int groupPosition, int childPosition) {             return children[groupPosition][childPosition];         }         @Override         public long getChildId(int groupPosition, int childPosition) {             return childPosition;         }         @Override         public int getChildrenCount(int groupPosition) {             return children[groupPosition].length;         }         // 取子列表中的某⼀項的 View         @Override         public View getChildView(int groupPosition, int childPosition,                 boolean isLastChild, View convertView, ViewGroup parent) {             TextView textView = getGenericView();             textView.setText(getChild(groupPosition, childPosition).toString());             return textView;         }         @Override         public Object getGroup(int groupPosition) {             return groups[groupPosition];         }         @Override         public int getGroupCount() {             return groups.length;         }         @Override         public long getGroupId(int groupPosition) {             return groupPosition;         }         // 取父列表中的某⼀項的 View         @Override         public View getGroupView(int groupPosition, boolean isExpanded,                 View convertView, ViewGroup parent) {             TextView textView = getGenericView();             textView.setText(getGroup(groupPosition).toString());             return textView;         }         @Override         public boolean hasStableIds() {             return true;         }         @Override         public boolean isChildSelectable(int groupPosition, int childPosition) {             return true;         }                          // 獲取某⼀項的 View 的邏輯         private TextView getGenericView() {             AbsListView.LayoutParams lp = new AbsListView.LayoutParams(                     ViewGroup.LayoutParams.FILL_PARENT, 48);             TextView textView = new TextView(_ExpandableList.this);             textView.setLayoutParams(lp);             textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);             textView.setPadding(32, 0, 0, 0);             return textView;         }     } } OK
相關文章
相關標籤/搜索