溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時間:2021-07-27 14:58:09 來源:億速云 閱讀:117 作者:小新 欄目:移動開發(fā)

這篇文章主要為大家展示了“Android中Dialog如何自定義上下文花式菜單”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Android中Dialog如何自定義上下文花式菜單”這篇文章吧。


先自定義一個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;//取消按鈕被點擊了的監(jiān)聽器
  private onYesOnclickListener yesOnclickListener;//確定按鈕被點擊了的監(jiān)聽器
  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();
    //初始化界面數(shù)據(jù)
    //初始化界面控件的事件
    initEvent();
  }
  private void initEvent() {
    //設(shè)置確定按鈕被點擊后,向外界提供監(jiān)聽
    del.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        if (yesOnclickListener != null) {
          yesOnclickListener.onYesClick();
        }
      }
    });
    //設(shè)置取消按鈕被點擊后,向外界提供監(jiān)聽
    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="復(fù)制"
    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設(shè)置了一個樣式

  <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>
    <!--是否浮現(xiàn)在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);//當(dāng)前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坐標


        // 當(dāng)Window的Attributes改變時系統(tǒng)會調(diào)用此函數(shù),可以直接調(diào)用以應(yīng)用上面對窗口參數(shù)的更改,也可以用setAttributes
        // dialog.onWindowAttributesChanged(lp);
        dialogWindow.setAttributes(lp);

        selfDialog.setCanceledOnTouchOutside(true);// 設(shè)置點擊屏幕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如何自定義上下文花式菜單

以上是“Android中Dialog如何自定義上下文花式菜單”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI