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

首頁 > 系統 > Android > 正文

Android實現底部彈出的對話框功能

2019-10-23 18:29:25
字體:
來源:轉載
供稿:網友

環境:

  1. 主機:WIN10
  2. 開發環境:Android Studio 2.2 Preview 3

說明:
兩種方法實現底部彈出的對話框:

  1. Dialog
  2. DialogFragment

推薦用DialogFragment

效果圖:

android底部對話框,android底部彈出窗口,android,底部彈出菜單

布局文件dialog_select_call.xml:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   android:orientation="vertical" android:layout_width="match_parent"   android:layout_height="match_parent">    <RelativeLayout     android:id="@+id/layout_voice"     android:layout_width="match_parent"     android:layout_height="wrap_content"     android:background="@color/white">      <TextView       android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:layout_alignParentStart="true"       android:layout_centerInParent="true"       android:textSize="16sp"       android:textColor="@color/black"       android:layout_marginLeft="16dp"       android:layout_marginRight="16dp"       android:layout_marginTop="16dp"       android:layout_marginBottom="16dp"       android:text="語音課堂"/>   </RelativeLayout>    <View     android:layout_width="fill_parent"     android:layout_height="0.1dp"     android:background="#b4b4b4"     android:layout_marginLeft="16dp"     android:layout_marginRight="16dp"/>    <RelativeLayout     android:id="@+id/layout_video"     android:layout_width="match_parent"     android:layout_height="wrap_content"     android:background="@color/white">      <TextView       android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:layout_alignParentStart="true"       android:layout_centerInParent="true"       android:textSize="16sp"       android:textColor="@color/black"       android:layout_marginLeft="16dp"       android:layout_marginRight="16dp"       android:layout_marginTop="16dp"       android:layout_marginBottom="16dp"       android:text="視頻課堂"/>   </RelativeLayout>    <View     android:layout_width="fill_parent"     android:layout_height="0.1dp"     android:background="#b4b4b4"     android:layout_marginLeft="16dp"     android:layout_marginRight="16dp"/>    <RelativeLayout     android:layout_width="match_parent"     android:layout_height="wrap_content"     android:background="@color/white">      <Button       android:id="@+id/cancel"       android:layout_width="match_parent"       android:layout_height="wrap_content"       android:text="取消"       android:layout_marginLeft="16dp"       android:layout_marginRight="16dp"       android:layout_marginTop="16dp"       android:layout_marginBottom="16dp"/>   </RelativeLayout>  </LinearLayout> 

Dialog實現源碼:

初始化:

