Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android实现底部弹出的对话框功能大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

环境:@H_675_2@

@H_450_4@
  • 主机:WIN10
  • 开发环境:Android studio 2.2 Preview 3
  • 说明:@H_675_2@
    两种方法实现底部弹出的对话框:

    @H_450_4@
  • Dialog
  • DialogFragment
  • 推荐用DialogFragment

    效果图:@H_675_2@

    Android实现底部弹出的对话框功能

    布局文件dialog_SELEct_call.xml:

    <?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://scheR_118_11845@as.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(),TimeUnit.SECONDS) 
            .compose(this.bindUntilEvent(FragmentEvent.DESTROY)) 
            .subscribe(v -> { 
              dialog.cancel(); 
              VideoSessionActivity.startActivityCallOut(getActivity(),TimeUnit.SECONDS) 
            .compose(this.bindUntilEvent(FragmentEvent.DESTROY)) 
            .subscribe(v -> dialog.cancel()); 
     
        RxView.touches(layoutVoice,motionEvent); 
          return false; 
        }).compose(this.bindUntilEvent(FragmentEvent.DESTROY)).subscribe(motionEvent -> {}); 
     
        RxView.touches(layoutVideo,motionEvent); 
          return false; 
        }).compose(this.bindUntilEvent(FragmentEvent.DESTROY)).subscribe(motionEvent -> {}); 
     
        return dialog; 
      } 
     
      private void dealLayoutTouch(View v,200)); 
            break; 
          case MotionEvent.ACTION_UP: 
            v.setBACkgroundColor(Color.WHITE); 
            break; 
        } 
      } 
    } 
    

    显示对话框前初始化参数:

    SELEctCallDialog.init(userId); 

    显示对话框后:

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

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

    大佬总结

    以上是大佬教程为你收集整理的Android实现底部弹出的对话框功能全部内容,希望文章能够帮你解决Android实现底部弹出的对话框功能所遇到的程序开发问题。

    如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
    如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。