### 1、TextView
android:singleLine="true" ? //設置單行顯示(默認可折行顯示)
android:gravity= "right|center_vertical" ? //設置文本的位置(居右且居中)
### 2、EditView
android:hint="請輸入姓名" ? ? ?//設置陰影提示屬性
android:editable=“false” ? ? ? ? //設置不可編輯
另外,在ADT控件下的Text Fields中,有各種各樣的EditView(也就是指定了輸入格式,比如android:inputType="textPassword")。
### 3、ImageView
(1)屬性:android:src = "@drawable/ ??" ? ——ImageView控件的內容圖片;
android:background = "@drawable/ ??" ? ——ImageView控件的背景圖片;
android:background = "#f0f0f0" ?
——ImageView控件的背景的RGB顏色;
(2)?.setBackgroundResource(R.drawable.XXX);
### 4、Button 和?ImageButton
(1)Button有text屬性,而ImageButton沒有;
(2)ImageButton有 src屬性,而Button沒有;(可以做一個有文本內容的圖片)
(3)兩者都有background屬性;
(4)兩者都有點擊效果;.setOnClickListenter() ?
—— ?A.匿名內部類的實現(new View.OnClickListener(){ ?...onClick()... ? }; );
—— B.獨立類的實現*( 自定義 MyOnClicklistener 點擊事件監聽類,讓該類實現implements OnClickListener接口,重寫onClick方法);這種做法的好處是:如果有很多個按鈕,它們要執行一個共同的事件,還要執行自己特定的事件。
~~~
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(new MyOnClickListener(){ //自定義的監聽類
@Override
public void onClick(View v) {
// 調用父類的onClick事件
super.onClick(v);
// 執行自己特定的任務
Toast.makeText(MainActivity.this, "這是子類的事件邏輯執行", 1).show();
}
});
}
//自定義監聽點擊事件的外部類
class MyOnClickListener implements OnClickListener{
@Override
public void onClick(View v) {
// 這是父類的onClick方法——公有的操作,減少代碼的冗余
Log.i("parent", "這是父類的事件邏輯執行");
v.setAlpha(0.5); //設置透明度
}
}
........
}
~~~
—— ?C.還可以是 本類(this) 直接實現implements OnClickListener接口,重寫onClick方法。
### 5、多個TextView實現跑馬燈——自定義個性化控件
(1)設置TextView屬性
~~~
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
~~~
(2)實現繼承自TextView的自定義類
~~~
public class Marquee extends TextView {
public Marquee(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public Marquee(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public Marquee(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
@ExportedProperty(category = "focus")
public boolean isFocused() {
// TODO Auto-generated method stub
return true; //設置return true。不斷變換焦點
}
}
~~~
(3)使用自定義控件——com.example.testlongtext.Marquee
~~~
<!-- 多個控件跑馬燈 -->
<com.example.testlongtext.Marquee
android:id="@+id/te1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:text="@string/hello_world" />
<com.example.testlongtext.Marquee
android:id="@+id/te2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:text="@string/hello_world" />
~~~
### 6、AutoCompleteTextView?
(1)屬性?android:hint = "請輸入關鍵字"
android:completionThreshold = "2" ? ? ? ? ?//設置輸入多少字符時自動匹配
(2)數據源:匹配文本框輸入內容的數據源
~~~
private String[] resourceData={"C","C++","C#","C-Object","java SE","java EE","java-android"}; //初始化數據源
~~~
(3)適配器:適配下拉列表的內容(數據源)
~~~
private AutoCompleteTextView MyAutoCompleteTextView ;
ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,android.R.layout.simple_list_item_1,resourceData); //數據源填充到適配器
~~~
(4)將適配器adapter 與 當前?AutoCompleteTextView 進行綁定
~~~
MyAutoCompleteTextView .setAdapter(adapter); //綁定
~~~
### 7、MultiAutoCompleteTextView
基本類似上面,但是因為可以匹配多個字符串,所以可以設置分隔符(以提醒什么時候開始下一次匹配)
~~~
myMultiAutoCompleteTextView.setTokenizer( new MultiAutoCompleteTextView.CommaTokenizer()); //設置以逗號為分隔符
~~~
### 8、ToggleButton
(1)屬性:android:checked="true"
android:textOn="開啟" ? ? //設置開、關的文本
android:textOff="關閉"
(2)監聽器:ToggleButton.setOnCheckedChangeListener(this);
### 9、CheckBox
android:checked="false" ? ? ? ?//是否被選中
監聽器:.setOnCheckedChangeListener(listener); ? ? //監聽是否被選中
CheckBox.isChecked()——CheckBox.getText().toString()
### 10、RadioButton 和?RadioGroup(多選一機制)
android:checked="false" ? ? ? ?//是否被選中
RadioGroup..setOnCheckedChangeListener(listener); ? ? //監聽是否被選中 ? (此時,如果是本類實現,implements OnCheckedChangeListener)
### 11、ListView顯示信息列表
(1)數據適配器(ArrayAdapter、SimpleAdapter); ?——把復雜數據(數組、列表、數據庫等)填充到指定視圖界面上;連接數據源和視圖界面的橋梁;
過程:新建適配器(聲明、配置)——>添加數據源到適配器——>視圖加載適配器;
ArrayAdapter(上下文,當前ListView加載每一個列表項所對應的布局文件,數據源);——數組適配器
SimpleAdapter(上下文,數據源?List<? extends Map<String, ?>> data(一個Map所組成的List集合)、列表項布局文件ID、Map的鍵名、綁定數據視圖中的ID(與from成對應關系));
(2)監聽器(OnScrollListenter、OnItemClickListenter);? ? ? ?
(3)適配器數據的刷新;
notifyDataSetChanged(); ?——動態更新視圖中所包含的數據
### 12、DatePicker 和 TimePicker 顯示當前日期和時間
~~~
//獲取日歷的一個對象
calendar=Calendar.getInstance();
//獲取年月日時分的信息
year=calendar.get(Calendar.YEAR);
month=calendar.get(Calendar.MONTH)+1; //注意:Calendar類的月份是按0開始計算的
day=calendar.get(Calendar.DAY_OF_MONTH);
hour=calendar.get(Calendar.HOUR_OF_DAY);
minute=calendar.get(Calendar.MINUTE);
//datePicker初始化并設置監聽器(以init方法)
datePicker.init(year, calendar.get(Calendar.MONTH), day, new OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
setTitle(year+"-"+(monthOfYear+1)+"-"+dayOfMonth);
}
});
//timePicker設置監聽器(直接設置)
timePicker.setOnTimeChangedListener(new OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
// TODO Auto-generated method stub
setTitle(hourOfDay+":"+minute);
}
});
//用對話框形式展示日期、時間
/*new DatePickerDialog(this, new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
setTitle(year+"-"+(monthOfYear+1)+"-"+dayOfMonth);
}
}, year, calendar.get(Calendar.MONTH), day).show();*/
new TimePickerDialog(this, new OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// TODO Auto-generated method stub
setTitle(hourOfDay+":"+minute);
}
}, hour, minute, true).show();
~~~
### 13、GridView表格形式顯示多個組件