private void dialogSelectCallInit() {     dialogSelectCall = new Dialog(this, R.style.DialogPopBottom);     View inflate = LayoutInflater.from(this).inflate(R.layout.dialog_select_call, null);     dialogSelectCall.setContentView(inflate);      Window dialogWindow = dialogSelectCall.getWindow();     dialogWindow.setGravity(Gravity.BOTTOM);      WindowManager.LayoutParams lp = dialogWindow.getAttributes();     lp.x = 0;     lp.y = 0;     lp.width = getResources().getDisplayMetrics().widthPixels;     dialogWindow.setAttributes(lp);      RelativeLayout layoutVoice = (RelativeLayout) inflate.findViewById(R.id.layout_voice);     RelativeLayout layoutVideo = (RelativeLayout) inflate.findViewById(R.id.layout_video);     Button buttonCancel = (Button) inflate.findViewById(R.id.cancel);      RxView.clicks(layoutVoice)         .throttleFirst(2, TimeUnit.SECONDS)         .compose(this.bindUntilEvent(ActivityEvent.DESTROY))         .subscribe(v -> { //          dialogSelectCall.cancel();           VoiceSessionActivity.startActivityCallOut(this, userId);         });      RxView.clicks(layoutVideo)         .throttleFirst(2, TimeUnit.SECONDS)         .compose(this.bindUntilEvent(ActivityEvent.DESTROY))         .subscribe(v -> { //          dialogSelectCall.cancel(); //          VideoSessionActivity.startActivityCallOut(this, userId);         });      RxView.clicks(buttonCancel)         .throttleFirst(2, TimeUnit.SECONDS)         .compose(this.bindUntilEvent(ActivityEvent.DESTROY))         .subscribe(v -> dialogSelectCall.cancel());      RxView.touches(layoutVoice, motionEvent -> {       dealLayoutTouch(layoutVoice, motionEvent);       return false;     }).compose(this.bindUntilEvent(ActivityEvent.DESTROY)).subscribe(motionEvent -> {});      RxView.touches(layoutVideo, motionEvent -> {       dealLayoutTouch(layoutVideo, motionEvent);       return false;     }).compose(this.bindUntilEvent(ActivityEvent.DESTROY)).subscribe(motionEvent -> {});   }    private void dealLayoutTouch(View v, MotionEvent event) {     switch (event.getAction()) {       case MotionEvent.ACTION_DOWN:         v.setBackgroundColor(Color.rgb(200, 200, 200));         break;       case MotionEvent.ACTION_UP:         v.setBackgroundColor(Color.WHITE);         break;     }   } 

顯示對話框:

dialogSelectCall.show() 

DialogFragment實現源碼:

定義了一個類SelectCallDialog.Java繼承DialogFragment

package com.bazhangkeji.classroom.common;  import android.app.Dialog; import android.app.FragmentManager; import android.graphics.Color; import android.os.Bundle; import android.support.annotation.NonNull; import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.Button; import android.widget.RelativeLayout;  import com.bazhangkeji.classroom.R; import com.bazhangkeji.classroom.session.VideoSessionActivity; import com.bazhangkeji.classroom.session.VoiceSessionActivity; import com.jakewharton.rxbinding2.view.RxView; import com.trello.rxlifecycle2.android.FragmentEvent; import com.trello.rxlifecycle2.components.RxDialogFragment;   import java.util.concurrent.TimeUnit;  public class SelectCallDialog extends RxDialogFragment {   private Dialog dialog;   private String userId;    /**    * 初始化.必須調用一次    * @param userId: 目標用戶id    */   public void init(String userId) {     this.userId = userId;   }    @NonNull   @Override   public Dialog onCreateDialog(Bundle savedInstanceState) {     dialog = new Dialog(getActivity(), R.style.DialogPopBottom);      View inflate = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_select_call, null);     dialog.setContentView(inflate);     dialog.setCanceledOnTouchOutside(true);      Window window = dialog.getWindow();     WindowManager.LayoutParams lp = window.getAttributes();     lp.gravity = Gravity.BOTTOM;     lp.width = WindowManager.LayoutParams.MATCH_PARENT;     window.setAttributes(lp);      RelativeLayout layoutVoice = (RelativeLayout) inflate.findViewById(R.id.layout_voice);     RelativeLayout layoutVideo = (RelativeLayout) inflate.findViewById(R.id.layout_video);     Button buttonCancel = (Button) dialog.findViewById(R.id.cancel);      RxView.clicks(layoutVoice)         .throttleFirst(2, TimeUnit.SECONDS)         .compose(this.bindUntilEvent(FragmentEvent.DESTROY))         .subscribe(v -> {           dialog.cancel();           VoiceSessionActivity.startActivityCallOut(getActivity(), userId);         });      RxView.clicks(layoutVideo)         .throttleFirst(2, TimeUnit.SECONDS)         .compose(this.bindUntilEvent(FragmentEvent.DESTROY))         .subscribe(v -> {           dialog.cancel();           VideoSessionActivity.startActivityCallOut(getActivity(), userId);         });      RxView.clicks(buttonCancel)         .throttleFirst(2, TimeUnit.SECONDS)         .compose(this.bindUntilEvent(FragmentEvent.DESTROY))         .subscribe(v -> dialog.cancel());      RxView.touches(layoutVoice, motionEvent -> {       dealLayoutTouch(layoutVoice, motionEvent);       return false;     }).compose(this.bindUntilEvent(FragmentEvent.DESTROY)).subscribe(motionEvent -> {});      RxView.touches(layoutVideo, motionEvent -> {       dealLayoutTouch(layoutVideo, motionEvent);       return false;     }).compose(this.bindUntilEvent(FragmentEvent.DESTROY)).subscribe(motionEvent -> {});      return dialog;   }    private void dealLayoutTouch(View v, MotionEvent event) {     switch (event.getAction()) {       case MotionEvent.ACTION_DOWN:         v.setBackgroundColor(Color.rgb(200, 200, 200));         break;       case MotionEvent.ACTION_UP:         v.setBackgroundColor(Color.WHITE);         break;     }   } } 

顯示對話框前初始化參數:

selectCallDialog.init(userId); 

顯示對話框后:

selectCallDialog.show(getFragmentManager(), ""); 

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


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵寿县| 通化县| 绥江县| 扶余县| 定州市| 张家港市| 北票市| 革吉县| 彰化县| 银川市| 静宁县| 成都市| 辉县市| 曲阜市| 清丰县| 阿城市| 仁怀市| 上虞市| 永平县| 晋宁县| 北京市| 武夷山市| 米泉市| 阿拉善盟| 金阳县| 长宁区| 青州市| 南汇区| 三明市| 莱阳市| 大余县| 闽清县| 衡阳县| 奉贤区| 萨嘎县| 绍兴县| 泌阳县| 广饶县| 淮阳县| 万宁市| 阳春市|