1、自定义布局(密码框、对话框等等)

2、从下往上弹出效果的实现

一、对话框

第一步:

Xml代码:

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:orientation="vertical"

>

android:id="@+id/pop_layout"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:orientation="vertical"

android:layout_alignParentBottom="true"

android:background="@drawable/btn_style_alert_dialog_background"

>

android:id="@+id/btn_take_photo"

android:layout_marginLeft="20dip"

android:layout_marginRight="20dip"

android:layout_marginTop="20dip"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="拍照"

android:background="@drawable/btn_style_alert_dialog_button"

android:textStyle="bold"

/>

android:id="@+id/btn_pick_photo"

android:layout_marginLeft="20dip"

android:layout_marginRight="20dip"

android:layout_marginTop="5dip"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="从相册选择"

android:background="@drawable/btn_style_alert_dialog_button"

android:textStyle="bold"

/>

android:id="@+id/btn_cancel"

android:layout_marginLeft="20dip"

android:layout_marginRight="20dip"

android:layout_marginTop="15dip"

android:layout_marginBottom="15dip"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="取消"

android:background="@drawable/btn_style_alert_dialog_cancel"

android:textColor="#ffffff"

android:textStyle="bold"

/>

第二步:创建SelectPicPopupWindow类继承PopupWindow:

import android.app.Activity;

import android.content.Context;

import android.graphics.drawable.ColorDrawable;

import android.view.LayoutInflater;

import android.view.MotionEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.View.OnTouchListener;

import android.view.ViewGroup.LayoutParams;

import android.widget.Button;

import android.widget.PopupWindow;

public class SelectPicPopupWindow extends PopupWindow {

private Button btn_take_photo, btn_pick_photo, btn_cancel;

private View mMenuView;

public SelectPicPopupWindow(Activity context,OnClickListener itemsOnClick) {

super(context);

LayoutInflater inflater = (LayoutInflater) context

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

mMenuView = inflater.inflate(R.layout.alert_dialog, null);

btn_take_photo = (Button) mMenuView.findViewById(R.id.btn_take_photo);

btn_pick_photo = (Button) mMenuView.findViewById(R.id.btn_pick_photo);

btn_cancel = (Button) mMenuView.findViewById(R.id.btn_cancel);

//取消按钮

btn_cancel.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

//销毁弹出框

dismiss();

}

});

//设置按钮监听

btn_pick_photo.setOnClickListener(itemsOnClick);

btn_take_photo.setOnClickListener(itemsOnClick);

//设置SelectPicPopupWindow的View

this.setContentView(mMenuView);

//设置SelectPicPopupWindow弹出窗体的宽

this.setWidth(LayoutParams.FILL_PARENT);

//设置SelectPicPopupWindow弹出窗体的高

this.setHeight(LayoutParams.WRAP_CONTENT);

//设置SelectPicPopupWindow弹出窗体可点击

this.setFocusable(true);

//设置SelectPicPopupWindow弹出窗体动画效果

this.setAnimationStyle(R.style.AnimBottom);

//实例化一个ColorDrawable颜色为半透明

ColorDrawable dw = new ColorDrawable(0xb0000000);

//设置SelectPicPopupWindow弹出窗体的背景

this.setBackgroundDrawable(dw);

//mMenuView添加OnTouchListener监听判断获取触屏位置如果在选择框外面则销毁弹出框

mMenuView.setOnTouchListener(new OnTouchListener() {

public boolean onTouch(View v, MotionEvent event) {

int height = mMenuView.findViewById(R.id.pop_layout).getTop();

int y=(int) event.getY();

if(event.getAction()==MotionEvent.ACTION_UP){

if(y

dismiss();

}

}

return true;

}

});

}

}

第三步:编写MainActivity类实现测试:

import android.app.Activity;

import android.os.Bundle;

import android.view.Gravity;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.TextView;

public class MainActivity extends Activity {

//自定义的弹出框类

SelectPicPopupWindow menuWindow;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

TextView tv = (TextView) this.findViewById(R.id.text);

//把文字控件添加监听,点击弹出自定义窗口

tv.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

//实例化SelectPicPopupWindow

menuWindow = new SelectPicPopupWindow(MainActivity.this, itemsOnClick);

//显示窗口

menuWindow.showAtLocation(MainActivity.this.findViewById(R.id.main), Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0); //设置layout在PopupWindow中显示的位置

}

});

}

//为弹出窗口实现监听类