屬性:
~~~
android:numColumns="3" //每行顯示三列
android:horizontalSpacing="10dp" //設置列間距
android:verticalSpacing="10dp" //設置行間距
~~~
實現代碼:
~~~
public class MainActivity extends Activity implements OnItemClickListener{
private GridView gridView;
private List<Map<String, Object>> dataList;
private int[] icon = { R.drawable.a, R.drawable.b, R.drawable.c,
R.drawable.d, R.drawable.e, R.drawable.f, R.drawable.erttre,
R.drawable.erwrw, R.drawable.lanqiu, R.drawable.niubi,
R.drawable.psb, R.drawable.qqq };
private String[] iconName = { "格1", "格2", "格3", "格4", "格5", "格6", "格7",
"格8", "格9", "格10", "格11", "格12", };
private SimpleAdapter simpleAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView = (GridView) findViewById(R.id.gridView);
// 1、準備數據源
// 2、新建適配器
// 3、GridView加載適配器
// 4、GridView配置時間監聽器(OnItemClickListenter)
dataList = new ArrayList<Map<String, Object>>();
//getData();
simpleAdapter = new SimpleAdapter(this, getData(),
R.layout.gridview_item, new String[] { "image", "text" },
new int[] { R.id.image, R.id.text });
gridView.setAdapter(simpleAdapter);
gridView.setOnItemClickListener(this);
}
private List<Map<String, Object>> getData() {
// TODO Auto-generated method stub
for (int i = 0; i < icon.length; i++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("image", icon[i]);
map.put("text", iconName[i]);
dataList.add(map);
}
return dataList;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
Toast.makeText(this, "我是"+iconName[position], Toast.LENGTH_LONG).show();
}
}
~~~
### 14、Spinner實現下拉列表


(1)系統默認
~~~
public class MainActivity extends Activity implements OnItemSelectedListener{
private TextView textView;
private Spinner spinner;
private List<String> list;
private ArrayAdapter<String> arrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(TextView) findViewById(R.id.text);
spinner=(Spinner) findViewById(R.id.spinner);
textView.setText("您選擇城市是北京");
//1、設置數據源
list=new ArrayList<String>();
list.add("北京");
list.add("上海");
list.add("廣州");
list.add("深圳");
//2、新建ArrayAdapter(數組適配器)
arrayAdapter=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
//3、arrayAdapter設置一個下拉列表樣式
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//4、spinner加載適配器
spinner.setAdapter(arrayAdapter);
//5、設置spinner監聽器
spinner.setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
String cityName=arrayAdapter.getItem(position);
//String cityName=list.get(position)
textView.setText("您選擇的城市是"+cityName);
}
}
~~~
(2)自定義下拉樣式
利用SimpleAdapter。
- 前言
- Java內部類
- 從一個View向一個Activity跳轉
- Android 與 SQLite
- Android工程A依賴B,B依賴C
- Android重要控件概覽(上)
- Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
- Android布局概覽
- 動態引用APK文件
- Android重要控件概覽(中)
- Android重要控件概覽(下)
- Gallery和ImageSwitcher
- Android之Toast
- Android之Dialog
- Android之Notification
- Android之Menu
- Android Menu中android:showAsAction屬性
- Android SharedPreferences存儲數據的使用方法
- Android手勢識別之GestureDetector
- 不同APP通過SharedPreferences傳遞數據(共享數據)
- 一個自定義的Topbar模板
- 關于Activity回收造成View選中不對應的問題
- Android之Fragment靜態加載