iT邦幫忙

2022 iThome 鐵人賽

DAY 3
0
Mobile Development

android studio 30天 精華筆記系列 第 3

精華筆記 Day3--PopView、ContextMenu

  • 分享至 

  • xImage
  •  

今天來講一個比將簡單的UI,這兩個的都是可以根據元件跳出視窗訊息的工具,通常在補述功能或提示時會使用到。

PopupWindow

  1. 先創建popupwindow_layout.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"
    android:background="@drawable/ic_pop_bg"
    android:orientation="vertical">
​
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="7"
        android:textColor="@color/black"
        android:text="已取消原感測器,新裝置尚未綁定" />
​
</LinearLayout>
  1. 初始化PopupWindow
private void initPopupWindow(View v) {
        //渲染第一步的View
       View view = LayoutInflater.from(mContext).inflate(R.layout.popupwindow_layout,null,false);
       //new PopupWindow 物件,並設置大小
       final PopupWindow popWindow = new PopupWindow(view,
                ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);
       //設置背景顏色         
//     popWindow.setBackgroundDrawable(newColorDrawable(getResources().getColor(R.color.gray)));
       //設置彈跳動畫  
       popWindow.setAnimationStyle(R.anim.anim_pop);
       //設置彈出位置
//       popWindow.showAtLocation(v, Gravity.NO_GRAVITY,0,0);
       //設置彈出位置位於指定View下方
       popWindow.showAsDropDown(v,0,0);
    }

顯示的位置有兩種方式:
1.showAtLocation

根據屏幕去設Gravity,有多種如Gravity.NO_GRAVITY、Gravity.TOP、Gravity.BOTTOM等。
2.showAsDropDown
直接指定彈出位置位於指定View下方,可透過偏移量微調。

位置的參數可以自己調適看看效果,分別代表x、y軸的偏移量,如popWindow.showAsDropDown(v,30,30);

ContextMenu

建立方法與onCreateOptionsMenu上的相似,如下。

  1. 建立menu(cont_view.xml)
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/confirm"
        android:title="確認" />
    <item
        android:id="@+id/cancel"
        android:title="取消"/>
</menu>
  1. onCreateContextMenu 渲染menu
@Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        MenuInflater inflater = new MenuInflater(this);
        //將menu渲染
        inflater.inflate(R.menu.cont_view,menu);
        if (menu != null){
            //設定標題
            menu.setHeaderTitle("我是ContextMenu");
        }
        super.onCreateContextMenu(menu, v, menuInfo);
    }
  1. onContextItemSelected 設定按鈕功能
    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.confirm:
                Toast.makeText(this,"確認",Toast.LENGTH_SHORT).show();
                break;
            case R.id.cancel:
                Toast.makeText(this,"取消",Toast.LENGTH_SHORT).show();
                break;
        }
        return super.onContextItemSelected(item);
    }

結果畫面

PopupWindow

https://ithelp.ithome.com.tw/upload/images/20220801/20139136BXEDKnjH8B.jpg

ContextMenu

https://ithelp.ithome.com.tw/upload/images/20220801/201391362IcGdeu4Ww.jpg


上一篇
精華筆記 Day2-- LOG日誌
下一篇
精華筆記 Day4--DrawerLayout
系列文
android studio 30天 精華筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言