18
2015
06

Android开发学习:自定义弹出层对话框(样式通过xml设置)

Android开发学习

Android开发中,会需要对自己定义自己的弹出提示层,不使用系统默认的。

新建布局文件:activity_main.xml,代码内容:(显示需要点击弹出层对话框的页)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >
    <Button
        android:id="@+id/btn_dialog"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/btn_dialog"></Button>
</RelativeLayout>

新建布局文件:dialog_layout.xml,代码内容:(弹出层对话框的页

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <!-- 顶部椭园边缘 -->
    <ImageView
        android:layout_marginBottom="-2dip"
        android:layout_width="307dip"
        android:layout_height="12dip"
        android:layout_marginLeft="6dip"
        android:src="@drawable/dialog_top" >
    </ImageView>
    <!-- 中间白色背景,两个TextView,标题和内容,留一个LinearLayout,在代码中根据调用动态加上按钮 -->
    <LinearLayout
        android:layout_width="307dip"
        android:layout_height="wrap_content"
        android:layout_marginLeft="6dip"
        android:background="@drawable/dialog_center"
        android:orientation="vertical" >
        <TextView
            android:id="@+id/title"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:textColor="#000000"
            android:textSize="35dip" />
        <TextView
            android:id="@+id/message"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dip"
            android:layout_marginLeft="20dip"
            android:layout_marginRight="10dip"
            android:layout_marginTop="20dip"
            android:textColor="#000000"
            android:textSize="25dp" />
        <!-- 在LinearLayout中加按钮 -->
        <LinearLayout
            android:id="@+id/buttonLayout"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_gravity="center"
            android:gravity="center"
            android:orientation="horizontal" >
        </LinearLayout>
    </LinearLayout>
    <!-- 底部椭园边缘 -->
    <ImageView
        android:layout_marginTop="-2dip"
        android:layout_width="307dip"
        android:layout_height="12dip"
        android:layout_marginLeft="6dip"
        android:src="@drawable/dialog_bottom" >
    </ImageView>
</LinearLayout>

实现的MainActivity.java代码如下:(点击弹出对话

package com.zhengdecai.myalertdialog;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
/**
 * 自定义弹出层(样式通过xml设置)
 * 
 * @author 郑德才
 *
 */
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn_dialog = (Button) findViewById(R.id.btn_dialog);
btn_dialog.setOnClickListener(new LinearLayout.OnClickListener() {
@Override
public void onClick(View v) {
final AlertDialog ad = new AlertDialog(MainActivity.this);
ad.setTitle("标题");
ad.setMessage("内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容");
ad.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ad.dismiss();
Toast.makeText(MainActivity.this, "被点到确定",
Toast.LENGTH_LONG).show();
}
});
ad.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ad.dismiss();
Toast.makeText(MainActivity.this, "被点到取消",
Toast.LENGTH_LONG).show();
}
});
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}

实现的AlertDialog.java代码如下:(对话框实现)

package com.zhengdecai.myalertdialog;
import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
/**
 * 自定义AlertDialog对话框
 * 
 * @author 郑德才
 *
 */
public class AlertDialog {
Context context;
android.app.AlertDialog ad;
TextView titleView;
TextView messageView;
LinearLayout buttonLayout;
public AlertDialog(Context context) {
// TODO Auto-generated constructor stub
this.context = context;
ad = new android.app.AlertDialog.Builder(context).create();
ad.show();
// 关键在下面的两行,使用window.setContentView,替换整个对话框窗口的布局
Window window = ad.getWindow();
window.setContentView(R.layout.dialog_layout);
titleView = (TextView) window.findViewById(R.id.title);
messageView = (TextView) window.findViewById(R.id.message);
buttonLayout = (LinearLayout) window.findViewById(R.id.buttonLayout);
}
public void setTitle(int resId) {
titleView.setText(resId);
}
public void setTitle(String title) {
titleView.setText(title);
}
public void setMessage(int resId) {
messageView.setText(resId);
}
public void setMessage(String message) {
messageView.setText(message);
}
/**
 * 设置按钮
 * 
 * @param text
 * @param listener
 */
public void setPositiveButton(String text,
final View.OnClickListener listener) {
Button button = new Button(context);
LinearLayout.LayoutParams params = new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
button.setLayoutParams(params);
button.setBackgroundResource(R.drawable.dialog_button);
button.setText(text);
button.setTextColor(Color.WHITE);
button.setTextSize(20);
button.setOnClickListener(listener);
buttonLayout.addView(button);
}
/**
 * 设置按钮
 * 
 * @param text
 * @param listener
 */
public void setNegativeButton(String text,
final View.OnClickListener listener) {
Button button = new Button(context);
LinearLayout.LayoutParams params = new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
button.setLayoutParams(params);
button.setBackgroundResource(R.drawable.dialog_button);
button.setText(text);
button.setTextColor(Color.WHITE);
button.setTextSize(20);
button.setOnClickListener(listener);
if (buttonLayout.getChildCount() > 0) {
params.setMargins(20, 0, 0, 0);
button.setLayoutParams(params);
buttonLayout.addView(button, 1);
} else {
button.setLayoutParams(params);
buttonLayout.addView(button);
}
}
/**
 * 关闭对话框
 */
public void dismiss() {
ad.dismiss();
}
}

实现运行效果图:




« 上一篇下一篇 »

评论列表:

1.红包网  2015/6/24 13:22:55 回复该留言
不是搞这方面的,看起来真吃力

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。