android點擊彈出按鈕
1. android開發中獲取選中文字以及彈出框
只需要在Textview中增加android:textIsSelectable="true"即可長按彈出復制,如果要彈出對話框,那就要用Dialog,dialog的用法如下:
Android中,在Dialog中增加EditText需要使用view控制項,也可參考附件源代碼。
具體實現代碼:
1.創建對象框
AlertDialog.Builder builder = new Builder(context);
builder.setTitle("請輸入"); //設置對話框標題
builder.setIcon(android.R.drawable.btn_star); //設置對話框標題前的圖標
2.創建EditText輸入框
final EditText edit = new EditText(context);
3.將輸入框賦值給Dialog,並增加確定取消按鍵
builder.setView(edit);
builder.setPositiveButton("確認", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(context, "你輸入的是: " + edit.getText().toString(), Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(context, "你點了取消", Toast.LENGTH_SHORT).show();
}
});
4.設置常用api,並show彈出
builder.setCancelable(true); //設置按鈕是否可以按返回鍵取消,false則不可以取消
AlertDialog dialog = builder.create(); //創建對話框
dialog.setCanceledOnTouchOutside(true); //設置彈出框失去焦點是否隱藏,即點擊屏蔽其它地方是否隱藏
dialog.show();
2. Android 模擬器中按菜單Menu鍵彈出菜單項MenuItem,點擊菜單項中的「退出」沒反應
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
/*
*
* add()方法的四個參數,依次是:
*
* 1、組別,如果不分組的話就寫Menu.NONE,
*
* 2、Id,這個很重要,Android根據這個Id來確定不同的菜單
*
* 3、順序,那個菜單現在在前面由這個參數的大小決定
*
* 4、文本,菜單的顯示文本
*/
//圖標文件實現android系統自帶的文件
menu.add(Menu.NONE, Menu.FIRST + 1, 1, "保存").setIcon(android.R.drawable.ic_menu_save);
menu.add(Menu.NONE, Menu.FIRST + 2, 2, "添加").setIcon(android.R.drawable.ic_menu_add);
// menu.add(Menu.NONE, Menu.FIRST + 3, 3, "刪除").setIcon(android.R.drawable.ic_menu_delete);
// menu.add(Menu.NONE, Menu.FIRST + 4, 4, "發送").setIcon(android.R.drawable.ic_menu_send);
menu.add(Menu.NONE, Menu.FIRST + 5, 5, "幫助").setIcon(android.R.drawable.ic_menu_help);
menu.add(Menu.NONE, Menu.FIRST + 6, 6, "退出").setIcon(android.R.drawable.ic_menu_close_clear_cancel);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
// TODO Auto-generated method stub
switch(item.getItemId()){
case Menu.FIRST + 1:
Toast.makeText(WqtMainActivity.this, "保存菜單被點擊了!", Toast.LENGTH_LONG).show();
//intent = new Intent(MenuActivity.this,Myhandler.class);
//startActivity(intent);
//overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
break;
case Menu.FIRST + 2:
Toast.makeText(WqtMainActivity.this, "添加菜單被點擊了!", Toast.LENGTH_LONG).show();
break;
case Menu.FIRST + 3:
Toast.makeText(WqtMainActivity.this, "刪除菜單被點擊了!", Toast.LENGTH_LONG).show();
break;
case Menu.FIRST + 4:
Toast.makeText(WqtMainActivity.this, "發送菜單被點擊了!", Toast.LENGTH_LONG).show();
//通知在狀態欄顯示的圖標
//notification.icon = android.R.drawable.ic_lock_silent_mode_off;
//通知的內容
//notification.tickerText = "發送菜單被點擊了!";
//通知時發出的聲音
//notification.defaults = Notification.DEFAULT_SOUND;
//intent = new Intent(MenuActivity.this,mNotification.class);
//intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
//pendindIntent = PendingIntent.getActivity(MenuActivity.this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
//notification.setLatestEventInfo(MenuActivity.this, "按鈕", "發送按鈕", pendindIntent);
//notificationManager.notify(913, notification);
break;
case Menu.FIRST + 5:
Toast.makeText(WqtMainActivity.this, "幫助菜單被點擊了!", Toast.LENGTH_LONG).show();
break;
case Menu.FIRST + 6:
AlertDialog alertDialog = new AlertDialog.Builder(WqtMainActivity.this)
.setTitle("提示!")
.setIcon(R.drawable.ask)
.setMessage("您確定要退出系統嗎?")
.setPositiveButton("確定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
System.exit(0);
dialog.cancel(); //提示對話框關閉
}
})
.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.cancel(); //關閉對話框
}
}).create();
alertDialog.show();
break;
}
return super.onMenuItemSelected(featureId, item);
}
3. Android 仿微信長按列表彈出PopupMenu菜單欄
彈出效果如下圖所示
可以使用setGravity()方法來指定彈出窗口與anchor視圖的對齊方式,例如修改對齊方式為Gravity.END
使用起來還是比較簡單的,但是好像大部分項目的需求是PopupMenu在用戶點擊的位置彈出,然而PopupMenu並沒有提供在指定坐標彈出的方法,所以只能咱們自己來實現咯!
想讓PopupMenu在指定彈出位置,首先咱們得先了解show()方法是如何讓PopupMenu彈出來的,所以只能去閱讀源碼了(Read The Fucking Source Code~)。
PopupMenu的show()方法很簡單,直接把任務轉給MenuPopupHelper來處理,處理流程:show() -> tryShow() -> showPopup(0, 0, false, false);
我們可以看到showPopup方法內有兩個參數int xOffset、int yOffset,根據注釋可以知道這就是相對於anchor視圖的坐標值。所以如果要指定PopupMenu的彈出位置,MenuPopupHelper應該這樣處理彈出邏輯:show(int x, int y) -> tryShow(int x, int y) -> showPopup(x, y, true, true)。
但是由於PopupMenu無法調用到MenuPopupHelper的show(int x, int y) 方法,因此我們只能使用反射機制繞過PopupMenu,直接調用MenuPopupHelper的show(int x, int y)方法。
到此為止,已經有了大致的解決思路,接下來看看具體實現。
最終彈出效果如下圖所示
4. android:如何實現點擊按鈕,彈出「正在載入數據,請稍候...」對話框,載入完了之後,對話框自動
實現過程其實很簡單。
第一步:自定義一個WaitingDialog,該Dialog支持自定義文本,一個可轉動的圖片,也可以增加一個定時關閉的介面,當然也可以選擇外部定時關閉。
第二步:在頁面調用。
如果我僅僅是這么回答,你可能覺得我在敷衍你,可是我為你的問題寫了一個DEMO,你可以直接去下載,在CSDN上,就不知道網路有沒有這么開放了,哈哈。
地址:http://download.csdn.net/download/yanjunhui2011/10019463