- 浏览: 3462410 次
- 性别:
- 来自: China
文章分类
- 全部博客 (536)
- ajax (1)
- Algorithm (14)
- Android (40)
- CSS/HTML... (2)
- defy (3)
- DesignPattern (2)
- dorado (0)
- Drools (6)
- English/日本語 (7)
- Flex (2)
- Framework (0)
- Google (3)
- hibernate (13)
- homework (3)
- HTML5 (0)
- IDE (29)
- java (45)
- javaee (7)
- Javascript (14)
- java组件 (5)
- jQuery (4)
- jsp (8)
- jsf (2)
- Linux (2)
- lucene (0)
- mysql (6)
- news (3)
- Oracle (8)
- other (4)
- PHP (5)
- Python (0)
- Software Engineering (3)
- spring (7)
- struts1.x (14)
- struts2.x (14)
- strolling in cloud (1)
- subject:javaEnhance (20)
- Tomcat (7)
- validator (3)
- 学习·方法·心得 (8)
- .NET (2)
- vba (6)
- groovy (5)
- grails (2)
- SWT (0)
- big data (1)
- perl (1)
- objective-c (50)
- product (1)
- mac (7)
- ios (188)
- ios-phone (2)
- ios-system (15)
- ios-network (5)
- ios-file (4)
- ios-db (1)
- ios-media (3)
- ios-ui (27)
- ios-openSource (6)
- ios-animation (5)
- ios-drawing (7)
- c (2)
- ios-app (2)
- ios-course (15)
- ios-runtime (14)
- ios-code (8)
- ios-thread (8)
- ios-LBS (2)
- ios-issue (1)
- ios-design (2)
- Jailbreak (2)
- cocos2d (0)
- swift (16)
- ios-framework (4)
- apple watch (4)
- ios-web (1)
- react native (3)
- TVOS (1)
- OpenGL (1)
最新评论
-
xiaobinggg:
...
Session机制详解 -
菜鸟学生会:
Drools规则工作流引擎开发教程网盘地址:http://pa ...
Drools入门-----------环境搭建,分析Helloworld -
wangyudong:
不是很好用,不支持自动化测试RESTful API,也不支持自 ...
Simple REST Client POST使用方法 -
Paul0523:
很棒的一篇文章,感谢楼主分享
Session机制详解 -
啸笑天:
获取原型对象的三种方法<script>functi ...
复习JavaScript面向对象技术
对话框通知(Dialog Notification)
当你的应用需要显示一个进度条或需要用户对信息进行确认时,可以使用对话框来完成。
对话框和菜单一样,都是由Activity统一管理的,我们只要重新实现onCreateDialog(int id)传近来的不同的对话id,初始化并返回相应的对话框。Activity会将所有你已经初始化的对话框保存,下次呼出对话框的时候不会重新初始化。因此当需要动态更新我们的对话框时,就需要重新实现onPrepareDialog(int id,Dialog dialog)方法。
下面代码将打开一个对话框:
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)
在radio.xml中:
<?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实例作为参数传入
*/
在RadioButtonActivity中:
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();// 显示对话框
在RadioButtonActivity中:
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)
checkbox.xml界面
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 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:layout_width="wrap_content" android:layout_height="wrap_content" android:text="dotNet" /> <CheckBox android:id="@+id/checkboxphp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="PHP" /> <Button android:id="@+id/checkboxButton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="获取值" /> </LinearLayout>
CheckBoxActivity中
............................ 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());// 输出单选框的值 } }; }
CheckBoxActivity中
//多选项列表对话框 final String[] items = {"java", ".net", "php"}; new AlertDialog.Builder(this).setCancelable(false) .setTitle("选择语言") .setMultiChoiceItems(items, new boolean[]{false,true,false}, new DialogInterface.OnMultiChoiceClickListener() { @Override 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)
在spinner.xml中(图一图二图三用)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> <Spinner android:id="@+id/spinner" android:layout_height="wrap_content" android:layout_width="fill_parent"/> </LinearLayout>
stylespinner.xml中(图三用)
<?xml version="1.0" encoding="utf-8"?> <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中(图一图二图三用)
public class SpinnerActivity extends Activity { private static final String TAG = "SpinnerActivity"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(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(); } @Override 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(); } @Override 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() { @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(); } @Override public void onNothingSelected(AdapterView<?> view) { Log.i(TAG, view.getClass().getName()); } }); } }
拖动条(SeekBar)
seekbar.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <SeekBar android:id="@+id/seekBar" android:layout_height="wrap_content" android:layout_width="fill_parent"/> <Button android:id="@+id/seekBarButton" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="获取值" /> </LinearLayout>
SeekBarAvtivity中
private SeekBar seekBar; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.seekbar); seekBar = (SeekBar) findViewById(R.id.seekBar); seekBar.setMax(100);//设置最大刻度,即0到99 seekBar.setProgress(30);//设置当前刻度 seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) { Log.v("onProgressChanged()", String.valueOf(progress) + ", " + String.valueOf(fromTouch)); } @Override public void onStartTrackingTouch(SeekBar seekBar) {//开始拖动 Log.v("onStartTrackingTouch()", String.valueOf(seekBar.getProgress())); } @Override 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() { @Override public void onClick(View v) { Toast.makeText(getApplicationContext(), String.valueOf(seekBar.getProgress()), 1).show(); } }); }
菜单(Menu)
·重写Activity的onCreateOptionsMenu(Menu menu)方法,该方法用于创建选项菜单,在用户按下手机的“Menu”按钮时就会显示创建好的菜单,在onCreateOptionsMenu(Menu menu)方法内部可以调用Menu.add()方法实现菜单的添加。
在第一次初始化了选项菜单后,如果我们需要动态更改选项菜单的话,则需要重新实现onPrepareOptionsMenu()回调方法,他会在每次显示选项菜单之前调用。
·重写Activity的onMenuItemSelected()方法,该方法用于处理菜单被选择事件
在MainActivity中:
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, "添加");//参数:组ID,菜单项ID,排列顺序,显示标题
menu.add(Menu.NONE, MENU_UPDATE, Menu.NONE, "更新");
return super.onCreateOptionsMenu(menu);
}
@Override
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");
return true;
default:
return super.onMenuItemSelected(featureId, item);
}
}
子菜单(SubMenu)
@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("搜索");//子菜单
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,"网络");
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) )。
方法一:注册
... ... ... registerForContextMenu(findViewById(R.id.contextMenu));//注册上下文菜单 ... ... @Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case C_MENU_NEW: //做新建的那些事。 break; case C_MENU_OPEN: //做打开的那些事。 break; } return super.onContextItemSelected(item); } @Override 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); }
方法二:监听
((Button)this.findViewById(R.id.contextMenu2)).setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() { @Override 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)
·使用代码ProgressDialog.show(ProgressDialogActivity.this, "请稍等", "数据正在加载中...", true);创建并显示一个进度对话框。
·调用setProgressStyle()方法设置进度对话框风格。有两种风格:
ProgressDialog.STYLE_SPINNER 旋体进度条风格 (为默认风格)
ProgressDialog.STYLE_HORIZONTAL 横向进度条风格
在MainActivity中:
......................................................... private ProgressDialog progressDialog;//进度对话框 private Runnable finishDialog = new Runnable() { @Override public void run() { progressDialog.dismiss(); } }; @Override public void onCreate(Bundle savedInstanceState) { progressDialog = ProgressDialog.show(MainActivity.this, "请稍等", "病毒正在加载中...", true); //开始一条专门处理耗时工作的线程 new Thread(new Runnable(){ @Override public void run() { try { Thread.sleep(5*1000);//假设这项工作需要5秒才能完成 //progressDialog.dismiss();//关闭进程对话框 runOnUiThread(finishDialog);//要求运行在UI线程 } catch (InterruptedException e) {} } }).start(); ................................................................
创建进度条(ProgressBar)
在布局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)
通知用于在状态栏显示消息,消息到来时以图标方式表示,如下:
在MainActivity中:
.................. //获取通知管理器 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
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
new TimePickerDialog(this, new OnTimeSetListener() { @Override public void onTimeSet(TimePicker arg0, int arg1, int arg2) { /* * 这是设置好时间后的回调函数, * 可以根据设置的内容更新用户界面 * 或者系统时间。 */ } }, c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), false);
AnalogClock 和 DigitalClock
<AnalogClock android:layout_width="wrap_content" android:layout_height="wrap_content" /> <DigitalClock android:layout_width="wrap_content" android:layout_height="wrap_content" />
ToggleButton
<ToggleButton android:layout_width="wrap_content" android:layout_height="wrap_content" />
在Activity中编程实现UI
在CodeUIActivity中:
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网页技术。
主要代码
/assets/index.html
<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
private WebView webView; private Handler handler = new Handler();// 异步使用 @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); 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处理弹出 @Override 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
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里面做耗时的动作,调用者线程会阻塞 public void run() { webView.loadUrl("javascript:show('" + getPersonJson() + "')"); } }); } public void call(final String phone) { handler.post(new Runnable() { public void run() { 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; }
- AndroidComponent.rar (119.9 KB)
- 下载次数: 149
发表评论
-
Android 桌面部件
2011-07-06 19:26 1864桌面部件是一种利用AppWidget框架将应用程序的某个部件放 ... -
Android 实时文件夹
2011-07-06 15:38 2852实时文件夹是一种用来显示由某个ContentProvider提 ... -
android 添加桌面快捷方式
2011-07-05 19:20 13281、在桌面创建快捷方式方法: 方法一:通过长按某一个应用程序的 ... -
Android权限详解
2011-07-04 09:43 2239在Android的设计中,资源的访问或者网络连接,要得到这 ... -
Android权限注解
2011-07-04 09:33 3472Android应用程序在使用很多功能的时候必须在Mainife ... -
ListView使用SimpleAdapter加载网络图片
2011-07-02 19:14 7706ListView是一种常见的布局,通过SimpleAdapte ... -
android:layout_gravity 和 android:gravity 的区别
2011-07-02 19:00 2099gravity 这个英文单词是重心的意思,在这里就表示 ... -
横竖屏切换时不销毁当前activity 和 锁定屏幕
2011-07-02 18:58 3622首先在Mainifest.xml的Activity元素 ... -
onSaveInstanceState和onRestoreInstanceState触发的时机
2011-07-02 17:49 2879当某个activity变得“容易”被系统销毁时,该ac ... -
strings.xml文件中提供占位符来格式化数据
2011-07-01 16:16 3223有些朋友可能会动态的修改Android中strings. ... -
ANDROID开机动画分析
2011-05-25 15:40 5925Android 2.0 开机动画文件分析。开机动画文件:boo ... -
Android专栏地址,真的不错啊!!!
2011-05-22 20:22 1651第三极: http://disanji.net/cate ... -
A1200入门DIY
2011-05-22 11:40 0A1200入门DIY 2007-04-16 19:33 ... -
android用户界面数据绑定
2011-05-19 21:25 5279当我们想用合适的方式显示并操作一些数据(如数组,链表,数据库等 ... -
emulator: ERROR: the user data image is used by another emulator. aborting
2011-05-19 13:48 2351今天早上起床,运行项目时报错:Error the use ... -
Android Map demo
2011-04-23 22:24 3392AndroidManifest.xml <?xm ... -
Android Map申请key
2011-04-23 22:02 31161. 首先先要获取你的debug keystore位置 ... -
conversion to dalvik format failed with error 1
2011-04-23 21:52 3471android低版本工程(如1.5)放到高版本环境中(如2.2 ... -
Android GPS基础
2011-04-20 22:14 2778package org.example.locationtes ... -
Android API:Activity.managedQuery()
2011-04-20 19:22 2626描述: 获取一个包含指定数据的 Cursor 对 ...
相关推荐
本资源"安卓UI布局相关-AndroidUI组件库各种好看的组件.rar"提供了多种美观的UI组件,供开发者们在构建应用时参考和使用。虽然无法确保每个组件都能直接运行,但它们可以作为学习和灵感的来源,开发者可以根据自己的...
以下是对“android ui组件大全”这个主题的详细解析: 标题:“android ui组件大全” 这个标题表明这是一个集合了Android平台各种UI控件的资源库或教程,旨在帮助开发者全面了解和实践Android UI开发。它可能包含...
这个"Android UI控件组件库集合【源码】"提供了多种常用的UI控件及其源代码,旨在帮助开发者构建更加美观、功能丰富的应用界面。下面我们将详细探讨这些控件以及它们在实际开发中的应用。 1. **流式布局...
在Android开发中,UI组件是构建用户界面的关键元素,它们为开发者提供了丰富的工具来创建吸引人的、交互式的应用。本教程“030_Android UI组件之 GridView组件”深入讲解了GridView这一重要的布局管理器,它允许我们...
android UI组件介绍android UI组件介绍android UI组件介绍
本资源“生成混合背景的 Android UI 组件引用视图 - Java - 下载.zip”是一个专注于通过Java编程实现独特视觉效果的项目,旨在帮助开发者创建具有混合背景的UI组件。下面将详细探讨相关知识点。 首先,`Android UI`...
【NIM_Android_UIKit】是网易云信提供的一个开源Android UI组件库,它专注于提供高效、可定制的UI组件,以帮助开发者快速构建稳定、美观的聊天界面和其他相关功能。这个源码仓库包含了实现这些组件的所有源代码,...
在Android开发中,UI组件是构建用户界面的基础,它们提供了丰富的功能来呈现应用程序的视觉元素。本教程聚焦于“TextView”这一基本视图组件,它是Android应用中最常用的控件之一,用于显示文本信息。通过“016_...
9、Android的UI工具包 android-ui-utils 是一个工具包用来帮助设计和开发 Android 用户界面,包含三个单独的工具:Android Asset Studio用户界面原型模具,Android 设计预览,时常需要重复确认程序版面设计状况的 ...
"017_androidUI组件之 Basic View- ImageView"这个视频教程将详细阐述ImageView的使用方法及其重要特性。 ImageView主要用于显示一张图片资源,它可以是从XML布局文件、代码动态设置,或者是通过网络加载。在...
### Android各类好看UI组件的GitHub仓库链接合集 在Android应用开发过程中,UI设计与实现是至关重要的一环。为了帮助开发者快速找到高质量的UI组件,本文整理了一个Android各类好看UI组件的GitHub仓库链接合集。...
"UI.rar"这个压缩包文件显然包含了与Android UI组件相关的学习资料,非常适合那些刚刚接触Android开发的新手。在这个压缩包中,你可以找到关于如何构建、定制和优化Android应用用户界面的详细教程。 首先,我们要...
在Android开发中,UI组件是构建用户界面的关键元素,它们为用户提供与应用交互的方式。"时间日期控件DatePicker和TimePicker"是Android SDK中的两个重要组件,用于处理时间和日期选择。这两个控件允许用户在应用中...
1. **Android UI组件**:Android系统提供了多种UI组件,如按钮(Button)、文本输入框(EditText)、列表(ListView)、网格视图(GridView)、滑动选择器(Spinner)、图片视图(ImageView)等。每个特效项目可能都会涉及到这些...
本资料“Android_UI.rar”聚焦于Android平台上的基本UI组件及其在GIS(地理信息系统)中的应用,同时也涉及到Java编程语言。以下将详细介绍这些知识点。 首先,Android UI组件是构建应用程序界面的基础。Android...
该资源是对Android 常用的UI组件进行详细讲解
Android UI涉及布局管理、控件使用、动画效果、事件处理等多个方面,开发者需要了解Android SDK提供的各种UI组件以及它们的使用方法。 3. 响应式用户界面设计 响应式用户界面是能够适应不同屏幕尺寸和分辨率的设计...
本实践项目以"安卓android UI界面开发练习"为主题,旨在帮助开发者掌握一系列关键的UI组件和交互元素。以下将详细讲解其中涉及的知识点。 1. TabHost:TabHost是一个容器,用于创建具有多个Tab标签的用户界面。它...