private OnClickListener itemsOnClick = new OnClickListener(){

public void onClick(View v) {

menuWindow.dismiss();

switch (v.getId()) {

case R.id.btn_take_photo:

break;

case R.id.btn_pick_photo:

break;

default:

break;

}

}

};

}

二、密码框

自定义密码框xml

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="@color/colorPrimary"

android:orientation="vertical">

android:id="@+id/ll_main_password"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:layout_width="match_parent"

android:layout_height="50dp">

android:id="@+id/iv_pay_back"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerVertical="true"

android:layout_marginLeft="10dp" />

android:id="@+id/tv_pay_title"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerHorizontal="true"

android:layout_marginLeft="15dp"

android:layout_marginTop="15dp"

android:text="@string/pin_id"

android:textColor="@color/white"

android:textSize="18dp" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android:gravity="center"

android:orientation="horizontal">

android:id="@+id/tv_pass1"

android:layout_width="@dimen/dp_20"

android:layout_height="@dimen/dp_20"

android:layout_margin="@dimen/dp_5"

android:background="@drawable/bg_circle_num_pwd"

android:gravity="center"

android:inputType="numberPassword"

android:paddingBottom="@dimen/dp_5"

android:textColor="@color/pwd_gray"

android:textSize="15sp" />

android:id="@+id/tv_pass2"

android:layout_width="@dimen/dp_20"

android:layout_height="@dimen/dp_20"

android:layout_margin="@dimen/dp_5"

android:background="@drawable/bg_circle_num_pwd"

android:gravity="center"

android:inputType="numberPassword"

android:textColor="@color/pwd_gray"

android:textSize="15sp" />

android:id="@+id/tv_pass3"

android:layout_width="@dimen/dp_20"

android:layout_height="@dimen/dp_20"

android:layout_margin="@dimen/dp_5"

android:background="@drawable/bg_circle_num_pwd"

android:gravity="center"

android:inputType="numberPassword"

android:textColor="@color/pwd_gray"

android:textSize="15sp" />

android:id="@+id/tv_pass4"

android:layout_width="@dimen/dp_20"

android:layout_height="@dimen/dp_20"

android:layout_margin="@dimen/dp_5"

android:background="@drawable/bg_circle_num_pwd"

android:gravity="center"

android:inputType="numberPassword"

android:textColor="@color/pwd_gray"

android:textSize="15sp" />

android:id="@+id/tv_pass5"

android:layout_width="@dimen/dp_20"

android:layout_height="@dimen/dp_20"

android:layout_margin="@dimen/dp_5"

android:background="@drawable/bg_circle_num_pwd"

android:gravity="center"

android:inputType="numberPassword"

android:textColor="@color/pwd_gray"

android:textSize="15sp" />

android:id="@+id/tv_pass6"

android:layout_width="@dimen/dp_20"

android:layout_height="@dimen/dp_20"

android:layout_margin="@dimen/dp_5"

android:background="@drawable/bg_circle_num_pwd"

android:gravity="center"

android:inputType="numberPassword"

android:textColor="@color/pwd_gray"

android:textSize="15sp" />

android:id="@+id/tv_pay_forgetPwd"

android:layout_width="@dimen/dp_20"

android:layout_height="@dimen/dp_20"

android:textColor="@color/white"

android:visibility="gone" />

android:id="@+id/gv_keybord"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_below="@id/ll_main_password"

android:horizontalSpacing="0.5dp"

android:numColumns="3"

android:textColor="@color/colorPrimary"

android:verticalSpacing="0.5dp" />

PasswordView

import android.content.Context;

import android.text.Editable;

import android.text.TextWatcher;

import android.util.AttributeSet;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.GridView;

import android.widget.ImageView;

import android.widget.RelativeLayout;

import android.widget.TextView;

import com.skypine.skypine.R;

import com.skypine.skypine.ui.MainActivity;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Map;

/**

* Created by syhuang on 2017/7/19.

*/

