Android自定义拨打电话Dialog

自定义实现拨打电话弹框效果图如下:
这里写图片描述
布局文件activity_main:

<?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:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.ranlegeran.telphonedialog.MainActivity">

    <TextView
        android:id="@+id/text_phone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_gravity="center"
        android:text="400-123-4567"
        android:textSize="16sp"/>

    <Button
        android:id="@+id/btn_call_phone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:text="点击拨打"
        android:textSize="15sp"/>

</LinearLayout>

布局文件layout_tel_phone:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="@drawable/shape_tel_bg">

    <TextView
        android:id="@+id/text_tel_phone"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="5dp"
        android:gravity="center"
        android:text="400-123-4567"
        android:textColor="#000000"
        android:textSize="18dp"/>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#EEEEEE"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_height="50dp">

    <TextView
        android:id="@+id/text_tel_cancel"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:text="取消"
        android:textColor="#0080FF"
        android:textStyle="bold"/>

    <View
        android:layout_width="1dp"
        android:layout_height="match_parent"
        android:background="#EEEEEE"/>

    <TextView
        android:id="@+id/text_tel_call"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:text="拨打"
        android:textColor="#0080FF"
        android:textStyle="bold"/>
 </LinearLayout>
</LinearLayout>

用到的资源文件shape_tel_bg:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <corners android:radius="20.0px" />

    <stroke
        android:color="#EEEEEE"
        android:width="2px"/>

    <solid android:color="#FFFFFF" />

</shape>

styles.xml中添加代码如下:

  <!-- 自定义Dialog -->
    <style name="Teldialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowBackground">@color/colorTransparent</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:gravity">bottom</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowCloseOnTouchOutside">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:backgroundDimEnabled">true</item>
    </style>

用到的色值:

<color name="colorTransparent">#00000000</color>

然后在AndroidManifest中添加拨打电话权限

 <uses-permission android:name="android.permission.CALL_PHONE" />

代码部分CallPhoneUtils:

package com.ranlegeran.telphonedialog;

import android.Manifest;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.support.v4.app.ActivityCompat;
import android.view.View;
import android.widget.TextView;

/**
 * 拨打电话Dialog
 * Created by ranlegeran on 2018/4/5.
 */

public class CallPhoneUtils{

    public static void ShowTelPhone(final Context context, final String strTel) {
        final Dialog mDialog;
        mDialog = new Dialog(context, R.style.Teldialog);
        mDialog.setContentView(R.layout.layout_tel_phone);
        mDialog.setCanceledOnTouchOutside(false);
        mDialog.show();
        TextView mTextTelPhone = (TextView) mDialog.findViewById(R.id.text_tel_phone);
        mTextTelPhone.setText(strTel);
        TextView mTextTelCancel = (TextView) mDialog.findViewById(R.id.text_tel_cancel);
        mTextTelCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mDialog.dismiss();
            }
        });
        TextView mTextCallPhone = (TextView) mDialog.findViewById(R.id.text_tel_call);
        mTextCallPhone.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+strTel));
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                    return;
                }
                context.startActivity(intent);
            }
        });
    }
}

MainActivity中:

package com.ranlegeran.telphonedialog;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    private Button mBtnCallPhone;
    private String StrTel = "400-123-4567";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mBtnCallPhone = (Button) findViewById(R.id.btn_call_phone);
        mBtnCallPhone.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                CallTelPhone(StrTel);
            }
        });
    }

    /**
     * 拨打电话
     * @param phone
     */
    private void CallTelPhone(String phone) {
        CallPhoneUtils.ShowTelPhone(this, phone);
    }
}

猜你喜欢

转载自blog.csdn.net/sandyran/article/details/79830090