android利用PopupWindow實現點選工具欄彈出下拉選單
package com.example.dropdownmenu; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.os.Bundle; import android.app.Activity; import android.graphics.drawable.ColorDrawable; import android.view.Menu; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.AdapterView; import android.widget.ListView; import android.widget.PopupWindow; import android.widget.RelativeLayout; import android.widget.SimpleAdapter; import android.widget.TextView; public class MainActivity extends Activity { // 工具欄 private RelativeLayout rlTopBar; // 左中右三個控制元件(工具欄裡) private TextView tvLeft; private TextView tvRight; private TextView tvMiddle; // 左中右三個彈出視窗 private PopupWindow popLeft; private PopupWindow popRight; private PopupWindow popMiddle; // 左中右三個layout private View layoutLeft; private View layoutRight; private View layoutMiddle; // 左中右三個ListView控制元件(彈出窗口裡) private ListView menulistLeft; private ListView menulistRight; private ListView menulistMiddle; // 選單資料項 private List<Map<String, String>> listLeft; private List<Map<String, String>> listRight; private List<Map<String, String>> listMiddle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initParam(); } private void initParam() { rlTopBar = (RelativeLayout) this.findViewById(R.id.rl_topbar); tvLeft = (TextView) this.findViewById(R.id.tv_left); tvLeft.setOnClickListener(myListener); // 初始化資料項 listLeft = new ArrayList<Map<String, String>>(); for (int i = 1; i < 10; i++) { HashMap<String, String> mapTemp = new HashMap<String, String>(); mapTemp.put("item", "left " + i); listLeft.add(mapTemp); } tvRight = (TextView) this.findViewById(R.id.tv_right); tvRight.setOnClickListener(myListener); // 初始化資料項 listRight = new ArrayList<Map<String, String>>(); for (int i = 1; i < 10; i++) { HashMap<String, String> mapTemp = new HashMap<String, String>(); mapTemp.put("item", "right " + i); listRight.add(mapTemp); } tvMiddle = (TextView) this.findViewById(R.id.tv_middle); tvMiddle.setOnClickListener(myListener); // 初始化資料項 listMiddle = new ArrayList<Map<String, String>>(); for (int i = 1; i < 10; i++) { HashMap<String, String> mapTemp = new HashMap<String, String>(); mapTemp.put("item", "mid " + i); listMiddle.add(mapTemp); } } private View.OnClickListener myListener = new View.OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.tv_left: if (popLeft != null && popLeft.isShowing()) { popLeft.dismiss(); } else { layoutLeft = getLayoutInflater().inflate( R.layout.pop_menulist, null); menulistLeft = (ListView) layoutLeft .findViewById(R.id.menulist); SimpleAdapter listAdapter = new SimpleAdapter( MainActivity.this, listLeft, R.layout.pop_menuitem, new String[] { "item" }, new int[] { R.id.menuitem }); menulistLeft.setAdapter(listAdapter); // 點選listview中item的處理 menulistLeft .setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // 改變頂部對應TextView值 String strItem = listLeft.get(arg2).get( "item"); tvLeft.setText(strItem); // 隱藏彈出視窗 if (popLeft != null && popLeft.isShowing()) { popLeft.dismiss(); } } }); // 建立彈出視窗 // 視窗內容為layoutLeft,裡面包含一個ListView // 視窗寬度跟tvLeft一樣 popLeft = new PopupWindow(layoutLeft, tvLeft.getWidth(), LayoutParams.WRAP_CONTENT); ColorDrawable cd = new ColorDrawable(-0000); popLeft.setBackgroundDrawable(cd); popLeft.setAnimationStyle(R.style.PopupAnimation); popLeft.update(); popLeft.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); popLeft.setTouchable(true); // 設定popupwindow可點選 popLeft.setOutsideTouchable(true); // 設定popupwindow外部可點選 popLeft.setFocusable(true); // 獲取焦點 // 設定popupwindow的位置(相對tvLeft的位置) int topBarHeight = rlTopBar.getBottom(); popLeft.showAsDropDown(tvLeft, 0, (topBarHeight - tvLeft.getHeight()) / 2); popLeft.setTouchInterceptor(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // 如果點選了popupwindow的外部,popupwindow也會消失 if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { popLeft.dismiss(); return true; } return false; } }); } break; case R.id.tv_right: if (popRight != null && popRight.isShowing()) { popRight.dismiss(); } else { layoutRight = getLayoutInflater().inflate( R.layout.pop_menulist, null); menulistRight = (ListView) layoutRight .findViewById(R.id.menulist); SimpleAdapter listAdapter = new SimpleAdapter( MainActivity.this, listRight, R.layout.pop_menuitem, new String[] { "item" }, new int[] { R.id.menuitem }); menulistRight.setAdapter(listAdapter); // 點選listview中item的處理 menulistRight .setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { String strItem = listRight.get(arg2).get( "item"); tvRight.setText(strItem); if (popRight != null && popRight.isShowing()) { popRight.dismiss(); } } }); popRight = new PopupWindow(layoutRight, tvRight.getWidth(), LayoutParams.WRAP_CONTENT); ColorDrawable cd = new ColorDrawable(-0000); popRight.setBackgroundDrawable(cd); popRight.setAnimationStyle(R.style.PopupAnimation); popRight.update(); popRight.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); popRight.setTouchable(true); // 設定popupwindow可點選 popRight.setOutsideTouchable(true); // 設定popupwindow外部可點選 popRight.setFocusable(true); // 獲取焦點 // 設定popupwindow的位置 int topBarHeight = rlTopBar.getBottom(); popRight.showAsDropDown(tvRight, 0, (topBarHeight - tvRight.getHeight()) / 2); popRight.setTouchInterceptor(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // 如果點選了popupwindow的外部,popupwindow也會消失 if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { popRight.dismiss(); return true; } return false; } }); } break; case R.id.tv_middle: if (popMiddle != null && popMiddle.isShowing()) { popMiddle.dismiss(); } else { layoutMiddle = getLayoutInflater().inflate( R.layout.pop_menulist, null); menulistMiddle = (ListView) layoutMiddle .findViewById(R.id.menulist); SimpleAdapter listAdapter = new SimpleAdapter( MainActivity.this, listMiddle, R.layout.pop_menuitem, new String[] { "item" }, new int[] { R.id.menuitem }); menulistMiddle.setAdapter(listAdapter); // 點選listview中item的處理 menulistMiddle .setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { String strItem = listMiddle.get(arg2).get( "item"); tvMiddle.setText(strItem); if (popMiddle != null && popMiddle.isShowing()) { popMiddle.dismiss(); } } }); popMiddle = new PopupWindow(layoutMiddle, tvMiddle.getWidth(), LayoutParams.WRAP_CONTENT); ColorDrawable cd = new ColorDrawable(-0000); popMiddle.setBackgroundDrawable(cd); popMiddle.setAnimationStyle(R.style.PopupAnimation); popMiddle.update(); popMiddle.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); popMiddle.setTouchable(true); // 設定popupwindow可點選 popMiddle.setOutsideTouchable(true); // 設定popupwindow外部可點選 popMiddle.setFocusable(true); // 獲取焦點 // 設定popupwindow的位置 int topBarHeight = rlTopBar.getBottom(); popMiddle.showAsDropDown(tvMiddle, 0, (topBarHeight - tvMiddle.getHeight()) / 2); popMiddle.setTouchInterceptor(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // 如果點選了popupwindow的外部,popupwindow也會消失 if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { popMiddle.dismiss(); return true; } return false; } }); } break; default: break; } } }; @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
以上程式碼有詳細的註釋,這裡就不做過多解釋啦!原理比較簡單,點選工具欄上的TextView會彈出PopupWindow,裡面包含ListView,顯示所有選單項。
相關推薦
android利用PopupWindow實現點選工具欄彈出下拉選單
package com.example.dropdownmenu; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.os.Bu
點選文字框彈出下拉框並賦值
實現下面效果 窗體:Form1: 一:窗體佈局:文字框一個或多個,下拉框一個,初始化隱藏,定義全域性變數 string click_value = ""; private void Form1_Load(object sender, EventArgs e) {
【android開發】使用PopupWindow實現頁面點選頂部彈出下拉選單
沒有太多花樣,也沒有很複雜的技術,就是簡單的PopupWindow的使用,可以實現點選彈出一個自定義的view,view裡可以隨便設計,常用的可以放一個listview。 demo中我只是一個點選展示,簡單的使用了fade in out的動畫效果,也沒有精美的圖片資源,
android仿微信、QQ等聊天介面,實現點選輸入框彈出軟鍵盤、點選其他區域收起軟鍵盤,預設滑動至最低端
如圖所示,點選輸入框及選擇圖片和傳送按鈕時軟鍵盤顯示且不消失,點選其他區域,則隱藏軟鍵盤。 主要程式碼如下: override fun dispatchTouchEvent(ev: MotionEvent?): Boolean { if (ev!!.getAction() ==
android 實現點選輸入框彈出日期選擇對話方塊(DatePickerDialog)
前言 這裡我們實現一個功能,點選日期輸入框(EditText),即可彈出日期選擇對話方塊(DatePickerDialog),等使用者選擇日期後,將使用者選擇的日期顯示在日期輸入框。 1.activity_main.xml 這裡只有一個TextView和EditText。
Android PopupWindow實現從頂部彈出下拉選單左、中、右
本例項的自定義下拉選單主要是繼承PopupWindow類來實現的彈出窗體,各種佈局效果可以根據自己定義設計。彈出的動畫效果主要用到了translate、alpha、scale,具體實現步驟如下: 先上效果圖如下:左邊下拉選單、中間下拉選
經典的js問題 實現點選li能夠彈出當前li索引與innerHTML的函式
經典的js問題 實現點選li能夠彈出當前li索引與innerHTML的函式 點選其中一項需要alert出如下結果: 按照我們平常的想法,程式碼應該是這樣寫的: var myul = document.getElementsByTagName("ul")[0];
實現Bootstrap導航條可點選和滑鼠懸停顯示下拉選單
使用Bootstrap導航條元件時,如果你的導航條帶有下拉選單,那麼這個帶下拉選單的導航在點選時只會浮出下拉選單,它本身的href屬性會失效,也就是失去了超連結功能,這並不是我想要的,我希望導航條的連結可以正常開啟它的連結,但又需要下拉選單功能,開始折騰~ 首先解決帶下拉
JS如何給ul下的所有li繫結點選事件,點選使其彈出下標和內容
這是一個非常常見的面試題,出題方式多樣,但考察點相同,下面我們來看看這幾種方法: 方法一: var itemli = document.getElementsByTagName("li"); for(var i = 0; i<itemli.length; i++){
jQuery點選頁面其他部分隱藏下拉選單
一、開發小要點 web頁面中,我們一般不用select、option來實現下拉選單效果,因為下拉框的樣式醜且難以美化,所以我們選擇控制ul顯示隱藏來實現同樣且高大上的效果,但是不能像下拉框那樣點選頁面其他部分,下拉選單收起或隱藏,該怎麼辦呢?只能用js這老大哥來控制了。 二、程式碼 HT
Android popwindow和fragment結合 左側彈出下拉選單 切換介面
延續上一篇文章Android 實現對話方塊圓角功能 ,在專案推進的過程當中,之前是已經用popwindow實現了點選按鈕,在按鈕下方彈出下拉選單,實現了類似微信右上角加好友的功能,有興趣的朋友,可以下載這個資源。迴歸主題,之前popwindow的使用,是固定在
Android 設定主題實現點選波紋效果
開頭先說說大家都知道的Material Design。 這裡推薦大苞米的系列部落格,介紹的很全面。 http://blog.csdn.net/a396901990/article/category/2634371 Material Design: &
Android 中Layout實現點選水波紋特效
Android5.0以後TextView,Button、TabLayout等控制元件預設都有點選水波紋效果,那佈局類LinearLayout、RelativeLayout、TableLayout、FrameLayout、AbsoluteLayou如何實現 A:
JS實現點選導航欄之後頁面滾動
原文地址:http://blog.csdn.net/luoshengmenwh/article/details/52830687 側欄導航點選實現頁面內容部分運動到相應位置,以及隨著body滾動條滾動使導航按鈕效果和頁面相應內容對應上的一個效果。 <!doct
android中怎麼實現點選按鈕進行頁面的跳轉
第一步:先建立好兩個Activity。如圖(PS:是建立Activity,不是建立java類。右擊包名,找到new-->other-->android-->AndroidActivity。然後根據提示完成Activity的建立。系統會自動建立好兩個Activ
Android中ClearEditText實現點選EditText輸入框右邊清除圖示來清除輸入內容的兩種方式
兩種EditText輸入框點選右邊清除圖示來實現清除功能的方式。 效果圖下圖: 佈局程式碼如下, <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmln
Android 通過ViewPager實現點選和滑動切換Fragment標籤頁
如上圖效果,要切換 Fragment 標籤頁,可以通過點選標籤或者滑動標籤頁來實現。 網上應該有封裝好的開源庫可以直接利用,不過這裡介紹一下自己通過 ViewPager 實現該效果。 首先是佈局檔案: <?xml version="1.0" encodi
ListView點選item底部彈出popupWindow刪除、修改、取消選擇框
先看一下效果: 點選單個item彈出選擇框,可以選擇刪除或者修改。刪除單條item,或者跳轉到修改頁面。 listview的佈局: <?xml version="1.0" encoding="utf-8"?> <LinearLay
android--EditTextView 點選後無法彈出輸入法
今日,遇到一個小問題,點選EdittextView後,輸入法彈窗無法彈出,搜尋之後發現http://blog.csdn.net/jdsjlzx/article/details/32314627 文章中給出了詳細的解釋,但是修改後依然無法彈出,最後發現: mEditText
bootstrap點選刪除按鈕彈出確認框實現
<%@ page language="java" import="com.student.servlet.*" contentType="text/html; charset=UTF-8"