圆角PopupWindow对话框和圆角EditText



Android默认的PopupWindowEditText的外观是矩形框,看起来不是太好,本示例通过设置布局View的背景和PopupWindowd对象的背景,实现有白色圆角边框的对话框效果和圆角文字编辑框。代码如下(关键部分是背景布局XML):



对话框弹出效果图:

Java代码

	package com.test; 
2.	
3.	import android.app.Activity; 
4.	import android.content.Context; 
5.	import android.os.Bundle; 
6.	import android.text.InputType; 
7.	import android.view.Gravity; 
8.	import android.view.LayoutInflater; 
9.	import android.view.View; 
10.	import android.view.View.OnClickListener; 
11.	import android.widget.Button; 
12.	import android.widget.EditText; 
13.	import android.widget.PopupWindow; 
14.	import android.widget.LinearLayout.LayoutParams; 
15.	
16.	
17.	public class RoundCorner extends Activity { 
18.	
19.	Button mButton; 
20.	
21.	@Override 
22.	public void onCreate(Bundle savedInstanceState) { 
23.	super.onCreate(savedInstanceState); 
24.	setContentView(R.layout.main); 
25.	
26.	// 定义按钮 
27.	mButton = (Button) this.findViewById(R.id.Button01); 
28.	mButton.setOnClickListener(new ClickEvent()); 
29.	
30.	// 两个圆角文字编辑框 
31.	EditText et1 = (EditText) this.findViewById(R.id.roundedtext1); 
32.	EditText et2 = (EditText) this.findViewById(R.id.roundedtext2); 
33.	et1.setInputType(InputType.TYPE_TEXT_FLAG_AUTO_CORRECT); 
34.	et2.setInputType(InputType.TYPE_NULL); //不显示软键盘 
35.	
36.	} 
37.	
38.	// 处理按键事件 
39.	class ClickEvent implements OnClickListener { 
40.	@Override 
41.	public void onClick(View v) { 
42.	if (v == mButton) { 
43.	showRoundCornerDialog(RoundCorner.this, RoundCorner.this.findViewById(R.id.Button01)); 
44.	} 
45.	} 
46.	} 
47.	
48.	// 显示圆角对话框 
49.	public void showRoundCornerDialog(Context context, View parent) { 
50.	LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
51.	
52.	// 获取圆角对话框布局View,背景设为圆角 
53.	final View dialogView = inflater.inflate(R.layout.popupwindow, null, false); 
54.	dialogView.setBackgroundResource(R.drawable.rounded_corners_view); 
55.	
56.	// 创建弹出对话框,设置弹出对话框的背景为圆角 
57.	final PopupWindow pw = new PopupWindow(dialogView, 300, LayoutParams.WRAP_CONTENT, true); 
58.	pw.setBackgroundDrawable(getResources().getDrawable(R.drawable.rounded_corners_pop)); 
59.	
60.	//注:上面的设背景操作为重点部分,可以自行注释掉其中一个或两个设背景操作,查看对话框效果 
61.	//注:上面的设背景操作为重点部分,可以自行注释掉其中一个或两个设背景操作,查看对话框效果 
62.	
63.	final EditText edtUsername = (EditText) dialogView.findViewById(R.id.username_edit); 
64.	final EditText edtPassword = (EditText) dialogView.findViewById(R.id.password_edit); 
65.	edtUsername.setHint("用户名..."); // 设置提示语 
66.	edtPassword.setHint("密码..."); // 设置提示语 
67.	
68.	// OK按钮及其处理事件 
69.	Button btnOK = (Button) dialogView.findViewById(R.id.BtnOK); 
70.	btnOK.setOnClickListener(new OnClickListener() { 
71.	@Override 
72.	public void onClick(View v) { 
73.	// 设置文本框内容 
74.	edtUsername.setText("username"); 
75.	edtPassword.setText("password"); 
76.	} 
77.	}); 
78.	
79.	// Cancel按钮及其处理事件 
80.	Button btnCancel = (Button) dialogView.findViewById(R.id.BtnCancel); 
81.	btnCancel.setOnClickListener(new OnClickListener() { 
82.	@Override 
83.	public void onClick(View v) { 
84.	pw.dismiss();// 关闭 
85.	} 
86.	}); 
87.	
88.	// 显示RoundCorner对话框 
89.	pw.showAtLocation(parent, Gravity.CENTER|Gravity.BOTTOM, 0, 0); 
90.	} 
91.	
92.	} 



