自定义实现拨打电话弹框效果图如下:
布局文件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);
}
}