public class PasswordView extends RelativeLayout {

/*********************

* 取消

******************/

public interface OnCancelListener {

public void OnCancel();

}

public void setCancelListener(OnCancelListener cancelListener) {

this.cancelListener = cancelListener;

}

OnCancelListener cancelListener;

/***************************************/

private MainActivity mContext;

private String mStringPassword; //输入的密码

private TextView[] mTextViewPsw; // 用数组保存6个TextView

private GridView mGridView; //支付键盘布局

private ArrayList> valueList;

private ImageView mImageViewCancel;

private TextView mTextViewForgetPsw;

private int currentIndex = -1;// 用于记录当前输入密码格位置

private View mView;

private TextView mTextViewTitle;

private TextView mTextViewDel;

public PasswordView(Context context) {

super(context, null);

}

public PasswordView(Context context, AttributeSet attrs) {

super(context, attrs);

mContext = (MainActivity) context;

mView = View.inflate(context, R.layout.pay_view, null);

valueList = new ArrayList<>();

mTextViewPsw = new TextView[6];

mImageViewCancel = (ImageView) mView.findViewById(R.id.iv_pay_back);

mTextViewPsw[0] = (TextView) mView.findViewById(R.id.tv_pass1);

mTextViewPsw[1] = (TextView) mView.findViewById(R.id.tv_pass2);

mTextViewPsw[2] = (TextView) mView.findViewById(R.id.tv_pass3);

mTextViewPsw[3] = (TextView) mView.findViewById(R.id.tv_pass4);

mTextViewPsw[4] = (TextView) mView.findViewById(R.id.tv_pass5);

mTextViewPsw[5] = (TextView) mView.findViewById(R.id.tv_pass6);

mGridView = (GridView) mView.findViewById(R.id.gv_keybord);

mTextViewTitle = (TextView) mView.findViewById(R.id.tv_pay_title);

mTextViewForgetPsw = (TextView) mView.findViewById(R.id.tv_pay_forgetPwd);

setView();

addView(mView); //必须要,不然不显示控件

}

// 初始化按钮上应该显示的数字

private void setView() {

for (int i = 1; i < 16; i++) {

Map map = new HashMap<>();

if (i < 10) {

map.put("name", String.valueOf(i));

} else if (i == 10) {//没有

map.put("name", "");

} else if (i == 11) {//

map.put("name", String.valueOf(0));

} else if (i == 12) {

map.put("name", "");

} else if (i == 13) {

map.put("name", " ");

} else if (i == 14) {

map.put("name", "");

}

valueList.add(map);

}

mGridView.setAdapter(adapter);

}

public interface OnPasswordInputFinish {

public void inputFinish();

}

/**

* 设置监听方法,在第6位输入完后触发

*/

public void setOnFinishInput(final OnPasswordInputFinish pass) {

mTextViewPsw[5].addTextChangedListener(new TextWatcher() {

@Override

public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override

public void onTextChanged(CharSequence s, int start, int before, int count) {

}

@Override

public void afterTextChanged(Editable s) {

if (s.toString().length() == 1) {

mStringPassword = ""; //每次触发都要将mStringPassword置空再重新获取,避免由于输入删除再输入造成混乱

for (int i = 0; i < 6; i++) {

mStringPassword += mTextViewPsw[i].getText().toString().trim();

}

pass.inputFinish();//接口中要实现的方法,完成密码输入完成后的响应逻辑

}

}

});

}

/**

* 清除所有密码

*/

public void clearAll() {

// currentIndex= -1;

// mTextViewPsw[0].setBackgroundResource(R.drawable.bg_circle_num_pwd);

// mTextViewPsw[1].setBackgroundResource(R.drawable.bg_circle_num_pwd);

// mTextViewPsw[2] .setBackgroundResource(R.drawable.bg_circle_num_pwd);

// mTextViewPsw[3]. setBackgroundResource(R.drawable.bg_circle_num_pwd);

// mTextViewPsw[4]. setBackgroundResource(R.drawable.bg_circle_num_pwd);

// mTextViewPsw[5].setBackgroundResource(R.drawable.bg_circle_num_pwd);

// mTextViewPsw[0].setText("");

// mTextViewPsw[1].setText("");

// mTextViewPsw[2] .setText("");

// mTextViewPsw[3]. setText("");

// mTextViewPsw[4]. setText("");

// mTextViewPsw[5].setText("");

currentIndex=5;

while (true)

if (currentIndex - 1 >= -1) { // 判断是否删除完毕

TextView temp = mTextViewPsw[currentIndex--];

temp.setText("");

temp.setBackgroundResource(R.drawable.bg_circle_num_pwd);

} else {

break;

}

}

/**

* 获取输入的密码

*/

public String getPassword() {

return mStringPassword;

}

/**

* 返回取消支付的ImageView

*/

public ImageView getCancel() {

return mImageViewCancel;

}

// /**

// * 返回取消

// */

// public TextView getmTextViewCancel() {

// return mTextViewCancel;

// }

/**

* 返回忘记密码的TextView

*/

public TextView getForgetPsw() {

return mTextViewForgetPsw;

}

/**

* 返回标题的TextView

*/

public TextView getTitle() {

return mTextViewTitle;

}

// GridView的适配器

BaseAdapter adapter = new BaseAdapter() {

@Override

public int getCount() {

return valueList.size();

}

@Override

public Object getItem(int position) {

return valueList.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(final int position, View convertView, ViewGroup parent) {

ViewHolder holder;

if (convertView == null) {

convertView = View.inflate(mContext, R.layout.item_pay_gride, null);

holder = new ViewHolder();

holder.btnKey = (TextView) convertView.findViewById(R.id.btn_keys);

convertView.setTag(holder);

} else {

holder = (ViewHolder) convertView.getTag();

}

holder.btnKey.setText(valueList.get(position).get("name"));

if (position == 12) {

// mTextViewCancel=holder.btnKey;

// holder.btnKey.setBackgroundResource(R.drawable.selector_key_del);

holder.btnKey.setText("取消");

}

if (position == 14) {

mTextViewDel = holder.btnKey;

// holder.btnKey.setBackgroundResource(R.drawable.selector_key_del);

holder.btnKey.setText("删除");

}

if (position == 9 || position == 11 || position == 13) {

holder.btnKey.setBackground(null);

holder.btnKey.setText("");

}

holder.btnKey.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

if (position < 11 && currentIndex != 9 && position != 9) { //点击0-9按钮

if (currentIndex >= -1 && currentIndex < 5) { //判断输入位置

TextView temp = mTextViewPsw[++currentIndex];

temp.setText(valueList.get(position).get("name"));

temp.setBackgroundResource(R.drawable.bg_circle_num_pwd_visiable);

}

} else {

if (position == 14) { //点击退格键

if (currentIndex - 1 >= -1) { // 判断是否删除完毕

TextView temp = mTextViewPsw[currentIndex--];

temp.setText("");

temp.setBackgroundResource(R.drawable.bg_circle_num_pwd);

}

}

if (position == 12) {

//退出

cancelListener.OnCancel();

}

}

}

});

return convertView;

}

};

