国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android中Dialog自定義上下文花式菜單

2019-10-22 18:26:35
字體:
來源:轉載
供稿:網友

這是一個類似于QQ里面長按消息彈出菜單的效果,菜單跟著item動
閑話不說,上代碼
先自定義一個Dialog

 

import android.app.Dialog;import android.content.Context;import android.os.Bundle;import android.view.View;import android.widget.TextView;import io.dcloud.H5B79C397.R;/** * Created by Administrator on 2017/9/19 0019. */public class SelfDialog extends Dialog {  private TextView copy;//確定按鈕  private TextView del;//取消按鈕  private onNoOnclickListener noOnclickListener;//取消按鈕被點擊了的監聽器  private onYesOnclickListener yesOnclickListener;//確定按鈕被點擊了的監聽器  public SelfDialog(Context context) {    super(context, R.style.MyDialog);  }  public void setNoOnclickListener(String str, onNoOnclickListener onNoOnclickListener) {    if (str != null) {      //noStr = str;    }    this.noOnclickListener = onNoOnclickListener;  }  public void setYesOnclickListener(String str, onYesOnclickListener onYesOnclickListener) {    if (str != null) {      //yesStr = str;    }    this.yesOnclickListener = onYesOnclickListener;  }  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.layout_noticeactivity_dialog);    //按空白處不能取消動畫    setCanceledOnTouchOutside(true);    //初始化界面控件    initView();    //初始化界面數據    //初始化界面控件的事件    initEvent();  }  private void initEvent() {    //設置確定按鈕被點擊后,向外界提供監聽    del.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View v) {        if (yesOnclickListener != null) {          yesOnclickListener.onYesClick();        }      }    });    //設置取消按鈕被點擊后,向外界提供監聽    copy.setOnClickListener(new View.OnClickListener() {      @Override      public void onClick(View v) {        if (noOnclickListener != null) {          noOnclickListener.onNoClick();        }      }    });  }  private void initView() {    del = (TextView) findViewById(R.id.del);    copy = (TextView) findViewById(R.id.text);  }  public interface onYesOnclickListener {    public void onYesClick();  }  public interface onNoOnclickListener {    public void onNoClick();  }}

然后看Dialog里面的布局文件

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="horizontal">  <TextView    android:text="復制"    android:clickable="true"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:id="@+id/text"    android:drawableTop="@mipmap/collect"/>  <TextView    android:layout_marginLeft="15dp"    android:clickable="true"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="刪除"    android:id="@+id/del"    android:drawableTop="@mipmap/myself"/></LinearLayout>

還給Dialog設置了一個樣式

  <style name="MyDialog" parent="android:style/Theme.Dialog">    <!--背景顏色及和透明程度-->    <item name="android:windowBackground">@android:color/transparent</item>    <!--是否去除標題 -->    <item name="android:windowNoTitle">true</item>    <!--是否去除邊框-->    <item name="android:windowFrame">@null</item>    <!--是否浮現在activity之上-->    <item name="android:windowIsFloating">true</item>    <!--是否模糊-->    <item name="android:backgroundDimEnabled">false</item>  </style>

然后看主代碼

 

public class MenuTestActivity extends Activity {  private ListView listView;  private SelfDialog selfDialog;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_menu_test);    listView = (ListView) findViewById(R.id.list);    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(MenuTestActivity.this, android.R.layout.simple_list_item_1);    adapter.add("1");    adapter.add("1");    adapter.add("1");    adapter.add("1");    adapter.add("1");    adapter.add("1");    adapter.add("1");    adapter.add("1");    adapter.add("1");    adapter.add("1");    adapter.add("1");    adapter.add("1");    adapter.add("1");    adapter.add("1");    adapter.add("1");    listView.setAdapter(adapter);    listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {      @Override      public boolean onItemLongClick(final AdapterView<?> parent, final View view, final int position, long id) {        int[] location = new int[2];        // parent.getItemAtPosition(position).getLocationOnScreen(location);        view.getLocationOnScreen(location);//當前item的坐標        int x = location[0];        int y = location[1];        System.out.println("x:"+x+"y:"+y);//獲取控件位置坐標可采用以上方法        selfDialog = new SelfDialog(MenuTestActivity.this);       // Window window = selfDialog.getWindow();        // window.setContentView(view);        Window dialogWindow = selfDialog.getWindow();        WindowManager.LayoutParams lp = dialogWindow.getAttributes();        dialogWindow.setGravity(Gravity.LEFT | Gravity.TOP);        lp.x = location[0]+80; // 新位置X坐標        lp.y = location[1]-30; // 新位置Y坐標        // 當Window的Attributes改變時系統會調用此函數,可以直接調用以應用上面對窗口參數的更改,也可以用setAttributes        // dialog.onWindowAttributesChanged(lp);        dialogWindow.setAttributes(lp);        selfDialog.setCanceledOnTouchOutside(true);// 設置點擊屏幕Dialog不消失        selfDialog.setYesOnclickListener("確定", new SelfDialog.onYesOnclickListener() {          @Override          public void onYesClick() {            Toast.makeText(MenuTestActivity.this, adapter.getItem(position), Toast.LENGTH_LONG).show();            selfDialog.dismiss();          }        });        selfDialog.setNoOnclickListener("取消", new SelfDialog.onNoOnclickListener() {          @Override          public void onNoClick() {            Toast.makeText(MenuTestActivity.this, adapter.getItem(position), Toast.LENGTH_LONG).show();            selfDialog.dismiss();          }        });        selfDialog.show();        return true;      }    });  }}

主程序的布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:app="http://schemas.android.com/apk/res-auto"  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  tools:context="io.dcloud.H5B79C397.testActivity.MenuTestActivity">  <ListView    android:layout_width="match_parent"    android:layout_height="match_parent"    android:id="@+id/list"></ListView></LinearLayout>

效果圖:

Android,Dialog,菜單

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大埔县| 正蓝旗| 黄大仙区| 全椒县| 西乌珠穆沁旗| 荆州市| 乌拉特后旗| 和硕县| 九龙城区| 娱乐| 济源市| 定边县| 广宁县| 平陆县| 大化| 乾安县| 麻江县| 道孚县| 阳泉市| 南昌市| 黄梅县| 香格里拉县| 南靖县| 静海县| 时尚| 维西| 西藏| 墨脱县| 宝丰县| 社旗县| 望奎县| 普兰县| 漯河市| 红桥区| 湖口县| 曲麻莱县| 河北省| 卓尼县| 满洲里市| 建宁县| 肃宁县|