`

圆角PopupWindow对话框和圆角EditText

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

效果图:
[img]

[/img]

工程结构图:
[img]

[/img]

Activity:
package com.test;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.text.InputType;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.PopupWindow;
import android.widget.LinearLayout.LayoutParams;


public class RoundCorner extends Activity {

	Button mButton; 

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		// 定义按钮
		mButton = (Button) this.findViewById(R.id.Button01);
		mButton.setOnClickListener(new ClickEvent());
		
		// 两个圆角文字编辑框
		EditText et1 = (EditText) this.findViewById(R.id.roundedtext1);
		EditText et2 = (EditText) this.findViewById(R.id.roundedtext2);
		et1.setInputType(InputType.TYPE_TEXT_FLAG_AUTO_CORRECT);
		et2.setInputType(InputType.TYPE_NULL); //不显示软键盘
		
	}

	// 处理按键事件
	class ClickEvent implements OnClickListener {
		@Override
		public void onClick(View v) {
			if (v == mButton) {
				showRoundCornerDialog(RoundCorner.this, RoundCorner.this.findViewById(R.id.Button01));
			}
		}
	}

	// 显示圆角对话框
	public void showRoundCornerDialog(Context context, View parent) {
		LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		
		// 获取圆角对话框布局View,背景设为圆角
		final View dialogView = inflater.inflate(R.layout.popupwindow, null, false);
		dialogView.setBackgroundResource(R.drawable.rounded_corners_view); 
		
		// 创建弹出对话框,设置弹出对话框的背景为圆角 
		final PopupWindow pw = new PopupWindow(dialogView, 300, LayoutParams.WRAP_CONTENT, true);
		pw.setBackgroundDrawable(getResources().getDrawable(R.drawable.rounded_corners_pop));
		
		//注:上面的设背景操作为重点部分,可以自行注释掉其中一个或两个设背景操作,查看对话框效果
		//注:上面的设背景操作为重点部分,可以自行注释掉其中一个或两个设背景操作,查看对话框效果
		
		final EditText edtUsername = (EditText) dialogView.findViewById(R.id.username_edit);
		final EditText edtPassword = (EditText) dialogView.findViewById(R.id.password_edit);
		edtUsername.setHint("用户名..."); // 设置提示语
		edtPassword.setHint("密码...");   // 设置提示语

		// OK按钮及其处理事件
		Button btnOK = (Button) dialogView.findViewById(R.id.BtnOK);
		btnOK.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// 设置文本框内容
				edtUsername.setText("username");
				edtPassword.setText("password");
			}
		});

		// Cancel按钮及其处理事件
		Button btnCancel = (Button) dialogView.findViewById(R.id.BtnCancel);
		btnCancel.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				pw.dismiss();// 关闭
			}
		});
		
		// 显示RoundCorner对话框
		pw.showAtLocation(parent, Gravity.CENTER|Gravity.BOTTOM, 0, 0);
	}
	
}



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


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


rounded_edittext_states.xml
<?xml version="1.0" encoding="utf-8"?> 
<!-- res/drawable/rounded_edittext_states.xml --> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item  
     	android:state_pressed="true"  
     	android:state_enabled="true" 
        android:drawable="@drawable/rounded_focused" /> 
    <item  
     	android:state_focused="true"  
     	android:state_enabled="true" 
        android:drawable="@drawable/rounded_focused" /> 
    <item  
     	android:state_enabled="true" 
        android:drawable="@drawable/rounded_edittext" /> 
</selector> 


rounded_edittext.xml
<?xml version="1.0" encoding="utf-8"?> 
<!--  res/drawable/rounded_edittext.xml --> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
	android:shape="rectangle" 
	android:padding="8dip"> 
 	<solid android:color="#FFFFFF"/> 
    <corners 
     	android:bottomRightRadius="10dip" 
     	android:bottomLeftRadius="10dip" 
  		android:topLeftRadius="10dip" 
  		android:topRightRadius="10dip"/> 
</shape>


rounded_focused.xml
<?xml version="1.0" encoding="utf-8"?> 
<!-- res/drawable/rounded_edittext_focused.xml --> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
	android:shape="rectangle" 
	android:padding="8dip"> 
 	<solid android:color="#FFFFFF"/> 
 	<stroke android:width="2dip" android:color="#FF0000" /> 
    <corners 
     	android:bottomRightRadius="10dip" 
     	android:bottomLeftRadius="10dip" 
  		android:topLeftRadius="10dip" 
  		android:topRightRadius="10dip"/> 
</shape> 


popupwindow.xml
<?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:orientation="vertical">

	<TextView android:id="@+id/username_view"
		android:layout_height="wrap_content"
		android:layout_width="fill_parent"
		android:layout_marginLeft="10dip"
		android:layout_marginRight="10dip" 
		android:text="用户名"
		android:textAppearance="?android:attr/textAppearanceMedium"/>

	<EditText android:id="@+id/username_edit"
		android:layout_height="wrap_content"
		android:layout_width="fill_parent" 
		android:layout_marginLeft="10dip"
		android:layout_marginRight="10dip" 
		android:capitalize="none"
		android:textAppearance="?android:attr/textAppearanceMedium" />

	<TextView android:id="@+id/password_view"
		android:layout_height="wrap_content"
		android:layout_width="fill_parent"
		android:layout_marginLeft="10dip"
		android:layout_marginRight="10dip" 
		android:text="密码"
		android:textAppearance="?android:attr/textAppearanceMedium"/>

	<EditText android:id="@+id/password_edit"
		android:layout_height="wrap_content"
		android:layout_width="fill_parent" 
		android:layout_marginLeft="10dip"
		android:layout_marginRight="10dip" 
		android:capitalize="none"
		android:password="true"
		android:textAppearance="?android:attr/textAppearanceMedium" />

	<LinearLayout android:id="@+id/LinearLayout01"
		android:layout_height="wrap_content" 
		android:layout_width="fill_parent"
		android:gravity="center"
		android:paddingLeft="10dip"
		android:paddingRight="10dip">
		
		<Button android:id="@+id/BtnOK"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content" 
			android:layout_weight="1" 
			android:text="确定"/>
			
		<Button android:id="@+id/BtnCancel"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content" 
			android:layout_weight="1"
			android:text="取消"/>
	</LinearLayout>

</LinearLayout>
  • 大小: 31.5 KB
  • 大小: 30.3 KB
分享到:
评论

相关推荐

    PopupWindow 对话框

    PopupWindow的位置按照有无偏移分,可以分为偏移和无偏移两种;按照参照物的不同,可以分为相对于某个控件(Anchor锚)和相对于父控件。具体如下 showAsDropDown(View anchor):相对某个控件的位置(正左下方),无...

    自定义PopupWindow对话框

    通过自定义`PopupWindow`,我们可以创建出具有独特风格和功能的对话框,以应对不同设备和场景的需求。在实际开发中,应充分利用`PopupWindow`的灵活性,同时注意处理好其生命周期和用户交互,以提供良好的用户体验。

    PopupWindow实现对话框的位置变化

    在本例中,我们将关注如何实现PopupWindow作为对话框,并控制其在屏幕上的位置变化,尤其适用于如商城网站点击分类按钮时弹出的分类列表。 首先,了解PopupWindow的基本结构。PopupWindow由三部分组成:内容视图...

    DialogFragment,解决PopupWindow中EditText无法复制粘贴问题

    DialogFragment,解决PopupWindow中EditText无法复制粘贴问题。Blog地址:https://blog.csdn.net/qq_37077360/article/details/83505119

    探索Popupwindow-对话框风格的窗口(一)

    PopupWindow是Android开发中一种非常实用的组件,它允许开发者创建弹出式...通过深入学习和实践“探索PopupWindow-对话框风格的窗口(一)”的相关知识,开发者可以更好地理解和运用PopupWindow,提升应用的用户体验。

    【android开发】手机应用管理器的实现之实现popupWindow类对话框

    在这个过程中,`PopupWindow` 类的使用是关键,它提供了一种创建浮动窗口的方式,可以模拟对话框的效果。下面我们将深入探讨如何使用 `PopupWindow` 实现这一功能。 首先,`PopupWindow` 是Android SDK中的一个类,...

    PopupWindow之显示顶层对话框代码

    7. 设置PopupWindow为顶层对话框:为了使PopupWindow显示在所有其他视图之上,你需要设置`FLAG_NOT_FOCUSABLE`和`FLAG_NOT_TOUCH_MODAL`标志,并且在需要时手动处理触摸事件。如果希望PopupWindow能够响应触摸事件,...

    android edittext spinner popupwindow

    在Android开发中,`EditText`、`Spinner`和`PopupWindow`是三个常见的UI组件,它们各自有不同的功能,但有时可以结合使用以实现更复杂的交互效果。在这个场景中,我们探讨的是如何在Android应用中创建一个类似于QQ...

    Android 实现对话框圆角 模糊图片功能

    本文将深入探讨如何在Android Studio中实现对话框的圆角以及毛玻璃模糊效果,这两种特性常常被用于提升界面的美观度和交互性。 首先,让我们关注对话框的圆角效果。在Android中,对话框通常由`AlertDialog`或自定义...

    手写签名系统的设计与实现之实现手写画板(三、四)

    1、对话款我们用的是popupwindow,不是alertdialog对话框,两者是有区别的:前者是阻塞型,即popupwindow会阻塞主线程,当popupwindow弹出来后,主线程暂停工作,只有popupwindow退出后,主线程才会恢复;...

    Android自定义对话框

    PopWindow不是真正的对话框,而是基于`PopupWindow`类实现的一种自定义视图,它可以灵活地控制显示位置和内容。PopWindow通常用于创建菜单、下拉选择器等。创建PopWindow需要三个步骤:初始化PopupWindow对象、设置...

    android popupwindow 单选、复选对话框

    本篇将详细讲解如何使用PopupWindow来创建单选和复选对话框,并讨论如何适应不同的适配器。 一、PopupWindow基础 PopupWindow是Android提供的一个可以自定义布局的类,它可以在屏幕上的任意位置弹出。创建...

    android 模仿qq登录界面EditText下拉框记住账号和密码 editText+popupwindow+sqlite方式实现

    以下是实现这一功能的关键步骤和相关知识点: 1. **UI设计**: - 使用`EditText`:作为用户输入账号和密码的主要控件,可以通过自定义样式来达到QQ登录界面的效果,例如设置背景、边框、占位符等属性。 - `...

    PopupWindow

    综上所述,PopupWindow是Android中实现弹出窗口效果的工具,它可以和EditText结合,实现在输入时显示、失去焦点时关闭的效果。在实际开发中,我们还需要关注其显示位置、交互逻辑以及视觉体验的优化。

    Android入门之PopupWindow用法实例解析

    本文实例介绍一下PopupWindow对话框。PopupWindow是阻塞对话框,只有在外部线程 或者 PopupWindow本身做退出操作才可以执行。PopupWindow完全依赖Layout做外观,在常见的开发中,PopupWindow应该会与AlertDialog常...

    Android自定义PopupWindow实现炫酷的IOS对话框效果

    前言: 最近在使用IOS系统的过程中发现IOS底部弹出框甚是漂亮,大气,上档次...这里的布局很有技巧哦,那就是对话框中间的透明隔断区域其实是一个margin值,每个隔断的item layout的背景为一个白色圆角矩形,之后再让Po

    Android中解决EditText放到popupWindow中,原有复制、粘贴、全选、选择功能失效问题

    主要介绍了Android中解决EditText放到popupWindow中,原有复制、粘贴、全选、选择功能失效问题 的相关资料,需要的朋友可以参考下

    自定义单选、多选对话框及popupwindow窗口实例源码.zip

    自定义单选、多选对话框及popupwindow窗口实例源码是一个自定义的弹出对话框例子源码,弹出的时候有半透明效果,提供的有弹出单选(popwindow)、弹出多选(popwindow)、弹出单选(dialog)、弹出多选(dialog)等几种实现...

    创建悬浮对话框和触模任何位置都可以关闭的对话框

    首先,悬浮对话框在Android中通常被称为"Floating Dialog"或"PopupWindow"。它不是原生的AlertDialog,而是通过自定义布局来实现的。以下是一步一步创建悬浮对话框的过程: 1. 创建布局文件:在res/layout目录下...

Global site tag (gtag.js) - Google Analytics