static class ViewHolder {

public TextView btnKey;

}

}

自定义popwind

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/pv_pop_win"

android:layout_width="match_parent"

android:layout_height="match_parent">

使用:

private static PopupWindow mPopupWindow;

private static View popView;

private static PasswordView mPasswordView;

popView = View.inflate(context, R.layout.pop_window, null);

mPopupWindow = new PopupWindow(popView, ViewGroup.LayoutParams.MATCH_PARENT,

ViewGroup.LayoutParams.MATCH_PARENT);

mPopupWindow.setTouchable(true);

mPopupWindow.setOutsideTouchable(true);

mPopupWindow.setBackgroundDrawable(new BitmapDrawable());

// 设置动画

mPopupWindow.setAnimationStyle(R.style.mypopwindow_anim_style);

mPopupWindow.getContentView().setFocusableInTouchMode(true);

mPopupWindow.getContentView().setFocusable(true);

mPopupWindow.showAtLocation(view, Gravity.CENTER, 0, 0);

// mPopupWindow.showAsDropDown(controlPager,0,0);

mPasswordView = (PasswordView) popView.findViewById(R.id.pv_pop_win);

// mPasswordView.getTitle().setText(getString(R.string.pin_id));

mPasswordView.setOnFinishInput(new PasswordView.OnPasswordInputFinish() {

@Override

public void inputFinish() {

mPopupWindow.dismiss();

lock.setMove(true);

//验证车辆密码

// checkCarPwd(mPasswordView.getPassword());

if (mPasswordView.getPassword().equals(AppConfig.getInstance().getString("key", ""))) {

//密码正确

listener.onSuccess();

} else {

//密码错误

listener.onError();

}

}

});

mPasswordView.setCancelListener(new PasswordView.OnCancelListener() {

@Override

public void OnCancel() {

lock.setMove(true);

mPopupWindow.dismiss();

}

});