1,圆角对话框的背景布局文件XML


--------rounded_corners_pop.xml此为PopupWindow的背景布局文件

1.	<?xml version="1.0" encoding="utf-8"?> 
2.	<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
3.	<solid android:color="#ffffffff" /> 
4.	
5.	<stroke android:width="3dp" color="#ffff8080" /> 
6.	
7.	<corners android:radius="10dp" /> 
8.	
9.	<padding android:left="3dp" android:top="3dp" 
10.	android:right="3dp" android:bottom="3dp" /> 
11.	</shape> 

--------rounded_corners_view.xml此为对话框内容的背景布局文件


1.	<?xml version="1.0" encoding="utf-8"?> 
2.	<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
3.	<solid android:color="#ff606060" /> 
4.	
5.	<stroke android:width="3dp" color="#ffff8080" /> 
6.	
7.	<corners android:radius="10dp" /> 
8.	
9.	<padding android:left="5dp" android:top="5dp" 
10.	android:right="5dp" android:bottom="5dp" /> 
11.	</shape> 


2,圆角文字编辑框的三个布局XML文件


---------rounded_edittext_states.xml


1.	<?xml version="1.0" encoding="utf-8"?> 
2.	<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
3.	<item 
4.	android:state_pressed="true" 
5.	android:state_enabled="true" 
6.	android:drawable="@drawable/rounded_focused" /> 
7.	<item 
8.	android:state_focused="true" 
9.	android:state_enabled="true" 
10.	android:drawable="@drawable/rounded_focused" /> 
11.	<item 
12.	android:state_enabled="true" 
13.	android:drawable="@drawable/rounded_edittext" /> 
14.	</selector> 



----------rounded_edittext.xml

1.	<?xml version="1.0" encoding="utf-8"?> 
2.	<shape xmlns:android="http://schemas.android.com/apk/res/android" 
3.	android:shape="rectangle" 
4.	android:padding="8dip"> 
5.	<solid android:color="#FFFFFF"/> 
6.	<corners 
7.	android:bottomRightRadius="10dip" 
8.	android:bottomLeftRadius="10dip" 
9.	android:topLeftRadius="10dip" 
10.	android:topRightRadius="10dip"/> 
11.	</shape> 


-----------rounded_edittext_focused.xml

1.	<?xml version="1.0" encoding="utf-8"?> 
2.	<shape xmlns:android="http://schemas.android.com/apk/res/android" 
3.	android:shape="rectangle" 
4.	android:padding="8dip"> 
5.	<solid android:color="#FFFFFF"/> 
6.	<stroke android:width="2dip" android:color="#FF0000" /> 
7.	<corners 
8.	android:bottomRightRadius="10dip" 
9.	android:bottomLeftRadius="10dip" 
10.	android:topLeftRadius="10dip" 
11.	android:topRightRadius="10dip"/> 
12.	</shape> 


3,对话框的布局文件popupwindow.xml

