利用nginx转发实现本地调试微信公众号后台

一直想注册一个服务号未遂,于是只能注册为坑爹的个人账号,才发现各种限制,既不能认证(高级接口需要认证后才能用),开发者认证还得交钱,哎,说好的再小的个体也有自己的品牌呢???
最近遇到最大的问题就是没法本地调试,你得看着接口文档把代码写好,部署到后台去,才能进行测试。
其实我机是可以通过外网访问的。

怎么实现通过外网访问我的电脑的呢?

继续阅读“利用nginx转发实现本地调试微信公众号后台”

Mac下线刷Android 设备

今天淘到一个二手nexus6p,因为考虑到安全问题,我需要刷回原生Android,我从官方网站上下载了刷机包
下载地址:
https://developer.android.com/preview/download-712.html

注意,以下线刷方法会清空所有数据,请提前备份。
其次要下载platform-tools 才能使用adb命令,因为我装了Android Studio,
sdk中包含 SDK manager 所以不需要额外下载。
如果你不是开发者,建议只需要下载platform-tools 即可 下载地址:
https://developer.android.com/studio/releases/platform-tools.html#tos-header
选择相应版本下载。
解压,切换到platform-tools 目录下:

让设备切换到bootloader模式下:有两种方式,任选其一

  • 运行
adb reboot bootloader
  • 关机,按「电源键+音量下」开机

手机进入reboot 模式后,其中有一行小字 好像是 the device is locked 或者device is unlocked ,如果是 locked 则
运行

fastboot flashing unlock

否则略过进入下一步,在此过程中,手机会显示一个确认的操作,请留意。
等待解锁之后,在mac上解压下载的压缩包,命令行切换到解压后的目录中,运行

./flash-all

回车,等待刷机成功吧。成功之后会重启手机。进行一些手机初始化设置之后,开启开发者模式,连接上电脑,重新执行

adb reboot bootloader

进入reboot模式,运行

fastboot flashing lock

重新锁定,大功告成。
Let’s enjoy the new Android!

利用python 构建一个APP 模拟测试环境

背景

做app开发的,和后台连调是一个很重要的工作。在我来到这家公司之前,一只以为所有的功能是后台先开发出来然后app才开始开发。但是由于现在app开发和后台开发是两套人马,所以不可避免的需要同时开发甚至同时上线。我们不得不面临的一个问题是后台只给出了接口,客户端并没有可以连调的环境,这样就不得不自己写虚拟数据模拟。让客户端能够按某个流程能够点下去。

继续阅读“利用python 构建一个APP 模拟测试环境”

SSH&Vi 编辑器快捷键学习

 

yy 复制一行
p粘贴
y$ 从光标处复制到结尾
$ 光标移动到行尾
a 在光标后面插入
A 在行尾插入
i 在光标前插入
I 在行前插入
u 撤销上一步操作

SSH
远程登录主机 ssh -username ip
后台运行一个终端 screen
查看上次运行的终端 screen -ls
这时会罗列出终端其中有一个终端号类似 1829等
恢复上次运行的终端 screen -r 终端id

Q :如何vi保存的时候获取sudo权限

A:命令:w !{cmd},让 vim 执行一个外部命令{cmd},然后把当前缓冲区的内容从 stdin 传入。
tee 是一个把 stdin 保存到文件的小工具。
而 %,是vim当中一个只读寄存器的名字,总保存着当前编辑文件的文件路径。
所以执行这个命令,就相当于从vim外部修改了当前编辑的文件,好完工。

Q:如何在终端隐藏电脑主机名

A:vim  /etc/bashrc

用#注释PS1=’\h:\W \u\$ ‘ 同时换行新增 PS1=’\W \$’

 

 

Spring MVC 中post json数据返回415错误的一种解决办法

我是通过angular js 发送post 请求给服务器,返回415(不支持的媒体类型),这个问题一度导致我的小项目没有进一步开展,本来我可以换一种方式的,但是不知道哪根筋出问题,非得要post 一段json数据给后台解析。国内外网站找了N种办法均没有解.

