天天看點

ui 集合

對話框通知(Dialog Notification)

ui 集合

當你的應用需要顯示一個進度條或需要使用者對資訊進行确認時,可以使用對話框來完成。

對話框和菜單一樣,都是由Activity統一管理的,我們隻要重新實作onCreateDialog(int id)傳近來的不同的對話id,初始化并傳回相應的對話框。Activity會将所有你已經初始化的對話框儲存,下次呼出對話框的時候不會重新初始化。是以當需要動态更新我們的對話框時,就需要重新實作onPrepareDialog(int id,Dialog dialog)方法。

下面代碼将打開一個對話框:

ui 集合

new AlertDialog.Builder(this)  

        .setTitle("zyj标題")  

        .setCancelable(false) //設定不能通過“後退”按鈕關閉對話框  

        .setMessage("zyj浏覽我的bolg?")  

        .setPositiveButton("确認",new DialogInterface.OnClickListener(){  

                    public void onClick(DialogInterface dialoginterface, int i){  

                    Uri uri = Uri.parse("http://justsee.iteye.com/");//打開連結  

                    Intent intent = new Intent(Intent.ACTION_VIEW, uri);  

                    startActivity(intent);  

                }  

        })  

        .setNegativeButton("取消", new DialogInterface.OnClickListener() {  

                     public void onClick(DialogInterface dialog, int id) {  

                             dialog.cancel();  

                      }  

            })  

         .show();//顯示對話框  

 上面代碼采用的是一個鍊式調用,像setTitle()、setMessage()這些方法,他們的傳回值都是目前對話框對象。

單選框(RadioButton)

ui 集合

在radio.xml中:

ui 集合

<?xml version="1.0" encoding="utf-8"?>  

<LinearLayout  

  xmlns:android="http://schemas.android.com/apk/res/android"  

   android:orientation="vertical"  

  android:layout_width="match_parent"  

  android:layout_height="match_parent">  

  <RadioGroup android:id="@+id/radioGroup"  

        xmlns:android="http://schemas.android.com/apk/res/android"  

        android:layout_width="wrap_content" android:layout_height="wrap_content">  

        <RadioButton android:id="@+id/small" android:layout_width="wrap_content"  

            android:layout_height="wrap_content" android:text="small" />  

        <RadioButton android:id="@+id/middle"  

            android:layout_width="wrap_content" android:layout_height="wrap_content"  

            android:text="middle" />  

        <RadioButton android:id="@+id/big" android:layout_width="wrap_content"  

            android:layout_height="wrap_content" android:text="big" />  

    </RadioGroup>  

</LinearLayout>  

 在RadioButtonActivity中:

......

// xml實作

  setContentView(R.layout.radio);

  RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radioGroup);

  radioGroup.check(R.id.middle);// 設定成預設選項

  Log.i(TAG,

    "預設選中的是:"

      + ((RadioButton) this.findViewById(radioGroup

        .getCheckedRadioButtonId())).getText()

        .toString());

  radioGroup

    .setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

     public void onCheckedChanged(RadioGroup group, int checkedId) {

      RadioButton radioButton = (RadioButton) findViewById(checkedId);

      Log.i(TAG, String.valueOf(radioButton.getText()));

     }

    });

/*

使用到RadioGroup和RadioButton(單選框),RadioGroup用于對單選框進行分組,相同組内的單選框隻有一個單選框能被選中。(例子代碼請見下方備注欄)

 RadioGroup.check(R.id.dotNet);将id名為dotNet的單選框設定成選中狀态。

(RadioButton) findViewById(radioGroup.getCheckedRadioButtonId());//擷取被選中的單選框。

RadioButton.getText();//擷取單選框的值

調用setOnCheckedChangeListener()方法,處理單選框被選擇事件,把RadioGroup.OnCheckedChangeListener執行個體作為參數傳入

*/

ui 集合

