首页 > 编程语言 >在线直播源码,自定义AlertDialog设置宽高并去掉默认的边框

在线直播源码,自定义AlertDialog设置宽高并去掉默认的边框

时间:2023-04-26 14:23:36浏览次数:44  
标签:dimen layout 自定义 宽高 源码 import android dp view

在线直播源码,自定义AlertDialog设置宽高并去掉默认的边框

1、先写一个自定义的AlertDialog。

 


package com.phone.common_library.dialog;
 
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.DialogInterface;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
 
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
 
import com.phone.common_library.R;
import com.phone.common_library.callback.OnCommonSingleParamCallback;
import com.phone.common_library.callback.OnItemViewClickListener;
 
public class StandardDialog {
 
    private AlertDialog alertDialog;
 
    private TextView tevTitle;
    private TextView tevContent;
    private View viewHorizontalLine;
    private TextView tevCancel;
    private View viewVerticalLine;
    private TextView tevOk;
 
 
    @SuppressLint("RestrictedApi")
    public StandardDialog(@NonNull Context context) {
        View view = LayoutInflater.from(context).inflate(R.layout.dialog_standard, null, false);
        tevTitle = (TextView) view.findViewById(R.id.tev_title);
        tevContent = (TextView) view.findViewById(R.id.tev_content);
        viewHorizontalLine = (View) view.findViewById(R.id.view_horizontal_line);
        tevCancel = (TextView) view.findViewById(R.id.tev_cancel);
        viewVerticalLine = (View) view.findViewById(R.id.view_vertical_line);
        tevOk = (TextView) view.findViewById(R.id.tev_ok);
 
 
        //设置R.style.dialog_decimal_style和setView(view, 0, 0, 0, 0)就可以去掉
        //AlertDialog的默认边框,此时AlertDialog的layout的宽高就是AlertDialog的宽高
        alertDialog = new AlertDialog.Builder(context, R.style.standard_dialog_style)
                .setView(view)
                .create();
        tevCancel.setOnClickListener(v -> {
            onItemViewClickListener.onItemClickListener(0, v);
        });
        tevOk.setOnClickListener(v -> {
            onItemViewClickListener.onItemClickListener(1, v);
        });
        alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                onCommonSingleParamCallback.onSuccess("");
            }
        });
        alertDialog.show();
 
        Window window = alertDialog.getWindow();
        if (window != null) {
//            window.setBackgroundDrawableResource(android.R.color.transparent);
            // 取消这些边框的关键代码
            window.setBackgroundDrawable(null);
            window.setGravity(Gravity.CENTER);
//            window.setWindowAnimations(R.style.PictureThemeDialogWindowStyle);
            WindowManager.LayoutParams params = window.getAttributes();
            window.setAttributes(params);
            //把 DecorView 的默认 padding 取消,同时 DecorView 的默认大小也会取消
            window.getDecorView().setPadding(0, 0, 0, 0);
        }
    }
 
    public void setTevContent(String content) {
        tevContent.setText(content);
    }
 
    public void setTevCancelHide() {
        viewVerticalLine.setVisibility(View.GONE);
        tevCancel.setVisibility(View.GONE);
    }
 
    public void setCannotHide() {
        alertDialog.setCancelable(false);
        alertDialog.setCanceledOnTouchOutside(false);
    }
 
    public void hideStandardDialog() {
        if (alertDialog != null) {
            alertDialog.dismiss();
            alertDialog = null;
        }
    }
 
    private OnItemViewClickListener onItemViewClickListener;
 
    public void setOnItemViewClickListener(OnItemViewClickListener onItemViewClickListener) {
        this.onItemViewClickListener = onItemViewClickListener;
    }
 
    private OnCommonSingleParamCallback<String> onCommonSingleParamCallback;
 
    public void setOnCommonSingleParamCallback(OnCommonSingleParamCallback<String> onCommonSingleParamCallback) {
        this.onCommonSingleParamCallback = onCommonSingleParamCallback;
    }
 
}

