日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

项目回顾-PopupWindow

發布時間:2023/12/18 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 项目回顾-PopupWindow 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

右上菜單,可以通過 重寫?onCreateOptionsMenu指定 menu, 重寫?onOptionsItemSelected 來響應點擊事件

不過 這個菜單在某些手機上彈出的有點卡頓,而且如果不對主題進行設置,會從actionbar 上直接彈出,而不是下面

如果想從下面彈出,要先添加一個style

<style name="MenuStyle" parent="@style/Widget.AppCompat.Light.PopupMenu.Overflow"><item name="overlapAnchor">false</item></style>

之后在activity引用的主題中添加一行 ?就行了

<item name="actionOverflowMenuStyle">@style/MenuStyle</item>

?

Menu在沒有特別要求的情況還是很好用的,但是如果要求比較復雜的時候就不如用PopupWindow了

要實現如圖的效果

?

?先拿到從美工拿到的圖片 ?

?

打開sdk的 tools文件夾 ? 打開?draw9patch.bat ?把圖片拖進去

畫黑邊 ? 左上兩個方向的黑邊 表示拉伸部分

右下表示布局中控件內容顯示的區域

如果畫錯了 按住shift 抹掉

完成之后save

?

?

布局

1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="wrap_content" 4 android:layout_height="wrap_content" 5 android:background="@drawable/pop_bg_shadow9" 6 android:gravity="center_horizontal" 7 android:orientation="vertical" 8 > 9 10 <LinearLayout 11 android:id="@+id/ll_action_config" 12 android:layout_width="match_parent" 13 android:layout_height="wrap_content" 14 android:gravity="center_vertical" 15 android:orientation="horizontal" 16 android:padding="10dp" 17 > 18 19 <ImageView 20 android:layout_width="25dp" 21 android:layout_height="25dp" 22 android:src="@drawable/pop_setting"/> 23 24 <TextView 25 android:layout_width="wrap_content" 26 android:layout_height="wrap_content" 27 android:paddingLeft="15dp" 28 android:text="關聯配置" 29 android:textColor="@color/white"/> 30 31 </LinearLayout> 32 33 <LinearLayout 34 android:id="@+id/ll_action_history" 35 android:layout_width="match_parent" 36 android:layout_height="wrap_content" 37 android:gravity="center_vertical" 38 android:orientation="horizontal" 39 android:padding="10dp" 40 > 41 42 <ImageView 43 android:layout_width="25dp" 44 android:layout_height="25dp" 45 android:src="@drawable/pop_history"/> 46 47 <TextView 48 android:layout_width="wrap_content" 49 android:layout_height="wrap_content" 50 android:paddingLeft="15dp" 51 android:text="歷史記錄" 52 android:textColor="@color/white"/> 53 54 </LinearLayout> 55 56 <LinearLayout 57 android:id="@+id/ll_action_ip" 58 android:layout_width="match_parent" 59 android:layout_height="wrap_content" 60 android:gravity="center_vertical" 61 android:orientation="horizontal" 62 android:padding="10dp" 63 > 64 65 <ImageView 66 android:layout_width="25dp" 67 android:layout_height="25dp" 68 android:src="@drawable/pop_ip"/> 69 70 <TextView 71 android:layout_width="wrap_content" 72 android:layout_height="wrap_content" 73 android:paddingLeft="15dp" 74 android:text="IP地址" 75 android:textColor="@color/white"/> 76 77 </LinearLayout> 78 79 <LinearLayout 80 android:id="@+id/ll_action_about" 81 android:layout_width="match_parent" 82 android:layout_height="wrap_content" 83 android:gravity="center_vertical" 84 android:orientation="horizontal" 85 android:padding="10dp" 86 > 87 88 <ImageView 89 android:layout_width="25dp" 90 android:layout_height="25dp" 91 android:src="@drawable/pop_about"/> 92 93 <TextView 94 android:layout_width="wrap_content" 95 android:layout_height="wrap_content" 96 android:paddingLeft="15dp" 97 android:text="關于" 98 android:textColor="@color/white"/> 99 100 </LinearLayout> 101 </LinearLayout> View Code

?

現在要實現點擊 右上菜單 彈出 這個布局,同時菜單的圖標會變換。

?

在menu目錄 新建一個xml ? ?默認icon是?more_close

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><itemandroid:id="@+id/action_menu"android:icon="@drawable/more_close"android:title="菜單"app:showAsAction="always"></item> </menu>

?

回到activity

@Overridepublic boolean onCreateOptionsMenu(Menu menu) {this.menu = menu;getMenuInflater().inflate(R.menu.face, menu);return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.action_menu:View view=findViewById(R.id.action_menu);showActionMenuPopup(view);break;}return super.onOptionsItemSelected(item);}

?

紅色部分都是關鍵部分

先看 ?showActionMenuPopup ?這個彈出菜單的方法?

?

首先要改變菜單的圖標

menu.getItem(0).setIcon(getResources().getDrawable(R.drawable.more_open));

這個menu是 全局的

private Menu menu;

在?onCreateOptionsMenu 中 把這個menu初始化

?

之后 設置?PopupWindow?