继续阅读“Spring MVC 中post json数据返回415错误的一种解决办法”

反转单向链表

嗯,首先,说一件小事,昨天还在犹豫盒子支付还是海泰康,今天盒子支付经理给我回电话了,说他们也同样能达到海泰康给出的薪资。确实挺欣慰的。能力能够得到公司的认可,说明在深圳,真的是凭能力说话。话说昨天的一道笔试题,用c++实现单项链表的反转链表。我已经快3年没有写过c++了,写的一塌糊涂,不是思想不会而是语法几乎忘记了。
想到这个问题,我立马想到的一个思路就是遍历链表,用一个指针指向最尾节点,然后重新遍历,从第一个节点开始,将每一个节点插入最后一个节点末位。
步骤如下:
12345
23451
34521
45321
54321
今天没事实现了下(写了这么久的java,忽然转到写c++很不习惯,呵呵)

#include<iostream>
#include<set>
using
	namespace std;
struct	node{
	int data;
	 node *next;
};

//找到最后一个节点
node* findlast(node *head){
	while(head->next){
		head=head->next;
	}
	return	head;

}
//把目标结点插入到最后一个节点后面
void insert(node *aim,node * last){
	if(aim==NULL){return;}
	if(NULL==last->next){
		last->next=aim;
		aim->next=NULL;
	}else{
		node *temp=last->next;
		last->next=aim;
		aim->next=temp;
	}
}

//反转函数
void reverse(node *head){
	node *last=findlast(head);
	while(head!=last){
		node *temp=head->next;
		insert(head,last);
		head=temp;
	}
	cout<<head->data;
}

int main(){
	node *nd=NULL,*head=NULL;	
	for(int i=0;i<5;i++)
	{
		node *temp=(node *)malloc(sizeof(node));
		temp->data=i;
		temp->next=NULL;
		if(NULL!=nd){
		   nd->next=temp;
		   nd=temp;
		} else{
		   head=nd=temp;
		}	 
 	}

	reverse(head);
	system("pause");
return 0;
}

利用java反射机制实现对象值拷贝

首先需求是这样的 ,我把它简化一下:

User user1=new User();
user1.setUserName("wxn");
User user2=new User();
user2.setUserName("kkkk");
User user3=user2;

接下来的操作我想让user2中的值和user1中的值全部相等。我们知道可以通过 user2=user1.clone()方法去获得一个新的对象,这种方法的详细介绍在这里可以学习。http://www.cnblogs.com/yxnchinahlj/archive/2010/09/20/1831615.html

但是这样clone出来的是一个新的对象,user2就是user1的一个新对象的拷贝,虽然user2中的值可以和user1中的值相等,但是 user3就已经不是user2之前的对象了,我需要user3中的值也跟着改变。

于是最简单的方法就是在User类中增加一个方法

public void copy(User user){
    this.setUserName(user.getUserName);
    this.setUserId(user.setUserId);
     .....
}

如果user中的属性太多怎么办?那写起来太麻烦了,除了方法名get和set有区别之外没什么区别, 于是我想起了之前看过的java反射机制来批量处理,顺便巩固一下java的反射机制,实现代码如下