popwindow 加个边框_popupWindow自定义(1)相关推荐

  1. popwindow 加个边框_利用popupwindow生成带有列表的对话框,并设置对话框列表的点击事件...

    点击某个View弹出popupwindow列表: 代码:private ArrayAdapter adapter_huoMing; private PopupWindow popupWindow; / ...

  2. Threejs物联网,养殖场3D可视化(三)模型展示,轨道控制器设置,模型沿着路线运动,模型添加边框,自定义样式显示标签,点击模型获取信息

    1,介绍 该示例使用的是 r95版本Three.js库. 主要实现功能:引用养殖场模型进行展示,轨道控制器设置,模型沿着路线运动,使用OutlinePass给模型添加边框,自定义样式显示标签,点击模型 ...

  3. UIView加任意边框(Masonry)

    最近项目中需要给View类型加边框的实在太多了,然后就给UIView写了个类目,方便使用.不足之处请指出_. https://github.com/msbaby520/MSViewBorder pod ...

  4. 如何设置jinternalframe无边框_word文档美化技巧:加个边框提升版面颜值

    编按:说到Word,大多数人会觉得不就是个打字的,能够承载内容即可.于是,内容密密麻麻地录入.不过,对于有点强迫症的爱美人士来说,总会觉得差了点什么,于是,会对文档小小地美化一下,就比如,为文档页面加 ...

  5. 如何给table表格的tr行加border边框(解决篇)

    文章目录 一.如何给table表格的tr行加border边框 二.样式 bug - 截图示下 三.解决办法: 四.关于属性 `border-collapse`的取值.解析 一.如何给table表格的t ...

  6. Latex制作三线表 Latex制作复杂表格 加彩色边框高亮显示

    Latex制作三线表,可对数据进行加彩色边框和背景色高亮显示.通过在导言区调用相应的宏包,在代码区定义一个新的彩色盒子的命令块\newtcbox,自行设定相应的参数(arc:盒子圆角半径:colbac ...

  7. table里的th和td加了边框后,他是两个边框重合的,1PX就变成了2PX

    table里的th和td加了边框后,他是两个边框重合的,1PX就变成了2PX,解决方法 .table{border-collapse: collapse;border-spacing: 0; } .t ...

  8. Speedoffice(excel)如何加粗边框线条

    在一些办公文件中,经常会使用表格.在表格的设计上,会通过外框和内框加粗来区分表格显示的内容.那么如何加粗边框线条呢? 1,选中要添加框线的单元格区域. 2,点击软件右侧,点击边框风格,根据自己需求选择 ...

  9. 怎么批量给图片加纯色边框?

    如何给图片加纯色边框?相信很多小伙伴都觉得很简单,用ps软件给图片描边即可完成.给图片添加边框后图片会变得更美观,所以工作中经常遇见,边框有很多种,如图片边框和纯色边框.那么如何批量给图片加纯色边框呢 ...

最新文章

  1. Exchange 2010安装前的准备工作
  2. iOS开发-观察者模式
  3. 俄罗斯将用机器人当探月先锋
  4. 深入理解张正友相机标定法:数学理论详细推导
  5. django 中datetimefile 问题
  6. Java零基础入门 : (2) 代码编辑器IDEA安装与配置
  7. 《敏捷软件开发过程及最佳实践》培训总结
  8. 10-200-022-使用-概念-并行度Parallelism
  9. Day1数据结构和算法
  10. java 如何执行dig 命令_dig命令简介
  11. _ZN10tensorflow8internal21CheckOpMessageBuilder9NewStringEv
  12. WP-2021绿盟杯-藏宝图
  13. 小猫爪:动手笔记01-FreeRTOS移植
  14. OpenCL Function Qualifiers (函数限定符)
  15. AI Conference:2018, 不容错过的世界人工智能大会 | 抢票
  16. fastboot的安装使用
  17. 5G智慧城市丨智慧园区一体化、智能化解决方案
  18. 效能评估指标体系构建
  19. MySQL数据的导出和导入工具
  20. 5分钟快速掌握 Adam 优化算法

热门文章

  1. 服务器发送携带ULR的短信到手机
  2. Kubernetes基础3
  3. 南阳市有没有达内PHP班,南阳达内php培训班怎么样
  4. 聊聊Linux开发以及推荐学习资源(持续更新)
  5. .Bank文件音效提取
  6. (9.3)【数据隐藏】取证方法:缓存审计、缩略图痕迹、隐藏的系统文件
  7. 科大讯飞语音引擎_科大讯飞发布智能录音笔SR502
  8. python 离散化_python 离散化
  9. linux nvidia是否安装程序,Linux 为 Nvidia 显卡安装闭源驱动
  10. 云计算模型 按需自助服务_数据中心云计算的安全策略