android高階介面
RadioButton與CheckBox
- RadioGroup 和RadioButton
RadioButton一定要放在RadioGroup
Checked=“true”當按鈕選中後
勾選事件監聽
OnCheckedChangeListener
練習
石頭,剪刀,布
MainActivity.java
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener {
TextView tv;
Button btn_begin;
RadioButton radiobtn[]=new RadioButton[3];
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
radiobtn[0] =(RadioButton) findViewById(R.id.radio0);
radiobtn[1]=(RadioButton) findViewById(R.id.radio1);
radiobtn[2]=(RadioButton) findViewById(R.id.radio2);
tv=(TextView) findViewById(R.id.textView1);
btn_begin=(Button) findViewById(R.id.btn_begin);
btn_begin.setOnClickListener(this );
}
@Override
public void onClick(View v) {
//生成隨機數
int random=(int) (Math.random()*10+10);
new AsyncTask<Integer, Integer, String>() {
//後臺執行緒
@Override
protected String doInBackground(Integer... params) {
int num=params[0];
int i=0;
while(i<num){
i++;
publishProgress(i%radiobtn.length);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return radiobtn[i%radiobtn.length].getText().toString();
}
protected void onProgressUpdate(Integer... values) {
int count=values[0];
radiobtn[count].setChecked(true);
};
protected void onPostExecute(String result) {
super.onPostExecute(result);
tv.setText(result);
};
}.execute(random);
}
}
Activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.android_829_radiobutton.MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="70dp"
android:textSize="30sp"
android:text="猜拳" />
<RadioGroup
android:id="@+id/radioGroup1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp" >
<RadioButton
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="石頭" />
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="剪刀" />
<RadioButton
android:id="@+id/radio2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="布" />
</RadioGroup>
<Button
android:id="@+id/btn_begin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/radioGroup1"
android:layout_centerHorizontal="true"
android:layout_marginTop="27dp"
android:text="開始" />
</RelativeLayout>
選單Menu
PopupMenu
MainActivity.java
import android.app.Activity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.PopupMenu;
import android.widget.PopupMenu.OnMenuItemClickListener;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//建立PopupMenu
PopupMenu pop=new PopupMenu(MainActivity.this, v);
//解析檔案
getMenuInflater().inflate(R.menu.main, pop.getMenu());
//顯示
pop.show();
//監聽PopupMenu選單
pop.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
int id=item.getItemId();
if(id==R.id.item2){
finish();
}
return false;
}
});
}
});
}
}
main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.android_829_menu.MainActivity" >
<item
android:id="@+id/item0"
android:orderInCategory="100"
android:showAsAction="never"
android:title="登入"/>
<item
android:id="@+id/item1"
android:orderInCategory="100"
android:showAsAction="never"
android:title="註冊"/>
<item
android:id="@+id/item2"
android:orderInCategory="100"
android:showAsAction="never"
android:title="退出"/>
</menu>
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.android_829_menu.MainActivity" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="137dp"
android:text="Button" />
</RelativeLayout>
OptionMenu
點選menu按鈕,顯示選單
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
//新增子選單
SubMenu sub1=menu.addSubMenu("設定");
sub1.add(1,SET_ITEM1,300,"設定聲音");
sub1.add(1,SET_ITEM2,400,"設定桌面");
SubMenu sub2=menu.addSubMenu("選擇");
sub2.add(1,SET_ITEM3,300,"選擇一");
sub2.add(1,SET_ITEM4,400,"選擇二");
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.item0) {
return true;
}else if(id==R.id.item1){
finish();
return true;
}else if(id==R.id.item2){
return true;
}
return super.onOptionsItemSelected(item);
}
ContextMenu
長按控制元件,顯示選單
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView) findViewById(R.id.textView1);
//註冊tv,當用戶長按tv時,觸發上下文選單
registerForContextMenu(tv);
}
//建立上下文選單
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
menu.addSubMenu(0, 1, 0, "收藏");
menu.addSubMenu(0, 2, 0, "刪除");
Toast.makeText(MainActivity.this, "長按後", Toast.LENGTH_SHORT).show();
}
@Override
public boolean onContextItemSelected(MenuItem item) {
if(item.getItemId() == 1){
Toast.makeText(this, "收藏", Toast.LENGTH_SHORT).show();
}else if(item.getItemId() == 2){
Toast.makeText(this, "刪除", Toast.LENGTH_SHORT).show();
}
return super.onContextItemSelected(item);
}
對話方塊
對話方塊是在當前介面彈出的一個小視窗,用於顯示重要提示資訊,提示使用者輸入資訊,確認資訊,或者顯示某種狀態,如下載進度,退出提示等等。一般情況下,使用者要與對話方塊進行互動,然後返回到被遮蓋的介面以繼續運行當前的應用程式。
AlertDialog常用方法
要建立一個AlertDialog就要用到AlertDialog.Builder中的create()方法
1. setTitle:為對話方塊設定標題
2. setIcon:為對話方塊設定圖示
3. setMessage:為對話方塊設定內容
4. setView:為對話方塊設定自定義樣式
5. setItems:設定對話方塊要顯示的一個list
6. setMutiChoiceItems:設定對話方塊顯示一系列的複選框
7. setSingleChoiceItems:設定單選按鈕
8. setNeutralButton:普通按鈕
9. setPositiveButton:確認按鈕
10. setNegativeButton:取消按鈕
ProgressDialog
MainActivity.java
import android.app.Activity;
import android.app.ProgressDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
public class MainActivity extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(this);
findViewById(R.id.button2).setOnClickListener(this);
findViewById(R.id.button3).setOnClickListener(this);
findViewById(R.id.button4).setOnClickListener(this);
findViewById(R.id.button5).setOnClickListener(this);
findViewById(R.id.button6).setOnClickListener(this);
}
@Override
public void onClick(View v) {
int id=v.getId();
if(id==R.id.button1){
//預設對話方塊
onCreateNormalDialog();
}else if(id==R.id.button2){
//單選按鈕對話方塊
onCreateSingleChoiceItems();
}else if(id==R.id.button3){
//多選按鈕對話方塊
onCreateMutiChoiceItems();
}else if(id==R.id.button4){
//列表按鈕對話方塊
onCreateItems();
}else if(id==R.id.button5){
//自定義對話方塊
createDialog();
}else if(id==R.id.button6){
CreateProgressDialog();
}
}
private void CreateProgressDialog() {
final ProgressDialog pd=ProgressDialog.show(this, "搜尋網路", "請耐心等待...");
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//結束ProgressDialog
pd.dismiss();
}
}).start();
}
private void createDialog() {
Builder builder=new Builder(this);
builder.setTitle("註冊");
//自定義佈局
View view =LayoutInflater.from(this).inflate(R.layout.register, null);
builder.setView(view);
builder.setPositiveButton("確定", null);
builder.setNegativeButton("取消", null);
builder.create();
builder.show();
}
private void onCreateItems() {
Builder b=new Builder(this);
b.setIcon(R.drawable.ic_launcher);
b.setTitle("部門成員列表");
String items[]={"專案經理","策劃","測試","美工","程式設計師"};
b.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.d("Tag", "which="+which);
}
});
b.create();
b.show();
}
private void onCreateMutiChoiceItems() {
Builder b=new Builder(this);
b.setTitle("愛好");
b.setIcon(R.drawable.ic_launcher);
String items[]={"籃球","足球","乒乓球","排球"};
b.setMultiChoiceItems(items, null, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
Log.d("Tag", "which="+which+",isChecked="+isChecked);
}
});
b.create();
b.show();
}
private void onCreateSingleChoiceItems() {
Builder builder =new Builder(this);
builder.setTitle("請選擇性別");
builder.setIcon(R.drawable.ic_launcher);
String items[]={"男","女","保密"};
builder.setSingleChoiceItems(items, 2, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Log.d("Tag", "which="+which);
}
});
builder.create();
builder.show();
}
private void onCreateNormalDialog() {
Builder builder=new Builder(this);
builder.setTitle("退出");
builder.setIcon(R.drawable.ic_launcher);
builder.setMessage("確定要退出嗎?");
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
builder.setNeutralButton("中間", null);
builder.setNegativeButton("取消", null);
builder.create();
builder.show();
}
}
Register.xml
<?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" >
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="輸入使用者名稱">
<requestFocus />
</EditText>
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPassword"
android:hint="輸入密碼" />
<EditText
android:id="@+id/editText3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPassword"
android:hint="輸入密碼"/>
</LinearLayout>
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.android_829_alertdialog.MainActivity" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:orientation="vertical" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="普通對話方塊" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="單選按鈕對話方塊" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="多選按鈕對話方塊" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="列表對話方塊" />
<Button
android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="自定義對話方塊" />
<Button
android:id="@+id/button6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="進度條對話方塊" />
</LinearLayout>
</RelativeLayout>
PopupWindow
PopupWindow這個類用來實現一個彈出框,可以使用任意佈局View作為其內容,這個彈出框懸浮在當前activity之上。
構造PopupWindow
注意:生成一個PopupWindow必須設定三個條件:View contentView,int Width,int height, 少任意一個就不能彈出PopupWindow。