1.	<?xml version="1.0" encoding="utf-8"?> 
2.	
3.	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
4.	android:layout_width="fill_parent" android:layout_height="wrap_content" 
5.	android:orientation="vertical"> 
6.	
7.	<TextView android:id="@+id/username_view" 
8.	android:layout_height="wrap_content" 
9.	android:layout_width="fill_parent" 
10.	android:layout_marginLeft="10dip" 
11.	android:layout_marginRight="10dip" 
12.	android:text="用户名" 
13.	android:textAppearance="?android:attr/textAppearanceMedium"/> 
14.	
15.	<EditText android:id="@+id/username_edit" 
16.	android:layout_height="wrap_content" 
17.	android:layout_width="fill_parent" 
18.	android:layout_marginLeft="10dip" 
19.	android:layout_marginRight="10dip" 
20.	android:capitalize="none" 
21.	android:textAppearance="?android:attr/textAppearanceMedium" /> 
22.	
23.	<TextView android:id="@+id/password_view" 
24.	android:layout_height="wrap_content" 
25.	android:layout_width="fill_parent" 
26.	android:layout_marginLeft="10dip" 
27.	android:layout_marginRight="10dip" 
28.	android:text="密码" 
29.	android:textAppearance="?android:attr/textAppearanceMedium"/> 
30.	
31.	<EditText android:id="@+id/password_edit" 
32.	android:layout_height="wrap_content" 
33.	android:layout_width="fill_parent" 
34.	android:layout_marginLeft="10dip" 
35.	android:layout_marginRight="10dip" 
36.	android:capitalize="none" 
37.	android:password="true" 
38.	android:textAppearance="?android:attr/textAppearanceMedium" /> 
39.	
40.	<LinearLayout android:id="@+id/LinearLayout01" 
41.	android:layout_height="wrap_content" 
42.	android:layout_width="fill_parent" 
43.	android:gravity="center" 
44.	android:paddingLeft="10dip" 
45.	android:paddingRight="10dip"> 
46.	
47.	<Button android:id="@+id/BtnOK" 
48.	android:layout_width="wrap_content" 
49.	android:layout_height="wrap_content" 
50.	android:layout_weight="1" 
51.	android:text="确定"/> 
52.	
53.	<Button android:id="@+id/BtnCancel" 
54.	android:layout_width="wrap_content" 
55.	android:layout_height="wrap_content" 
56.	android:layout_weight="1" 
57.	android:text="取消"/> 
58.	</LinearLayout> 
59.	
60.	</LinearLayout> 



4,主布局文件 main.xml


1.	<?xml version="1.0" encoding="utf-8"?> 
2.	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
3.	android:orientation="vertical" android:layout_width="fill_parent" 
4.	android:layout_height="fill_parent" 
5.	android:paddingTop="10dip"> 
6.	
7.	<EditText android:id="@+id/roundedtext1" 
8.	android:layout_width="fill_parent" 
9.	android:layout_height="wrap_content" 
10.	android:text="圆角编辑框实例" 
11.	android:padding="5dip" 
12.	android:background="@drawable/rounded_edittext" /> 
13.	
14.	<!-- 此View为布局使用 --> 
15.	<View android:layout_height="5dip" android:layout_width="fill_parent"/> 
16.	
17.	<EditText android:id="@+id/roundedtext2" 
18.	android:layout_width="fill_parent" 
19.	android:layout_height="wrap_content" 
20.	android:text="聚焦可变边框颜色" 
21.	android:padding="5dip" 
22.	android:paddingTop="30dip" 
23.	android:background="@drawable/rounded_edittext_states"/> 
24.	
25.	<!-- 此View为布局使用 --> 
26.	<View android:layout_height="5dip" android:layout_width="fill_parent"/> 
27.	
28.	<Button android:id="@+id/Button01" 
29.	android:layout_height="wrap_content" 
30.	android:layout_width="fill_parent" 
31.	android:text="弹出圆角对话框"/> 
32.	
33.	</LinearLayout> 

实例二:

在res目录下的drawable-mdpi建立xml文件shape.xml,如下图所示:

shape.xml

复制代码
<?xml version="1.0" encoding="UTF-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <!-- 填充的颜色 --> 
    <solid android:color="#FFFFFF" /> 
    <!-- 设置按钮的四个角为弧形 --> 
    <!-- android:radius 弧形的半径 --> 
    <corners android:radius="5dip" /> 
      
<!-- padding:Button里面的文字与Button边界的间隔 --> 
<padding 
   android:left="10dp" 
   android:top="10dp" 
   android:right="10dp" 
   android:bottom="10dp" 
/> 
</shape> 
复制代码

 

main.xml

在android:background="@drawable/shape"就使用了shape.xml资源

复制代码
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView    
    android:layout_width="fill_parent"   
    android:layout_height="wrap_content"   
    android:text="@string/hello" 
    />   
<Button   
    android:id="@+id/roundButton" 
    android:text=" 圆角按钮 " 
    android:layout_width="wrap_content"   
    android:layout_height="wrap_content"   
    android:background="@drawable/shape" 
    /> 
</LinearLayout> 
复制代码




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值