2、AlertDialog的layout。

 


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="@dimen/dp_300"
    android:layout_height="@dimen/dp_240"
    android:background="@drawable/corners_14_color_white"
    android:orientation="vertical">
 
    <!-- 注意:这里一定要写一个布局,这个布局和本布局的根布局宽高相同,要写固定宽高,不要使用match_parent,不然宽高可能会失效 -->
    <LinearLayout
        android:layout_width="@dimen/dp_300"
        android:layout_height="@dimen/dp_240"
        android:orientation="vertical"
        tools:ignore="UselessParent">
 
        <View
            android:layout_width="match_parent"
            android:layout_height="@dimen/dp_20" />
 
        <TextView
            android:layout_width="match_parent"
            android:layout_height="@dimen/dp_40"
            android:layout_gravity="center_horizontal"
            android:gravity="center"
            android:paddingStart="@dimen/dp_10"
            android:paddingEnd="@dimen/dp_10"
            android:text="Decimal"
            android:textColor="@color/blue"
            android:textSize="@dimen/sp_16" />
 
        <View
            android:layout_width="match_parent"
            android:layout_height="@dimen/dp_20" />
 
        <EditText
            android:id="@+id/edt_input"
            android:layout_width="@dimen/dp_240"
            android:layout_height="@dimen/dp_40"
            android:layout_gravity="center_horizontal"
            android:background="@drawable/corners_14_color_white_stroke_1_color_80000000"
            android:gravity="center_vertical"
            android:paddingStart="@dimen/dp_15"
            android:paddingEnd="@dimen/dp_15"
            android:textColor="@color/colorBlack333"
            android:textSize="@dimen/sp_16" />
 
        <View
            android:layout_width="match_parent"
            android:layout_height="@dimen/dp_20" />
 
        <FrameLayout
            android:layout_width="@dimen/dp_200"
            android:layout_height="@dimen/dp_40"
            android:layout_gravity="center_horizontal">
 
            <TextView
                android:id="@+id/tev_cancel"
                android:layout_width="@dimen/dp_80"
                android:layout_height="@dimen/dp_40"
                android:layout_gravity="start"
                android:background="@drawable/corners_14_color_white_stroke_1_color_80000000"
                android:gravity="center"
                android:paddingStart="@dimen/dp_10"
                android:paddingEnd="@dimen/dp_10"
                android:text="cancel"
                android:textColor="@color/color_80000000"
                android:textSize="@dimen/sp_16" />
 
            <TextView
                android:id="@+id/tev_confirm"
                android:layout_width="@dimen/dp_80"
                android:layout_height="@dimen/dp_40"
                android:layout_gravity="end"
                android:background="@drawable/corners_14_color_white_stroke_1_color_blue"
                android:gravity="center"
                android:paddingStart="@dimen/dp_10"
                android:paddingEnd="@dimen/dp_10"
                android:text="confirm"
                android:textColor="@color/blue"
                android:textSize="@dimen/sp_16" />
 
        </FrameLayout>
    </LinearLayout>
 
</LinearLayout> 

 

以上就是在线直播源码,自定义AlertDialog设置宽高并去掉默认的边框, 更多内容欢迎关注之后的文章

 

标签:dimen,layout,自定义,宽高,源码,import,android,dp,view
From: https://www.cnblogs.com/yunbaomengnan/p/17355830.html

相关文章

  • go channel源码阅读
    gochannel源码阅读channel介绍channel是一个类型管道,通过它可以在groutine之间发送消息核心数据结构channel内部数据结构是固定长度的双向循环列表按顺序往里面写数据,写满之后又从0开始写chan中的两个重要组件是buf和waitq,所有的行为和实现都是围绕着两个组件进行的typ......
  • junit源码分析
    JUnit源码分析(一)——Command模式和Composite模式JUnit的源码相比于spring和hibernate来说比较简单,但麻雀虽小,五脏俱全,其中用到了比较多的设计模式。很多人已经在网上分享了他们对JUnit源码解读心得,我这篇小文谈不出什么新意,本来不打算写,可最近工作上......
  • SpringSecurity从入门到精通:从数据库查询权限信息&自定义失败处理
    从数据库查询权限信息      记得打开redis      自定义失败处理我们还希望在认证失败或者是授权失败的情况下也能和我们的接口一样返回相同结构的json,这样可以让前端能对响应进行统一的处理。要实现这个功能我们需要知道SpringSecurity......
  • 从数据库查询权限信息与自定义失败处理
    从数据库查询权限信息代码实现我们只需要根据用户id去查询到其所对应的权限信息即可。​  所以我们可以先定义个mapper,其中提供一个方法可以根据userid查询权限信息。packagecom.example.qinghuatokendemo.Mapper;importc......
  • 自定义实现SpringBoot Starter
    在日常的开发中,会将开发的公共jar包发布的仓库,这样可以实现代码的复用。这里介绍的是自定义SpringBootStarter的方式,对于采用SpringBoot开发的项目来说,引入和使用非常的方便。1、SpringBootStarter介绍SpringBoot和Spring相比,在配置上简化了很多,核心就是因为Starter引入了一些......
  • go之logrus自定义日志样式
    日志功能配置:logrus.gopackagecoreimport("bytes""fmt""github.com/sirupsen/logrus""io""os""path")const(red=31yellow=33blue=36gray......
  • Telegram 源码解读点滴记录
    1.test_callable_plain,作用:判断参数是否与函数声明一致usingfalse_t=char;structtrue_t{ false_tdata[2];};static_assert(sizeof(false_t)!=sizeof(true_t),"Ican'twork:(");template< typenameMethod, typename...Args, typename=decltype(......
  • django admin 中对自定义字段进行搜索
    我想在djangoadmin中使用investment字段进行搜索,但总是得到Cannotresolvekeyword'investment'intofield.选项是Model字段。有什么方法可以使用investment字段进行搜索?fromdjango.db.modelsimportCountclassReportsAdmin(admin.ModelAdmin):definvestmen......
  • Django之视图函数层 (必会三板斧 JsonResponse对象 request对象获取文件 FBV与CBV
    目录视图层之必会三板斧用来处理请求的视图函数都必须返回HttpResponse对象情况一:啥也不返回这里会报一个没有返回HttpResponse对象的错误,由此可见必须要返回一个HttpResponse对象情况二:返回HttpResponse对象点击Ctrl键查看源码可见是HttpResponse类,所以会返回一个值情......
  • jdk并发包 CopyOnWriteArrayList源码分析
    CopyOnWriteArrayList是jdk1.5并法包里面用于处理高并发下,读多写少的情况下,降低锁等待的集合类。下面对该类实现做一个简要的分析1,首先CopyOnWriteArrayList是实现了List接口,对=List接口的相关方法进行了实现。2,下面的它的add方法,会首先加锁,然后copy原List内部的数组,然后对新数组长......