final String[] items = { "海", "陸", "空" };

  new AlertDialog.Builder(this).setTitle("選擇軍隊")

    .setItems(items, new DialogInterface.OnClickListener() {

     public void onClick(DialogInterface dialog, int item) {

      Toast.makeText(getApplicationContext(), items[item],

        Toast.LENGTH_SHORT).show();

    }).show();// 顯示對話框 

ui 集合

final String[] itemsa = { "紅", "黃", "燈" };

  new AlertDialog.Builder(this)

    .setTitle("選擇燈顔色")

    // setSingleChoiceItems()的第二個參數是設定預設選項,選項索引從0開始,-1代表不選擇任何選項。

    .setSingleChoiceItems(itemsa, 1,

      new DialogInterface.OnClickListener() {

       public void onClick(DialogInterface dialog, int item) {

        Toast.makeText(getApplicationContext(),itemsa[item], Toast.LENGTH_SHORT).show();dialog.cancel();

       }

      }).show();

 多選框(CheckBox)

ui 集合

checkbox.xml界面

ui 集合

  android:layout_width="wrap_content"  

  android:layout_height="wrap_content">  

  <CheckBox android:id="@+id/checkboxjava"  

    android:layout_width="wrap_content"  

    android:layout_height="wrap_content"  

    android:text="java" />  

  <CheckBox android:id="@+id/checkboxdotNet"  

    android:text="dotNet" />  

  <CheckBox android:id="@+id/checkboxphp"  

    android:text="PHP" />  

    <Button android:id="@+id/checkboxButton"  

    android:layout_width="fill_parent"  

    android:text="擷取值" />  

  CheckBoxActivity中

ui 集合

............................  

public class CheckBoxActivity extends Activity {  

    private static final String TAG = "CheckBoxActivity";  

    private List<CheckBox> checkboxs = new ArrayList<CheckBox>();  

    @Override  

    protected void onCreate(Bundle savedInstanceState) {  

        // TODO Auto-generated method stub  

        super.onCreate(savedInstanceState);  

/*      每個多選框都是獨立的,可以通過疊代所有多選框,然後根據其狀态是否被選中再擷取其值。 

         CheckBox.setChecked(true);//設定成選中狀态。 

         CheckBox.getText();//擷取多選框的值 

         調用setOnCheckedChangeListener()方法,處理多選框被選擇事件,把CompoundButton.OnCheckedChangeListener執行個體作為參數傳入*/  

        setContentView(R.layout.checkbox);  

        checkboxs.add((CheckBox) findViewById(R.id.checkboxdotNet));  

        checkboxs.add((CheckBox) findViewById(R.id.checkboxjava));  

        checkboxs.add((CheckBox) findViewById(R.id.checkboxphp));  

        checkboxs.get(1).setChecked(true);// 設定成選中狀态  

        for (CheckBox box : checkboxs) {  

            box.setOnCheckedChangeListener(listener);  

        }  

        Button button = (Button) findViewById(R.id.checkboxButton);  

        button.setOnClickListener(new View.OnClickListener() {  

            @Override  

            public void onClick(View v) {  

                List<String> values = new ArrayList<String>();  

                for (CheckBox box : checkboxs) {  

                    if (box.isChecked()) {  

                        values.add(box.getText().toString());  

                    }  

                Toast.makeText(CheckBoxActivity.this, values.toString(), 1)  

                        .show();  

            }  

        });  

}  

    CompoundButton.OnCheckedChangeListener listener = new CompoundButton.OnCheckedChangeListener() {  

        @Override  

        // isChecked表示是否被選中  

        public void onCheckedChanged(CompoundButton buttonView,  

                boolean isChecked) {  

            CheckBox checkBox = (CheckBox) buttonView;  

            Log.i(TAG,  

                    "isChecked=" + isChecked + ",value=" + checkBox.getText());// 輸出單選框的值  

    };  

ui 集合

 CheckBoxActivity中

ui 集合

//多選項清單對話框  

        final String[] items = {"java", ".net", "php"};  

        new AlertDialog.Builder(this).setCancelable(false)  

        .setTitle("選擇語言")  

        .setMultiChoiceItems(items, new boolean[]{false,true,false}, new DialogInterface.OnMultiChoiceClickListener() {  

            public void onClick(DialogInterface dialog, int which, boolean isChecked) {  

                if(isChecked){  

                Toast.makeText(getApplicationContext(), items[which],   

                    Toast.LENGTH_SHORT).show();  

        .setPositiveButton("确認",  

            new DialogInterface.OnClickListener(){  

            public void onClick(DialogInterface dialoginterface, int i){  

                dialoginterface.dismiss();//解除對話框  

             }  

        .show();//顯示對話框  

 下拉清單框(Spinner)

ui 集合
ui 集合
ui 集合

 在spinner.xml中(圖一圖二圖三用)

ui 集合

  android:layout_width="fill_parent"  

  <Spinner android:id="@+id/spinner"  

    android:layout_width="fill_parent"/>  

 stylespinner.xml中(圖三用)

ui 集合

<TextView xmlns:android="http://schemas.android.com/apk/res/android"  

   android:id="@+id/contentTextView"  

    android:layout_width="fill_parent"   

    android:layout_height="wrap_content"   

    android:background="#F4FDFF"  

    />  

 SpinnerActivity中(圖一圖二圖三用)

ui 集合

public class SpinnerActivity extends Activity {  

    private static final String TAG = "SpinnerActivity";  

    public void onCreate(Bundle savedInstanceState) {  

        setContentView(R.layout.spinner);  

        /*// 第二個參數為下拉清單框每一項的界面樣式,該界面樣式由Android系統提供,當然您也可以自定義 

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 

                android.R.layout.simple_spinner_item); 

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);//換一種下拉框的式樣 

        adapter.add("java"); 

        adapter.add("dotNet"); 

        adapter.add("php"); 

        Spinner spinner = (Spinner) findViewById(R.id.spinner); 

        spinner.setAdapter(adapter); 

//      spinner.setSelection(0, false); 

        spinner.setSelection(2);//設定預設值 

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

            @Override 

            public void onItemSelected(AdapterView<?> adapterView, View view, 

                    int position, long id) { 

                Spinner spinner = (Spinner) adapterView; 

                String itemContent = (String) adapterView 

                        .getItemAtPosition(position); 

                Toast.makeText(getApplicationContext(), itemContent,Toast.LENGTH_SHORT).show(); 

            } 

            public void onNothingSelected(AdapterView<?> view) { 

                Log.i(TAG, view.getClass().getName()); 

        });*/  

        /////////////////////////////采用javabean作為Adapter元素(圖二)///////////////////////////////////////////////  

    /*   ArrayAdapter<Person> adapter = new ArrayAdapter<Person>(this, android.R.layout.simple_spinner_item); 

            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

            adapter.add(new Person(12, "李明")); 

            adapter.add(new Person(100, "李明")); 

            adapter.add(new Person(62, "張天")); 

            Spinner spinner = (Spinner) findViewById(R.id.spinner); 

            spinner.setAdapter(adapter); 

            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

        @Override 

        public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) { 

            Spinner spinner = (Spinner)adapterView; 

            Person person = (Person)adapterView.getItemAtPosition(position); 

            Toast.makeText(getApplicationContext(), person.getId().toString(),Toast.LENGTH_SHORT).show(); 

        } 

        public void onNothingSelected(AdapterView<?> view) { 

            Log.i(TAG,  view.getClass().getName()); 

            });*/  

        /////////////////////////////自定義選項界面樣式(圖三)///////////////////////////////////////////////  

           //第二個參數為layout檔案在R檔案的id,第三個參數為TextView在layout檔案的id  

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.stylespinner, R.id.contentTextView);  

        adapter.add("java");  

        adapter.add("dotNet");  

        adapter.add("php");  

        Spinner spinner = (Spinner) findViewById(R.id.spinner);  

        spinner.setAdapter(adapter);  

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {  

    public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {  

        Spinner spinner = (Spinner)adapterView;  

        String itemContent = (String)adapterView.getItemAtPosition(position);  

        Toast.makeText(getApplicationContext(), itemContent,Toast.LENGTH_SHORT).show();  

    }  

    public void onNothingSelected(AdapterView<?> view) {  

        Log.i(TAG,  view.getClass().getName());  

 拖動條(SeekBar)

ui 集合

seekbar.xml

ui 集合

  android:layout_height="fill_parent"  

  android:orientation="vertical">  

  <SeekBar  

    android:id="@+id/seekBar"  

    <Button android:id="@+id/seekBarButton"  

    android:text="擷取值"  

 SeekBarAvtivity中

ui 集合

private SeekBar seekBar;  

        setContentView(R.layout.seekbar);  

        seekBar = (SeekBar) findViewById(R.id.seekBar);  

        seekBar.setMax(100);//設定最大刻度,即0到99  

        seekBar.setProgress(30);//設定目前刻度  

        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {  

            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {  

                Log.v("onProgressChanged()", String.valueOf(progress) + ", " + String.valueOf(fromTouch));  

            public void onStartTrackingTouch(SeekBar seekBar) {//開始拖動  

                Log.v("onStartTrackingTouch()", String.valueOf(seekBar.getProgress()));  

            public void onStopTrackingTouch(SeekBar seekBar) {//結束拖動  

                Log.v("onStopTrackingTouch()", String.valueOf(seekBar.getProgress()));  

        Button button = (Button)this.findViewById(R.id.seekBarButton);  

        button.setOnClickListener(new View.OnClickListener() {            

    public void onClick(View v) {  

    Toast.makeText(getApplicationContext(), String.valueOf(seekBar.getProgress()), 1).show();  

         });   

 菜單(Menu)

ui 集合

·重寫Activity的onCreateOptionsMenu(Menu menu)方法,該方法用于建立選項菜單,在使用者按下手機的“Menu”按鈕時就會顯示建立好的菜單,在onCreateOptionsMenu(Menu menu)方法内部可以調用Menu.add()方法實作菜單的添加。

在第一次初始化了選項菜單後,如果我們需要動态更改選項菜單的話,則需要重新實作onPrepareOptionsMenu()回調方法,他會在每次顯示選項菜單之前調用。

·重寫Activity的onMenuItemSelected()方法,該方法用于處理菜單被選擇事件

在MainActivity中:

ui 集合

private static final int MENU_ADD = Menu.FIRST;  

private static final int MENU_UPDATE = Menu.FIRST + 1;   

...............................................................  

 @Override  

    public boolean onCreateOptionsMenu(Menu menu) {  

    menu.add(Menu.NONE, MENU_ADD, Menu.NONE, "添加");<span style="color: #ff0000;">//參數:組ID,菜單項ID,排列順序,顯示标題 </span>   

    menu.add(Menu.NONE, MENU_UPDATE, Menu.NONE, "更新");  

    return super.onCreateOptionsMenu(menu);  

    public boolean onMenuItemSelected(int featureId, MenuItem item) {  

    switch (item.getItemId()) {  

      case MENU_ADD:  

           Log.i(TAG, "add was selected");  

           return true;  

      case MENU_UPDATE:  

           Log.i(TAG, "update was selected");  

      default:  

              return super.onMenuItemSelected(featureId, item);  

      }  

    }     

子菜單(SubMenu)

ui 集合

@Override  

   public boolean onCreateOptionsMenu(Menu menu) {  

menu.add(Menu.NONE, MENU_ADD, Menu.NONE, "添加").setCheckable(true);    

menu.add(Menu.NONE, MENU_UPDATE, Menu.NONE, "更新");  

SubMenu sub = menu.addSubMenu("搜尋");//子菜單  

  <span style="color: #ff0000;"> sub.setIcon(android.R.drawable.ic_menu_search);  

   sub.add(Menu.NONE,Menu.FIRST+8,Menu.NONE,"本地");  

   sub.add(Menu.NONE,Menu.FIRST+9,Menu.NONE,"網絡");</span>  

menu.add(Menu.NONE, Menu.FIRST+2, Menu.NONE, "儲存").setIcon(android.R.drawable.ic_menu_save);  

menu.add(Menu.NONE, Menu.FIRST+3, Menu.NONE, "删除").setIcon(android.R.drawable.ic_menu_delete);  

menu.add(Menu.NONE, Menu.FIRST+4, Menu.NONE, "增加").setIcon(android.R.drawable.ic_menu_add);  

menu.add(Menu.NONE, Menu.FIRST+5, Menu.NONE, "電話").setIcon(android.R.drawable.ic_menu_call);  

menu.add(Menu.NONE, Menu.FIRST+6, Menu.NONE, "電話1");  

menu.add(Menu.NONE, Menu.FIRST+7, Menu.NONE, "電話2");  

return super.onCreateOptionsMenu(menu);  

   }  

上下文菜單(ContextMenu)

上下文菜單的初始化回調方法并不隻調用一次,它會在每次呼出上下文菜單時被調用(public void onCreateContextMenu(ContextMenu menu, View v,

ContextMenuInfo menuInfo) )。

方法一:注冊

ui 集合

...  

 registerForContextMenu(findViewById(R.id.contextMenu));//注冊上下文菜單  

@Override   

    public boolean onContextItemSelected(MenuItem item) {  

        switch (item.getItemId()) {  

          case C_MENU_NEW:  

              //做建立的那些事。  

              break;  

           case C_MENU_OPEN:  

              //做打開的那些事。  

          }  

        return super.onContextItemSelected(item);  

    public void onCreateContextMenu(ContextMenu menu, View v,  

            ContextMenuInfo menuInfo) {  

        menu.setHeaderTitle("這是上下文菜單");  

         menu.add(0, C_MENU_NEW, 0, "建立");  

            menu.add(0, C_MENU_OPEN, 0, "打開");  

        super.onCreateContextMenu(menu, v, menuInfo);  

 方法二:監聽

ui 集合

((Button)this.findViewById(R.id.contextMenu2)).setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {  

        public void onCreateContextMenu(ContextMenu menu, View v,  

                ContextMenuInfo menuInfo) {  

            menu.setHeaderTitle("這是上下文菜單2");  

             menu.add(0, C_MENU_NEW, 0, "建立");  

                menu.add(0, C_MENU_OPEN, 0, "打開");  

    });  

進度對話框(ProgressDialog)

ui 集合

·使用代碼ProgressDialog.show(ProgressDialogActivity.this, "請稍等", "資料正在加載中...", true);建立并顯示一個進度對話框。

·調用setProgressStyle()方法設定進度對話框風格。有兩種風格:

     ProgressDialog.STYLE_SPINNER 旋體進度條風格 (為預設風格)

     ProgressDialog.STYLE_HORIZONTAL 橫向進度條風格

ui 集合

.........................................................  

private ProgressDialog progressDialog;//進度對話框  

     private Runnable finishDialog = new Runnable() {  

         @Override  

         public void run() {             

            progressDialog.dismiss();  

         }  

        progressDialog = ProgressDialog.show(MainActivity.this, "請稍等", "病毒正在加載中...", true);  

        //開始一條專門處理耗時工作的線程  

        new Thread(new Runnable(){  

            public void run() {  

               try {  

            Thread.sleep(5*1000);//假設這項工作需要5秒才能完成  

          //progressDialog.dismiss();//關閉程序對話框  

            runOnUiThread(finishDialog);//要求運作在UI線程  

           } catch (InterruptedException e) {}  

        }).start();     

................................................................  

 建立進度條(ProgressBar)

ui 集合

 在布局xml檔案中添加進度條代碼:

<ProgressBar android:layout_width="fill_parent" android:layout_height="20px"

    style="?android:attr/progressBarStyleHorizontal"

    android:id="@+id/downloadbar"/>

在代碼中操作進度條:

ProgressBar.setMax(100);//設定總長度為100

ProgressBar.setProgress(0);//設定已經開啟長度為0,假設設定為50,進度條将進行到一半

一般用于下載下傳的進度條

 Android中的通知(Notification)

通知用于在狀态欄顯示消息,消息到來時以圖示方式表示,如下:

ui 集合
ui 集合

 在MainActivity中:

ui 集合

..................  

 //擷取通知管理器  

        NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);  

        int icon = android.R.drawable.stat_notify_chat;  

        long when = System.currentTimeMillis();  

        //建立一個通知,指定其圖示和标題  

        Notification notification = new Notification(icon, null, when);//第一個參數為圖示,第二個參數為标題,第三個為通知時間  

        Intent openintent = new Intent(this, CodeUIActivity.class);  

        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, openintent, 0);//當點選消息時就會向系統發送openintent意圖  

        notification.setLatestEventInfo(this, "标題", "内容", contentIntent);  

        mNotificationManager.notify(0, notification);  

DatePicherDialog

ui 集合
ui 集合

new DatePickerDialog(this,  

                    new OnDateSetListener() {  

                        @Override  

                        public void onDateSet(DatePicker v, int y,  

                                int m, int d) {  

                            /* 

                             * 這是設定好日期後的回調函數, 

                             * 可以根據設定的内容更新使用者界面 

                             * 或者系統時間。 

                             */  

                        }  

                     }, c.get(Calendar.YEAR),  

                    c.get(Calendar.MONTH),   

                    c.get(Calendar.DAY_OF_MONTH))  

TimePicherDialog

ui 集合
ui 集合

new TimePickerDialog(this,  

                    new  OnTimeSetListener() {  

                        public void onTimeSet(TimePicker arg0, int arg1, int arg2) {  

                             /* 

                             * 這是設定好時間後的回調函數, 

                    }, c.get(Calendar.HOUR_OF_DAY),  

                    c.get(Calendar.MINUTE),   

                    false);     

AnalogClock     和   DigitalClock

ui 集合
ui 集合

<AnalogClock    

   android:layout_width="wrap_content"   

   android:layout_height="wrap_content" />  

lt;DigitalClock    

ToggleButton

ui 集合
ui 集合

<ToggleButton   

  android:layout_height="wrap_content" />  

在Activity中程式設計實作UI   

ui 集合

在CodeUIActivity中:

ui 集合

TextView textView = new TextView(this);  

        textView.setText(R.string.code_UI);  

        textView.setId(90);  

        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(  

                ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);  

        linearLayout.addView(textView, params);  

        params = new LinearLayout.LayoutParams(  

                ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT);  

        setContentView(linearLayout, params);  

用html作為UI

Android通過WebView實作了JS代碼與Java代碼互相通信的功能,使的android軟體的界面開發也可以采用HTML網頁技術。

ui 集合

 主要代碼

/assets/index.html

ui 集合

<script type="text/javascript">  

    function show(jsondata){//[{id:21,name:"xxx",mobile:"12332213"},{}]  

            var jsonobjs = eval(jsondata);  

            var table = document.getElementById("personTable");  

            for(var y=0; y<jsonobjs.length; y++){  

                var tr = table.insertRow(table.rows.length); //添加一行  

                //添加三列  

                var td1 = tr.insertCell(0);  

                var td2 = tr.insertCell(1);  

                td2.align = "center";  

                var td3 = tr.insertCell(2);  

                //設定列内容和屬性  

                td1.innerHTML = jsonobjs[y].id;   

                td2.innerHTML = jsonobjs[y].name;   

                td3.innerHTML = "<a href='javascript:cactus.call(\""+ jsonobjs[y].mobile+ "\")'>"+ jsonobjs[y].mobile+ "</a>";   

</script>  

</head>  

<!-- js代碼通過webView調用其插件中的java代碼 -->  

<body onload="javascript:cactus.personlist()">  

   <table border="0" width="100%" id="personTable" cellspacing="0">  

        <tr>  

            <td width="20%">編号</td>  

            <td width="30%" align="center">姓名</td>  

            <td >電話</td>  

        </tr>  

    </table>  

    <a href="javascript:window.location.reload()">重新整理</a>  

</body>  

HtmlActivity.java

ui 集合

private WebView webView;  

    private Handler handler = new Handler();// 異步使用  

        setContentView(R.layout.htmlui);  

        webView = (WebView) this.findViewById(R.id.webview);  

        webView.getSettings().setJavaScriptEnabled(true);// 允許JavaScript  

        webView.getSettings().setSaveFormData(false);  

        webView.getSettings().setSavePassword(false);  

        webView.getSettings().setSupportZoom(false);// 不準改變大小  

        webView.addJavascriptInterface(new CactusJavaScript(this, handler),  

                "cactus");// addJavascriptInterface方法中要綁定的Java對象  

        webView.setWebChromeClient(new CactusWebClient());  

        webView.loadUrl("file:///android_asset/index.html");  

    private final class CactusWebClient extends WebChromeClient {  

        // WebView上alert是彈不出來東西的,需要定制你的WebChromeClient處理彈出  

        public boolean onJsAlert(WebView view, String url, String message,  

                JsResult result) {  

            new AlertDialog.Builder(HtmlActivity.this)  

                    .setTitle("提示資訊")  

                    .setMessage(message)  

                    .setPositiveButton("确定",  

                            new DialogInterface.OnClickListener() {  

                                public void onClick(  

                                        DialogInterface dialoginterface, int i) {  

                                }  

                            }).show();  

            return true;  

CactusJavaScript.java

ui 集合

private Context context;  

    private WebView webView;  

    private Handler handler;  

    public CactusJavaScript(Context context, Handler handler) {  

        super();  

        this.context = context;  

        this.webView = (WebView) ((Activity)context).findViewById(R.id.webview);  

        this.handler = handler ;  

    public void personlist() {  

        handler.post(new Runnable() {// Handler與調用者處于同一線程,如果Handler裡面做耗時的動作,調用者線程會阻塞  

                webView.loadUrl("javascript:show('" + getPersonJson()  

                        + "')");  

    public void call(final String phone) {  

        handler.post(new Runnable() {  

                context.startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:"  

                        + phone)));  

    public  String getPersonJson() {// 生成json字元串  

        try {  

            List<Person> persons=getContacts();  

            JSONArray jsonArray=new JSONArray();  

            for (Person person : persons) {  

                JSONObject jsonObject=new JSONObject();  

                jsonObject.put("id", person.getId());  

                jsonObject.put("name", person.getName());  

                jsonObject.put("mobile", person.getMobile());  

                jsonArray.put(jsonObject);  

            return jsonArray.toString();  

        } catch (JSONException e) {  

            e.printStackTrace();  

        return "";  

    public List<Person> getContacts(){  

         List<Person>  persons = new ArrayList<Person>();  

         persons.add(new Person(78, "張飛", "1384949494"));  

         persons.add(new Person(12, "李靜", "194505555"));  

         persons.add(new Person(89, "趙薇", "1785959595"));  

        return persons;  

下載下傳次數: 19

<a href="http://justsee.iteye.com/blog/985962">檢視圖檔附件</a>