android 控件眾多 , 額 , 具體多少個呢? 貌似有那麼幾十個吧,也沒做個統計,嘿嘿!......
有木有朋友感覺寫了那麼長時間的android代碼,有時候想寫點自己的東西的時候卻發現自己好像離不開網絡耶,什麼都需要先到網絡上遨游一番才能解決自己的問題。思前想後,個人覺得還是有必要鞏固一下自己學習過的東西——想想以前這些東西,自己都寫過一遍了,但是折騰一段時間下來都不知道放哪裡去了........
好了,廢話不多說了,這次准備重新學習一下android的常用控件TextView、EditText、AutoCompleteTextView、Button、CalendarView、CheckBox、Chronometer、CompoundButton、DatePicker、DigitalClock、ExpandableListView、Gallery、GridView、HorizontalScrollView、ImageButton、ImageSwitcher、ImageView、ListPopupWindow、ListView、MultiAutoCompleteTextView、NumberPicker、PopupMenu、PopupWindow、ProgressBar、QuickContactBadge、RadioButton、RadioGroup、RatingBar、RemoteViews、ScrollView、SearchView、SeekBar、SlidingDarwer、Switch、TableHost、TextClock、TextSwitcher、TimePicker、Toast、ToggleButton、VideoView、ViewFlipper、ViewSwitcher、ZoomButton等控件。
今天的工作了不介紹任何的控件,先將整個框架搭建起來:進入應用,我們將看到一個列表(現在還沒有加入任何東西),每個列表項對應我們將要學習的控件(如:點擊TextView,點擊TextView後,詳細學習TextView)。
下面先開始准備工作,創建一個android工程——SelfdefineWieget,其目錄結構如下:
在創建工程中會讓指定一個MainActivity,將其命名為WidgetMainActivity即可。下面的兩個類ViewData和WidgetsAdapter屬於後面創建的,具體功能後面再解釋。
下面看看ViewData.java類
[java]
import java.util.ArrayList;
final public class ViewData {
public final static ArrayList<ViewData> View_Datas = new ArrayList<ViewData>();
public static final int TEXT_VIEW_ID = 90000;
public static final String TEXT_VIEW_NAME = "TextView";
private static final ViewData mTextView = new ViewData(TEXT_VIEW_NAME,
TEXT_VIEW_ID);
public final String mViewName;
public final int mViewId;
private ViewData(String name, int id) {
mViewName = name;
mViewId = id;
}
static {
View_Datas.add(mTextView);
}
}
這是一個配置類,比較獨立。 *_NAME指定了要學習的控件的名稱,*_ID是為了後面操作方便添加了自定義的ID,一個ID唯一對應一個控件——目前只添加了一個控件(TextView)。
主activity(該Activity就是一個ListView,ListView中每一個item指定了將學習的控件名稱)——WidgetMainActivity.java的內容如下:
[java]
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
public class WidgetMainActivity extends Activity {
private ListView mWidgetNames;
private WidgetsAdapter mWidgetsAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_widget_main);
init();
}
private void init() {
mWidgetsAdapter = new WidgetsAdapter(this);
mWidgetNames = (ListView) findViewById(R.id.widget_list_view);
mWidgetNames.setAdapter(mWidgetsAdapter);
}
}
可以看到這裡使用到了WidgetsAdapter,不急,這就來一探究竟——WidgetsAdapter.java
[java]
import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.xy.zt.selfdefinewieget.data.ViewData;
public class WidgetsAdapter extends BaseAdapter implements OnClickListener {
private Context mContext;
private LayoutInflater mInflater;
ArrayList<ViewData> mLocalData = ViewData.View_Datas;
private int mSelectedItemPos = -1;
public WidgetsAdapter(Context context) {
if (context == null) {
throw new IllegalArgumentException(
"in constructor WidgetsAdapter: context mustn't be null !");
}
mContext = context;
mInflater = LayoutInflater.from(mContext);
}
public int getCount() {
return mLocalData.size();
}
public Object getItem(int position) {
if (position < 0 || position >= mLocalData.size())
return null;
return mLocalData.get(position);
}
public long getItemId(int position) {
if (position < 0 || position >= mLocalData.size())
return -1;
return mLocalData.get(position).mViewId;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.view_list_item_layout,
null);
holder = new ViewHolder();
holder.mListItem = (TextView) convertView
.findViewById(R.id.item_view_name);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
String itemStr = mLocalData.get(position).mViewName;
holder.mListItem.setText(itemStr);
convertView.setOnClickListener(this);
mSelectedItemPos = position;
return convertView;
}
static class ViewHolder {
TextView mListItem;
}
public void onClick(View v) {
int action = mLocalData.get(mSelectedItemPos).mViewId;
handleItemClicked(action);
}
private void handleItemClicked(int action) {
switch (action) {
case ViewData.TEXT_VIEW_ID:
break;
}
}
}
該類將會加載所有的控件信息,並且通過view_list_item_layout(布局文件)顯示到界面上。
注:在這裡使用ListView的OnItemClickListener更好,View.OnClickeListener在某些情況會比較實用(如:相應Item中某個元素的點擊事件)。
在上面我們看到了兩個布局文件view_list_item_layout 和activity_widget_main,他們使用在哪個類參看上面的代碼,下面列舉各布局文件的類容。activity_widget_main.xml
[html]
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff" >
</ListView>
很簡單是吧,對就只有一個控件ListView,用來盛裝各個控件名字的“列表”。view_list_item_layout .xml 該文件指定了ListView中每個Item將如何呈現,其內容如下:
[html]
<?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="wrap_content" >
<TextView
android:id="@+id/item_view_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip"
android:textSize="20sp" />
</LinearLayout>
大概了內容就這樣了,額,對了還是看看AndroidManifest.xml文件(後續在這裡面添加的東西會很多哦*^_^*)
[java]
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xy.zt.selfdefinewieget"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".WidgetMainActivity"
android:label="@string/title_activity_widget_main"
android:theme="@android:style/Theme.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
起步的內容就差不多了(其他的內容都是創建工程時默認生成的)。今天就到這裡了,明天 TextView .