Android 自定义对话框
来源:互联网 发布:万花尺软件 编辑:程序博客网 时间:2024/05/16 15:33
1.DensityUtil 自定义工具类
public class DensityUtil {
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
}
2.对话框title的布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:background="@color/title_bg_color" >
<Button
android:id="@+id/left_btn"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_marginLeft="15dp"
android:background="@drawable/back_arrow_selector"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/title_text"
style="@style/title_bar_font"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_centerVertical="true"
android:gravity="center_vertical" />
<Button
android:id="@+id/right_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="15dp"
android:background="@color/color_hei_8"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:textColor="@color/white"
android:textSize="14sp" />
</RelativeLayout>
3.对话框title的实现
package com.example.image_up;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.TextView;
public class DialogTitleView extends FrameLayout implements
View.OnClickListener {
private Button mLeftBtn;
private Button mRightBtn;
private TextView mTitle;
private Context context;
private OnLeftButtonClickListener mOnLeftButtonClickListener;
private OnRightButtonClickListener mOnRightButtonClickListener;
public interface OnLeftButtonClickListener {
public void onClick(View button);
}
public interface OnRightButtonClickListener {
public void onClick(View button);
}
public void setLeftButton(String text, OnLeftButtonClickListener listener) {
mLeftBtn.setText(text);
mLeftBtn.setVisibility(View.VISIBLE);
mOnLeftButtonClickListener = listener;
}
public void setLeftButton(int stringID, OnLeftButtonClickListener listener) {
mLeftBtn.setText(stringID);
mLeftBtn.setVisibility(View.VISIBLE);
mOnLeftButtonClickListener = listener;
}
public void removeLeftButton() {
mLeftBtn.setText("");
mLeftBtn.setVisibility(View.INVISIBLE);
mOnLeftButtonClickListener = null;
}
public void hiddenLeftButton() {
mLeftBtn.setVisibility(View.INVISIBLE);
}
public void showLeftButton() {
mLeftBtn.setVisibility(View.VISIBLE);
}
public void setRightButton(String text, OnRightButtonClickListener listener) {
mRightBtn.setText(text);
mRightBtn.setBackgroundResource(R.drawable.titleview_button_selector);
mRightBtn.setHeight(DensityUtil.dip2px(context, 40));
mRightBtn.setVisibility(View.VISIBLE);
mOnRightButtonClickListener = listener;
}
public void setRightButton(int stringID, OnRightButtonClickListener listener) {
mRightBtn.setText(stringID);
mRightBtn.setBackgroundResource(R.drawable.titleview_button_selector);
mRightBtn.setHeight(DensityUtil.dip2px(context, 40));
mRightBtn.setVisibility(View.VISIBLE);
mOnRightButtonClickListener = listener;
}
public void setRightButton(String text, int resid,
OnRightButtonClickListener listener) {
mRightBtn.setBackgroundResource(resid);
mRightBtn.setText(text);
mRightBtn.setVisibility(View.VISIBLE);
mOnRightButtonClickListener = listener;
}
public void removeRightButton() {
mRightBtn.setText("");
mRightBtn.setVisibility(View.INVISIBLE);
mOnRightButtonClickListener = null;
}
public void hiddenRightButton() {
mRightBtn.setVisibility(View.INVISIBLE);
}
public void showRightButton() {
mRightBtn.setVisibility(View.VISIBLE);
}
public DialogTitleView(Context context) {
this(context, null);
this.context = context;
}
public DialogTitleView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
this.context = context;
}
public DialogTitleView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.dialog_title_view, this, true);
mLeftBtn = (Button) findViewById(R.id.left_btn);
mLeftBtn.setVisibility(View.INVISIBLE);
mLeftBtn.setOnClickListener(this);
mRightBtn = (Button) findViewById(R.id.right_btn);
mRightBtn.setVisibility(View.INVISIBLE);
mRightBtn.setOnClickListener(this);
mTitle = (TextView) findViewById(R.id.title_text);
mTitle.setVisibility(View.INVISIBLE);
}
public void setTitle(String text) {
mTitle.setVisibility(View.VISIBLE);
mTitle.setText(text);
}
public void setTitle(int stringID) {
mTitle.setVisibility(View.VISIBLE);
mTitle.setText(stringID);
}
public void setRightText(String text) {
mRightBtn.setText(text);
}
public void setRightIco(int res) {
// R.drawable.ico_down
Drawable drawable = context.getResources().getDrawable(res);
// / 这一步必须要做,否则不会显示.
drawable.setBounds(5, 0, drawable.getMinimumWidth(),
drawable.getMinimumHeight());
mRightBtn.setCompoundDrawables(null, null, drawable, null);
}
public void setLeftText(String text) {
mLeftBtn.setBackgroundResource(R.color.color_hei_8);
mLeftBtn.setVisibility(View.VISIBLE);
mLeftBtn.setText(text);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.left_btn:
if (mOnLeftButtonClickListener != null)
mOnLeftButtonClickListener.onClick(v);
break;
case R.id.right_btn:
if (mOnRightButtonClickListener != null)
mOnRightButtonClickListener.onClick(v);
break;
}
}
}
4.对话框的设计
<?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:background="@color/color_bai"
android:orientation="vertical" >
<com.example.image_up.DialogTitleView
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"/>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:textColor="@color/black"
android:text="测试"
android:layout_margin="20dp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:layout_marginTop="20dp"
android:orientation="horizontal" >
<Button
android:id="@+id/cancel_bt"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginLeft="10dp"
android:layout_weight="1"
android:background="@drawable/cancel_state"
android:text="取消"
android:textColor="#fff"
android:textSize="18sp" />
<Button
android:id="@+id/ok_bt"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="10dp"
android:layout_weight="1"
android:background="@drawable/selector_state"
android:text="确定"
android:textColor="#fff"
android:textSize="18sp" />
</LinearLayout>
</LinearLayout>
5.对话框的设计
package com.example.image_up;
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;
public class DialogUtil {
/**
* 确认对话框
*
* @param context
* @param dialogInterface
* @return
*/
public static Dialog getTipsDialog(Activity context, String title,
String content, final OnClickButtonListener buttonListener) {
final Dialog dialog = new Dialog(context, R.style.Dialog);
dialog.setContentView(R.layout.dialog_tip_view);
Window window = dialog.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
int screenW = getScreenWidth(context);
lp.width = (int) (0.9 * screenW);
DialogTitleView mTitle = (DialogTitleView) dialog
.findViewById(R.id.title);
mTitle.setTitle(title);
TextView text = (TextView) dialog.findViewById(R.id.text);
text.setText(content);
Button cancelBt = (Button) dialog.findViewById(R.id.cancel_bt);
Button okBt = (Button) dialog.findViewById(R.id.ok_bt);
cancelBt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
buttonListener.cancel();
}
});
okBt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
buttonListener.ok(null);
}
});
return dialog;
}
public interface OnClickButtonListener {
public void cancel();
public void ok(Bundle bundle);
}
public static int getScreenWidth(Activity context) {
DisplayMetrics dm = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(dm);
return dm.widthPixels;
}
}
6.补充的drawable下面的selecter
(1)back_arrow_selector.xml //返回按钮
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/back_arrow_pressed" android:state_pressed="true"></item>
<item android:drawable="@drawable/back_arrow_normal"></item>
</selector>
(2)cancel_state.xml //取消按钮颜色的选择
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@color/cancel_press_color" />
<item android:state_focused="true" android:drawable="@color/cancel_press_color" />
<item android:drawable="@color/cancel_color" />
</selector>
(3)selector_state.xml // 确定按钮的颜色选择
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@color/button_press" />
<item android:state_focused="true" android:drawable="@color/button_press" />
<item android:state_enabled="false" android:drawable="@color/button_disable" />
<item android:drawable="@color/button_no" />
</selector>
(4)titleview_button_selector.xml //setRightButton右面图片的颜色
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/title_bg_press" android:state_pressed="true"></item>
<item android:drawable="@color/title_bg_color"></item>
</selector>
7.style
<style name="Dialog" parent="@android:style/Theme.Dialog"> <item name="android:windowIsFloating">true</item> <!-- 设置未浮动窗口 --> <item name="android:windowFrame">@null</item> <!-- 设置无边框 --> <item name="android:windowNoTitle">true</item> <!-- 设置无标题 --> <item name="android:windowBackground">@color/transparent_all</item> <!-- 设置完全透明 --> <item name="android:backgroundDimEnabled">true</item> <!-- 设置屏幕变暗 --></style>8.使用 例:
DialogUtil.getTipsDialog(RegistActivity.this, "该手机号已注册" ,"直接登录","修改号码", new DialogUtil.OnClickButtonListener() { @Override public void ok(Bundle bundle) { Intent intent = new Intent(RegistActivity.this, LoginActivity_.class); startActivity(intent); finish(); } @Override public void cancel() { } }).show();
- android中的对话框:自定义对话框
- Android Dialog( 自定义对话框)
- android 自定义对话框
- android自定义对话框
- Android自定义对话框
- android 自定义对话框
- Android自定义Dialog对话框
- android自定义大小对话框
- android自定义对话框
- Android自定义对话框
- android 自定义对话框
- android 自定义对话框
- android自定义对话框
- android 自定义对话框动画
- Android弹出自定义对话框
- android自定义对话框
- android 自定义对话框
- Android自定义对话框
- 2015年英语学习——8月
- 大型网站图片服务器架构的演进
- UITableview reloadData偶尔出现崩溃
- Oracle 日期运算2
- C++的Json解析库:jsoncpp和boost .
- Android 自定义对话框
- 最长单调递增子序列
- java java中subString、split、stringTokenizer三种截取字符串方法的性能比较
- EditText相关
- 解决Tomcat服务器访问链接数过大的问题
- SpringMVC 连接Redis数据库
- hdu1698 Just a Hook 线段树成段替换
- hihocoder14(2)赛车
- STL入门要点