今天在使用自定义的Dialog的时候,发现会出现默认的边框,很难看,后来查资料是需要自己设置一个样式的,下面给出这个demo。
第一步:设计对话框样式
<style
name="no_border_dialog"
parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item><!-- 边框 -->
<item name="android:windowIsFloating">true</item><!-- 是否浮现在activity之上 -->
<item name="android:windowIsTranslucent">false</item><!-- 半透明 -->
<item name="android:windowNoTitle">true</item> <!-- 无标题 -->
<item name="android:windowBackground">@android:color/transparent</item><!-- 背景图片 -->
<item name="android:backgroundDimEnabled">false</item><!--背景是否需要模糊-->
</style>
第二步:设计对话框页面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:background="@drawable/round_corner_regtangle_5"
android:minWidth="280dip"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:textColor="#A8000000"
android:textSize="24sp"
android:textAllCaps="false"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:id="@+id/content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="27dp"
android:gravity="center"
android:orientation="vertical" >
<EditText
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:hint="input name"
android:textAllCaps="false"
android:textColor="#A8000000"
android:textSize="18sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="34dp"
android:background="#EBEBEB" />
<LinearLayout
android:id="@+id/buttonLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/negativeButton"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/btn_alert_dlg_left"
android:padding="15dp"
android:singleLine="true"
android:textAllCaps="false"
android:text="@string/app_name"
android:textColor="#ffc8c8c8"
android:textSize="18sp" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal" >
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:background="#EBEBEB" />
<Button
android:id="@+id/positiveButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/btn_alert_dlg_right"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:padding="15dp"
android:singleLine="true"
android:text="@string/app_name"
android:textAlignment="center"
android:textAllCaps="false"
android:textColor="#ff02b389"
android:textSize="18sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
第三步:自定义Dialog
package com.figo.study.view;
import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.figo.study.R;
/**
* Created by figo on 16/3/4.
*/
public class CustomDialog extends Dialog {
private EditText mEtMessage;
private Button mPositiveButton, mNegativeButton;
private TextView mTvTitle;
public CustomDialog(Context context) {
super(context, R.style.no_border_dialog);//设置样式
setCustomDialog();
}
private void setCustomDialog() {
View mView = LayoutInflater.from(getContext()).inflate(R.layout.layout_custom_dialog, null);
mTvTitle = (TextView) mView.findViewById(R.id.title);
mEtMessage = (EditText) mView.findViewById(R.id.message);
mPositiveButton = (Button) mView.findViewById(R.id.positiveButton);
mNegativeButton = (Button) mView.findViewById(R.id.negativeButton);
super.setContentView(mView);
}
public View getmEtMessage() {
return mEtMessage;
}
public String getMessage() {
return mEtMessage.getText().toString();
}
public void setTitle(int resId) {
mTvTitle.setText(resId);
}
@Override
public void setContentView(int layoutResID) {
}
@Override
public void setContentView(View view, ViewGroup.LayoutParams params) {
}
@Override
public void setContentView(View view) {
}
/**
* 确定键监听器
*
* @param listener
*/
public void setOnPositiveListener(View.OnClickListener listener) {
mPositiveButton.setOnClickListener(listener);
}
public void setOnPositiveListener(int resId, View.OnClickListener listener) {
mPositiveButton.setOnClickListener(listener);
mPositiveButton.setText(resId);
}
/**
* 取消键监听器
*
* @param listener
*/
public void setOnNegativeListener(View.OnClickListener listener) {
mNegativeButton.setOnClickListener(listener);
}
public void setOnNegativeListener(int resId, View.OnClickListener listener) {
mNegativeButton.setOnClickListener(listener);
mNegativeButton.setText(resId);
}
}
第四步:调用
private void showNameDialog() {
final CustomDialog dialog = new CustomDialog(ImgFontAdjustActivity.this);
dialog.setCanceledOnTouchOutside(false);
dialog.setTitle(R.string.lbl_new_skin);
dialog.setOnPositiveListener(R.string.lbl_confirm, new View.OnClickListener() {
@Override
public void onClick(View v) {
int textShadow = 0;
if (mCbHatch.isChecked()) {
textShadow = 1;
} else {
textShadow = 0;
}
mCurrentSkinPackage = changeHandMakeSkinPackage(mCurrentSkinPackage, dialog.getMessage(), mCurrentSkinPackage.keyboardKeyTextColor, textShadow);
saveSkinPackageHandMake(mCurrentSkinPackage);
dialog.dismiss();
finish();
}
});
dialog.setOnNegativeListener(R.string.lbl_cancel, new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}