1 View view=LayoutInflater.from(this).inflate(R.layout.popup_actionmenu,null); 2 actionmenupopupWindow = new PopupWindow(view, LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT); 3 actionmenupopupWindow.setContentView(view); 4 5 view.findViewById(R.id.ll_action_config).setOnClickListener(this); 6 view.findViewById(R.id.ll_action_history).setOnClickListener(this); 7 view.findViewById(R.id.ll_action_ip).setOnClickListener(this); 8 view.findViewById(R.id.ll_action_about).setOnClickListener(this); 9 10 actionmenupopupWindow.setFocusable(true); 11 actionmenupopupWindow.setBackgroundDrawable(new BitmapDrawable()); 12 13 actionmenupopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { 14 @Override 15 public void onDismiss() { 16 menu.getItem(0).setIcon(getResources().getDrawable(R.drawable.more_close)); 17 } 18 }); 19 20 actionmenupopupWindow.showAsDropDown(v);

?

5-8 ?設置彈出菜單的點擊事件

11 ?點擊PopupWindow之外的地方PopupWindow消失

13-18 ?監聽PopupWindow消失 ?改變菜單圖標

20 ?showAsDropDown ?從下方出現 ? 肯定要是一個view的, 回到onOptionsItemSelected ?找到右上菜單的view ?傳入了方法中,最后在這里使用

?

還有一個顯示方法 ? 直接指定位置,不過要測量出狀態欄和actionbar的高度

actionmenupopupWindow.showAtLocation(findViewById(R.id.action_menu),Gravity.RIGHT|Gravity.TOP ,0, getStatusBarHeight(this)+getSupportActionBar().getHeight());

?

?

IOS有一個底部菜單控件?UIActionSheet

安卓方面想實現這個 ?有第三方的 ActionSheet? ? 有 谷歌官方的design包 ?BottomSheet

用PopupWindow 也可以實現

?

rootview = LayoutInflater.from(this).inflate(R.layout.activity_main,null);

?

1 View view= LayoutInflater.from(this).inflate(R.layout.popup_camera_sel,null); 2 bottompopupWindow = new PopupWindow(view, LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT); 3 4 bottompopupWindow.setContentView(view); 5 6 view.findViewById(R.id.ll_gallery).setOnClickListener(this); 7 view.findViewById(R.id.ll_camera).setOnClickListener(this); 8 view.findViewById(R.id.ll_cancle).setOnClickListener(this); 9 10 WindowManager.LayoutParams lp = getWindow().getAttributes(); 11 lp.alpha = 0.6f; 12 getWindow().setAttributes(lp); 13 14 bottompopupWindow.setFocusable(true); 15 bottompopupWindow.setBackgroundDrawable(new BitmapDrawable()); 16 bottompopupWindow.setAnimationStyle(R.style.mypopwindow_anim_style); 17 18 bottompopupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { 19 @Override 20 public void onDismiss() { 21 WindowManager.LayoutParams lp = getWindow().getAttributes(); 22 lp.alpha = 1f; 23 getWindow().setAttributes(lp); 24 } 25 }); 26 bottompopupWindow.showAtLocation(rootview, Gravity.BOTTOM, 0, 0);

?

10-12 ? 18-25 ? 改變屏幕的透明度

?

style ? ? ?從底部升上來 降下去的動畫?

<style name="mypopwindow_anim_style"><item name="android:windowEnterAnimation">@anim/popshow_anim</item><!-- 指定顯示的動畫xml --><item name="android:windowExitAnimation">@anim/pophidden_anim</item><!-- 指定消失的動畫xml --></style>

show

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="500"android:fromYDelta="50%p"android:toYDelta="0" /> </set>

hide

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:duration="500"android:fromYDelta="0"android:toYDelta="50%p" /> </set>

?

布局

<?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="wrap_content"android:background="@color/white"android:orientation="vertical"android:gravity="center"><LinearLayoutandroid:id="@+id/ll_gallery"android:layout_width="match_parent"android:layout_height="50dp"android:gravity="center"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="相冊"android:textColor="#333333"android:textSize="20sp"/></LinearLayout><!--<TextView--><!--android:layout_width="200dp"--><!--android:layout_height="1dp"--><!--android:background="#838B8B"--><!--/>--><ImageViewandroid:src="@drawable/line_pop"android:scaleType="centerCrop"android:layout_width="match_parent"android:layout_height="wrap_content"/><LinearLayoutandroid:id="@+id/ll_camera"android:layout_width="match_parent"android:layout_height="50dp"android:gravity="center"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="相機"android:textColor="#333333"android:textSize="20sp"/></LinearLayout><!--<TextView--><!--android:layout_width="200dp"--><!--android:layout_height="1dp"--><!--android:background="#838B8B"--><!--/>--><ImageViewandroid:src="@drawable/line_pop"android:scaleType="centerCrop"android:layout_width="match_parent"android:layout_height="wrap_content"/><LinearLayoutandroid:id="@+id/ll_cancle"android:layout_width="match_parent"android:layout_height="50dp"android:gravity="center"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="取消"android:textSize="20sp"/></LinearLayout></LinearLayout> View Code

?

?

?

?

最后 記得響應完點擊事件之后 ?dismiss 關閉PopupWindow

?

轉載于:https://www.cnblogs.com/demon9/p/6021980.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的项目回顾-PopupWindow的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。