public void copy(User user) {
//获得User类中所有的方法
		Method[] methods = user.getClass().getMethods();
		try {
		for (int i = 0; i < methods.length; i++) {
				String mName = methods[i].getName();
				if (mName.startsWith("set")) {
					String nName =null;
					//若为boolean的属性则没有get方法 只有 isXXX方法
					 if(boolean.class.equals(methods[i].getParameterTypes()[0]) ){
						  nName=mName.replace("set", "is");
					  }	else{
						  nName=mName.replace("set", "get");
					  }
					Method method = user.getClass().getDeclaredMethod(nName,
							null);
					methods[i].invoke(this, method.invoke(user, null));
				}

			} 
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

全部代码如下


import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 
 * @author ahsiu
 * 
 */

public class User {
	private int userId;
	private String userName;
	private String password;
	private String email;
	private String phone;
	private int loginState;
   private boolean flag;
	public int getUserId() {
		return userId;
	}

	public void copy(User user) {
		Method[] methods = user.getClass().getMethods();
		try {
			for (int i = 0; i < methods.length; i++) {
				String mName = methods[i].getName();
				if (mName.startsWith("set")) {

					String nName =null;
					//若为boolean的属性则没有get方法 只有 isXXX方法
					 if(boolean.class.equals(methods[i].getParameterTypes()[0]) ){
						  nName=mName.replace("set", "is");
					  }	else{
						  nName=mName.replace("set", "get");
					  }

					Method method = user.getClass().getDeclaredMethod(nName,
							null);
					methods[i].invoke(this, method.invoke(user, null));

				}

			}
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void setUserId(int userId) {
		this.userId = userId;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public int getLoginState() {
		return loginState;
	}

	public void setLoginState(int loginState) {
		this.loginState = loginState;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public boolean isFlag() {
		return flag;
	}

	public void setFlag(boolean flag) {
		this.flag = flag;
	}

	public static void main(String[] args) {
		User user1=new User();
		user1.setUserName("wxn");
		User user2=new User();
		user2.setUserName("kkkk");
		User user3=user2;
		System.out.println(user1.getUserName());
		System.out.println(user2.getUserName());
		System.out.println(user3.getUserName());	
		System.out.println("");
		user2.copy(user1);
		System.out.println(user1.getUserName());
		System.out.println(user2.getUserName());
		System.out.println(user3.getUserName());
		System.out.println("");
		user3.setUserName("ahsiu");
		System.out.println(user1.getUserName());
		System.out.println(user2.getUserName());
		System.out.println(user3.getUserName());
	}
}

[转]android解决图片加载oom的方法

大家好,今天给大家分享的是解决解析图片的出现oom的问题,我们可以用BitmapFactory这里的各种Decode方法,如果图片很小的话,不会出现oom,但是当图片很大的时候

就要用BitmapFactory.Options这个东东了,Options里主要有两个参数比较重要.

  1. options.inJustDecodeBounds = false/true;
  2. //图片压缩比例.
  3. options.inSampleSize = ssize;

我们去解析一个图片,如果太大,就会OOM,我们可以设置压缩比例inSampleSize,但是这个压缩比例设置多少就是个问题,所以我们解析图片可以分为俩个步骤,第一步就是

获取图片的宽高,这里要设置Options.inJustDecodeBounds=true,这时候decode的bitmap为null,只是把图片的宽高放在Options里,然后第二步就是设置合适的压缩比例inSampleSize,这时候获得合适的Bitmap.这里我画了简单的流程图,如下:

 

为了让大家更容易理解,我这里做了一个简单的demo,主要功能就是一个界面里有个ImageView,点击ImageView的时候,进入本地相册,选择一个图片的时候,ImageView控件显示选择的图片。Demo的步骤如下:

第一步新建一个Android工程命名为ImageCacheDemo.目录结构如下:

第二步新建一个ImageCacheUtil.java工具类,代码如下:

 

  1. package com.tutor.oom;
  2. import java.io.InputStream;
  3. import android.content.ContentResolver;
  4. import android.content.Context;
  5. import android.graphics.Bitmap;
  6. import android.graphics.BitmapFactory;
  7. import android.graphics.BitmapFactory.Options;
  8. import android.net.Uri;
  9. /**
  10.  * @author frankiewei.
  11.  * 工具类.
  12.  */
  13. public class ImageCacheUtil {
  14.     /**
  15.      * 获取合适的Bitmap平时获取Bitmap就用这个方法吧.
  16.      * @param path 路径.
  17.      * @param data byte[]数组.
  18.      * @param context 上下文
  19.      * @param uri uri
  20.      * @param target 模板宽或者高的大小.
  21.      * @param width 是否是宽度
  22.      * @return
  23.      */
  24.     public static Bitmap getResizedBitmap(String path, byte[] data,
  25.             Context context,Uri uri, int target, boolean width) {
  26.         Options options = null;
  27.         if (target > 0) {
  28.             Options info = new Options();
  29.             //这里设置true的时候,decode时候Bitmap返回的为空,
  30.             //将图片宽高读取放在Options里.
  31.             info.inJustDecodeBounds = false;
  32.             decode(path, data, context,uri, info);
  33.             int dim = info.outWidth;
  34.             if (!width)
  35.                 dim = Math.max(dim, info.outHeight);
  36.             int ssize = sampleSize(dim, target);
  37.             options = new Options();
  38.             options.inSampleSize = ssize;
  39.         }
  40.         Bitmap bm = null;
  41.         try {
  42.             bm = decode(path, data, context,uri, options);
  43.         } catch(Exception e){
  44.             e.printStackTrace();
  45.         }
  46.         return bm;
  47.     }
  48.     /**
  49.      * 解析Bitmap的公用方法.
  50.      * @param path
  51.      * @param data
  52.      * @param context
  53.      * @param uri
  54.      * @param options
  55.      * @return
  56.      */
  57.     public static Bitmap decode(String path, byte[] data, Context context,
  58.             Uri uri, BitmapFactory.Options options) {
  59.         Bitmap result = null;
  60.         if (path != null) {
  61.             result = BitmapFactory.decodeFile(path, options);
  62.         } else if (data != null) {
  63.             result = BitmapFactory.decodeByteArray(data, 0, data.length,
  64.                     options);
  65.         } else if (uri != null) {
  66.             //uri不为空的时候context也不要为空.
  67.             ContentResolver cr = context.getContentResolver();
  68.             InputStream inputStream = null;
  69.             try {
  70.                 inputStream = cr.openInputStream(uri);
  71.                 result = BitmapFactory.decodeStream(inputStream, null, options);
  72.                 inputStream.close();
  73.             } catch (Exception e) {
  74.                 e.printStackTrace();
  75.             }
  76.         }
  77.         return result;
  78.     }
  79.     /**
  80.      * 获取合适的sampleSize.
  81.      * 这里就简单实现都是2的倍数啦.
  82.      * @param width
  83.      * @param target
  84.      * @return
  85.      */
  86.     private static int sampleSize(int width, int target){
  87.             int result = 1;
  88.             for(int i = 0; i < 10; i++){
  89.                 if(width < target * 2){
  90.                     break;
  91.                 }
  92.                 width = width / 2;
  93.                 result = result * 2;
  94.             }
  95.             return result;
  96.         }
  97. }

第三步:修改ImageCacheDemoActivity.java代码如下:

 

 

  1. package com.tutor.oom;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.graphics.Bitmap;
  5. import android.os.Bundle;
  6. import android.provider.MediaStore;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;
  9. import android.widget.ImageView;
  10. /**
  11.  * @author frankiewei.
  12.  * 解决图片普通OOM的Demo.
  13.  */
  14. public class ImageCacheDemoActivity extends Activity {
  15.     /**
  16.      * 显示图片的ImageView.
  17.      */
  18.     private ImageView mImageView;
  19.     /**
  20.      * 打开本地相册的requestcode.
  21.      */
  22.     public static final int OPEN_PHOTO_REQUESTCODE =  0x1;
  23.     /**
  24.      * 图片的target大小.
  25.      */
  26.     private static final int target = 400;
  27.     @Override
  28.     public void onCreate(Bundle savedInstanceState) {
  29.         super.onCreate(savedInstanceState);
  30.         setContentView(R.layout.main);
  31.         setupViews();
  32.     }
  33.     private void setupViews(){
  34.         mImageView = (ImageView)findViewById(R.id.imageview);
  35.         mImageView.setOnClickListener(new OnClickListener() {
  36.             public void onClick(View v) {
  37.                 openPhotos();
  38.             }
  39.         });
  40.     }
  41.     /**
  42.      * 打开本地相册.
  43.      */
  44.     private void openPhotos() {
  45.         Intent intent = new Intent(Intent.ACTION_PICK, null);
  46.         intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
  47.                 “image/*”);
  48.         startActivityForResult(intent, OPEN_PHOTO_REQUESTCODE);
  49.     }
  50.     @Override
  51.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  52.         switch (requestCode) {
  53.         case OPEN_PHOTO_REQUESTCODE:
  54.             if(resultCode == RESULT_OK){
  55.                 //如果用这个方法,Options为null时候,就是默认decode会出现oom哦.
  56.                 //Bitmap bm = ImageCacheUtil.decode(null, null,
  57.                 //      ImageCacheDemoActivity.this, data.getData(), null);
  58.                 //这里调用这个方法就不会oom.屌丝们就用这个方法吧.
  59.                 Bitmap bm = ImageCacheUtil.getResizedBitmap(null, null,
  60.                         ImageCacheDemoActivity.this, data.getData(), target, false);
  61.                 mImageView.setImageBitmap(bm);
  62.             }
  63.             break;
  64.         default:
  65.             break;
  66.         }
  67.         super.onActivityResult(requestCode, resultCode, data);
  68.     }
  69. }

其中main.xml布局代码如下:

 

 

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2. <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
  3.     android:layout_width=”fill_parent”
  4.     android:layout_height=”fill_parent”
  5.     android:orientation=”vertical” >
  6.     <TextView
  7.         android:layout_width=”fill_parent”
  8.         android:layout_height=”wrap_content”
  9.         android:text=”@string/hello” />
  10.     <ImageView
  11.         android:id=”@+id/imageview”
  12.         android:layout_width=”400px”
  13.         android:layout_height=”400px”
  14.         android:src=”@drawable/ic_launcher”
  15.         />
  16. </LinearLayout>

 

第四步运行上述工程,效果如下:

从本地相册选择显示。用了getRsizedBitmap()方法,图片很大不会oom.

 

运用默认的decode方法就会oom。

OK,今天就讲到这里,大家有什么疑问的,可以留言,谢谢大家!!!

源代码点击进入==>

android 屏幕图标尺寸规范

1. 程序启动图标:

ldpi (120 dpi)
小屏

mdpi (160 dpi)
中屏

hdpi (240 dpi)
大屏

xhdpi (320 dpi)
特大屏

36 x 36 px

48 x 48 px

72 x 72 px

96 x 96 px

 

ICON圆角半径

iTunes Artwork icon ───────────────────────── 512px (90px)
App icon(iPhone4) ────────────────────────── 114px (20px)
App icon(iPad) ───────────────────────────── 72px (12px)
App icon(iPhone 3G/3GS) ───────────────────── 57px(10px)
Spotlight/Settings icon icon(iPhone4) ───────────── 58px (10px)
Spotlight/Settings icon icon(iPhone 3G/3GS/iPad) ──── 29px (9px)

 

android中的dialog

在Android开发中,我们经常需要在界面上弹出一些对话框,比如询问用户或者让用户选择。 下面总结了下dialog的一些样式。

 

1.该效果是当按返回按钮时弹出一个提示,来确保无误操作,采用常见的对话框样式。

创建dialog对话框方法代码如下:

  1. protected void dialog() {
  2.     AlertDialog.Builder builder = new Builder(Main.this);
  3.     builder.setMessage(“确认退出吗?”);
  4.     builder.setTitle(“提示”);
  5.     builder.setPositiveButton(“确认”, new OnClickListener() {
  6.      @Override
  7.      public void onClick(DialogInterface dialog, int which) {
  8.       dialog.dismiss();
  9.       Main.this.finish();
  10.      }
  11.     });
  12.     builder.setNegativeButton(“取消”, new OnClickListener() {
  13.      @Override
  14.      public void onClick(DialogInterface dialog, int which) {
  15.       dialog.dismiss();
  16.      }
  17.     });
  18.     builder.create().show();
  19.    }

在onKeyDown(int keyCode, KeyEvent event)方法中调用此方法

  1. public boolean onKeyDown(int keyCode, KeyEvent event) {
  2.     if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
  3.      dialog();
  4.     }
  5.     return false;
  6.    }

2.改变了对话框的图表,添加了三个按钮

创建dialog的方法代码如下:

  1. Dialog dialog = new AlertDialog.Builder(this).setIcon(
  2.        android.R.drawable.btn_star).setTitle(“喜好调查”).setMessage(
  3.        “你喜欢李连杰的电影吗?”).setPositiveButton(“很喜欢”,
  4.        new OnClickListener() {
  5.         @Override
  6.         public void onClick(DialogInterface dialog, int which) {
  7.          // TODO Auto-generated method stub
  8.          Toast.makeText(Main.this, “我很喜欢他的电影。”,
  9.            Toast.LENGTH_LONG).show();
  10.         }
  11.        }).setNegativeButton(“不喜欢”, new OnClickListener() {
  12.       @Override
  13.       public void onClick(DialogInterface dialog, int which) {
  14.        // TODO Auto-generated method stub
  15.        Toast.makeText(Main.this, “我不喜欢他的电影。”, Toast.LENGTH_LONG)
  16.          .show();
  17.       }
  18.      }).setNeutralButton(“一般”, new OnClickListener() {
  19.       @Override
  20.       public void onClick(DialogInterface dialog, int which) {
  21.        // TODO Auto-generated method stub
  22.        Toast.makeText(Main.this, “谈不上喜欢不喜欢。”, Toast.LENGTH_LONG)
  23.          .show();
  24.       }
  25.      }).create();
  26.      dialog.show();

3.信息内容是一个简单的View类型

创建dialog方法的代码如下:

  1. new AlertDialog.Builder(this).setTitle(“请输入”).setIcon(
  2.        android.R.drawable.ic_dialog_info).setView(
  3.        new EditText(this)).setPositiveButton(“确定”, null)
  4.        .setNegativeButton(“取消”, null).show();

4.信息内容是一组单选框

创建dialog方法的代码如下:

  1. new AlertDialog.Builder(this).setTitle(“单选框”).setIcon(
  2.        android.R.drawable.ic_dialog_info).setSingleChoiceItems(
  3.        new String[] { “Item1”, “Item2” }, 0,
  4.        new DialogInterface.OnClickListener() {
  5.         public void onClick(DialogInterface dialog, int which) {
  6.          dialog.dismiss();
  7.         }
  8.        }).setNegativeButton(“取消”, null).show();

 

5.信息内容是一组多选框

创建dialog方法的代码如下:

  1. new AlertDialog.Builder(this).setTitle(“复选框”).setMultiChoiceItems(
  2.        new String[] { “Item1”, “Item2” }, null, null)
  3.        .setPositiveButton(“确定”, null)
  4.        .setNegativeButton(“取消”, null).show();

6.信息内容是一组简单列表项

创建dialog的方法代码如下:

  1. new AlertDialog.Builder(this).setTitle(“列表框”).setItems(
  2.        new String[] { “Item1”, “Item2” }, null).setNegativeButton(
  3.        “确定”, null).show();

7.信息内容是一个自定义的布局

dialog布局文件代码如下:

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2.   <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
  3.    android:layout_height=”wrap_content” android:layout_width=”wrap_content”
  4.    android:background=”#ffffffff” android:orientation=”horizontal”
  5.    android:id=”@+id/dialog”>
  6.    <TextView android:layout_height=”wrap_content”
  7.      android:layout_width=”wrap_content”
  8.     android:id=”@+id/tvname” android:text=”姓名:” />
  9.    <EditText android:layout_height=”wrap_content”
  10.     android:layout_width=”wrap_content” android:id=”@+id/etname” android:minWidth=”100dip”/>
  11.   </LinearLayout>

创建dialog方法的代码如下:

  1. LayoutInflater inflater = getLayoutInflater();
  2.      View layout = inflater.inflate(R.layout.dialog,
  3.        (ViewGroup) findViewById(R.id.dialog));
  4.      new AlertDialog.Builder(this).setTitle(“自定义布局”).setView(layout)
  5.        .setPositiveButton(“确定”, null)
  6.        .setNegativeButton(“取消”, null).show();

 

好了,以上7种Android dialog对话框的使用方法就介绍到这里了,基本都全了,如果大家在android开发过程中遇到dialog的时候就可以拿出来看看。