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

首頁 > 系統 > Android > 正文

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

2019-12-12 02:55:35
字體:
來源:轉載
供稿:網友

環境:

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

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

  1. Dialog
  2. DialogFragment

推薦用DialogFragment

效果圖:

布局文件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(), ""); 

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 延川县| 横峰县| 河间市| 乌鲁木齐县| 岗巴县| 绥江县| 广饶县| 张掖市| 繁昌县| 大渡口区| 岑巩县| 会泽县| 平陆县| 崇州市| 临武县| 徐州市| 榆社县| 阳山县| 长汀县| 固阳县| 昌乐县| 宝丰县| 英吉沙县| 台北县| 进贤县| 三穗县| 监利县| 岑巩县| 赤水市| 留坝县| 江山市| 墨竹工卡县| 贡觉县| 河北区| 望城县| 封开县| 莱西市| 绥滨县| 龙川县| 合川市| 宁夏|