1. 程式人生 > >android高階介面

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。