首页 > 代码库 > 头像图片上传到sd及服务器
头像图片上传到sd及服务器
首先在AndroidManifest.xml设置权限:
<!-- 传头像 --> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
在服务器端加入jar包:commons-fileupload-1.3.1.jar,commons-io-2.4.jar
jar包下载地址:http://pan.baidu.com/s/1mg7gPvi
servlet文件:headerPortaitUploadServlet
1 package com.ghp.servlet; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.io.PrintWriter; 6 import java.util.Iterator; 7 import java.util.List; 8 9 import javax.servlet.ServletException; 10 import javax.servlet.http.HttpServlet; 11 import javax.servlet.http.HttpServletRequest; 12 import javax.servlet.http.HttpServletResponse; 13 14 import org.apache.commons.fileupload.DiskFileUpload; 15 import org.apache.commons.fileupload.FileItem; 16 17 import com.ghp.dao.UsersDao; 18 19 public class headerPortaitUploadServlet extends HttpServlet { 20 21 /** 22 * Constructor of the object. 23 */ 24 public headerPortaitUploadServlet() { 25 super(); 26 } 27 28 /** 29 * Destruction of the servlet. <br> 30 */ 31 public void destroy() { 32 super.destroy(); // Just puts "destroy" string in log 33 // Put your code here 34 } 35 36 /** 37 * The doGet method of the servlet. <br> 38 * 39 * This method is called when a form has its tag value method equals to get. 40 * 41 * @param request the request send by the client to the server 42 * @param response the response send by the server to the client 43 * @throws ServletException if an error occurred 44 * @throws IOException if an error occurred 45 */ 46 public void doGet(HttpServletRequest request, HttpServletResponse response) 47 throws ServletException, IOException { 48 49 doPost(request, response); 50 } 51 52 /** 53 * The doPost method of the servlet. <br> 54 * 55 * This method is called when a form has its tag value method equals to post. 56 * 57 * @param request the request send by the client to the server 58 * @param response the response send by the server to the client 59 * @throws ServletException if an error occurred 60 * @throws IOException if an error occurred 61 */ 62 public void doPost(HttpServletRequest request, HttpServletResponse response) 63 throws ServletException, IOException { 64 65 response.setContentType("text/html;charset=utf8"); 66 PrintWriter out = response.getWriter(); 67 //临时目录 68 String temp=request.getSession().getServletContext().getRealPath("/")+"temp"; 69 //上传文件存放目录 70 String loadpath=request.getSession().getServletContext().getRealPath("/")+"headerportaitimages"; 71 DiskFileUpload fu = new DiskFileUpload(); 72 fu.setSizeMax(1*1024*1024); // 设置允许用户上传文件大小,单位:字节 73 fu.setSizeThreshold(4096); // 设置最多只允许在内存中存储的数据,单位:字节 74 fu.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录 75 76 //开始读取上传信息 77 int index=0; 78 List fileItems = null; 79 try { 80 fileItems = fu.parseRequest(request); 81 System.out.println("fileItems="+fileItems); 82 } catch (Exception e) { 83 e.printStackTrace(); 84 } 85 86 // 依次处理每个上传的文件 87 Iterator iter = fileItems.iterator(); 88 while (iter.hasNext()) 89 { 90 FileItem item = (FileItem)iter.next();// 忽略其他不是文件域的所有表单信息 91 if (!item.isFormField()) 92 { 93 String img = item.getName();//获取上传文件名,包括路径 94 img=img.substring(img.lastIndexOf("\\")+1);//从全路径中提取文件名 95 long size = item.getSize(); 96 if((img==null||img.equals("")) && size==0){ 97 continue; 98 } 99 // int point = img.indexOf(".");100 // img=(new Date()).getTime()+index+img.substring(point,img.length());101 // index++;102 File fNew= new File(loadpath, img);103 try {104 item.write(fNew);105 } catch (Exception e) {106 // TODO Auto-generated catch block107 e.printStackTrace();108 }109 /*int len=img.length();110 int length=len-11;111 String userName=img.substring(0,length); 112 boolean b=UsersDao.updateUsersImg(userName, img);113 out.println(b);*/114 115 }else{116 //取出不是文件域的所有表单信息117 String fieldvalue =http://www.mamicode.com/ item.getString();118 //如果包含中文应写为:(转为UTF-8编码)119 //String fieldvalue = http://www.mamicode.com/new String(item.getString().getBytes(),"UTF-8");120 }121 }122 //response.getOutputStream().print(true);123 out.println(true);124 //out.flush();125 //out.close();126 }127 128 /**129 * Initialization of the servlet. <br>130 *131 * @throws ServletException if an error occurs132 */133 public void init() throws ServletException {134 // Put your code here135 }136 137 }
上传头像图片的activity:PersonnalMessageActivity
1 package com.ghp.guodouRecipe; 2 3 import java.io.File; 4 import java.io.FileNotFoundException; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 8 import com.android.volley.Request.Method; 9 import com.android.volley.RequestQueue; 10 import com.android.volley.Response.ErrorListener; 11 import com.android.volley.Response.Listener; 12 import com.android.volley.VolleyError; 13 import com.android.volley.toolbox.ImageLoader; 14 import com.android.volley.toolbox.Volley; 15 import com.ghp.entity.Users; 16 import com.ghp.tools.CustomRequest; 17 import com.ghp.tools.GuodouRecipeApplication; 18 import com.ghp.tools.ToRoundBitmap; 19 import com.ghp.tools.UploadUtil; 20 import com.google.gson.Gson; 21 22 import android.annotation.SuppressLint; 23 import android.app.Activity; 24 import android.app.AlertDialog; 25 import android.content.DialogInterface; 26 import android.content.Intent; 27 import android.graphics.Bitmap; 28 import android.graphics.BitmapFactory; 29 import android.graphics.drawable.BitmapDrawable; 30 import android.graphics.drawable.Drawable; 31 import android.net.Uri; 32 import android.os.Bundle; 33 import android.os.Environment; 34 import android.os.Handler; 35 import android.os.Message; 36 import android.os.StrictMode; 37 import android.provider.MediaStore; 38 import android.view.Menu; 39 import android.view.MenuItem; 40 import android.view.View; 41 import android.view.View.OnClickListener; 42 import android.view.Window; 43 import android.widget.EditText; 44 import android.widget.ImageView; 45 import android.widget.TextView; 46 import android.widget.Toast; 47 48 public class PersonnalMessageActivity extends Activity implements OnClickListener { 49 private String userName; 50 private String selecteSex; 51 /**头像*/ 52 ImageView header_portrait_personnal_img; 53 /**头像Bitmap*/ 54 private Bitmap headerPortait; 55 private static String path="/sdcard/guodouRecipe/myHeader/";//sd路径 56 private String[] items = new String[] { "选择本地图片", "拍照" }; 57 private String picPath = null; 58 private RequestQueue requestQueue=null; 59 private ImageLoader mImageLoader; 60 61 TextView user_name_personnal_text; 62 TextView user_tag_personnal_text; 63 TextView user_sex_personnal_text; 64 TextView user_area_personnal_text; 65 66 ImageView go_back_fisrt; 67 @SuppressLint("NewApi") 68 @Override 69 protected void onCreate(Bundle savedInstanceState) { 70 this.requestWindowFeature(Window.FEATURE_NO_TITLE); 71 super.onCreate(savedInstanceState); 72 setContentView(R.layout.activity_personnal_message); 73 Intent intent=getIntent(); 74 userName=intent.getStringExtra("userName"); 75 76 //*****头像的处理***** 77 requestQueue=Volley.newRequestQueue(PersonnalMessageActivity.this); 78 StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build()); 79 StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectLeakedSqlLiteObjects().detectLeakedClosableObjects().penaltyLog().penaltyDeath().build()); 80 81 initView(); 82 //********** 83 84 85 86 String url="http://172.27.211.1/guodouRecipe/servlet/find_user_message_servlet"; 87 CustomRequest request=new CustomRequest(Method.POST, url, new Listener<String>() { 88 89 @Override 90 public void onResponse(String result) { 91 // TODO Auto-generated method stub 92 Gson gson=new Gson(); 93 Users u=gson.fromJson(result, Users.class); 94 user_name_personnal_text.setHint(userName); 95 user_tag_personnal_text.setText(u.getUserPersonnalTag()); 96 user_sex_personnal_text.setText(u.getUserSex()); 97 } 98 }, new ErrorListener(){ 99 100 @Override101 public void one rrorResponse(VolleyError arg0) {102 // TODO Auto-generated method stub103 104 }105 106 });107 request.setParam("userName", userName);108 109 GuodouRecipeApplication app=(GuodouRecipeApplication)PersonnalMessageActivity.this.getApplication();110 app.getmRequestQueue().add(request);111 }112 113 private void initView() {114 header_portrait_personnal_img=(ImageView) findViewById(R.id.header_portrait_personnal_img);115 header_portrait_personnal_img.setOnClickListener(listener);116 117 //*******头像处理*******118 Bitmap bt = BitmapFactory.decodeFile(path + "/"+userName+"_header.jpg");//从Sd中找头像,转换成Bitmap119 if(bt!=null){120 @SuppressWarnings("deprecation")121 Drawable drawable = new BitmapDrawable(bt);//转换成drawable122 //圆形123 header_portrait_personnal_img.setImageBitmap(ToRoundBitmap.toRoundBitmap(bt));124 //方形125 //header_portrait_personnal_img.setImageDrawable(drawable);126 }else{127 /**128 * 如果SD里面没有则需要从服务器取头像,取回来的头像再保存在SD中129 * 130 */131 mImageLoader = getImageLoader();132 String url="http://172.27.211.1/guodouRecipe/headerportaitimages/";133 String userImg=userName+"_header.jpg";134 mImageLoader.get(url+userImg, mImageLoader.getImageListener(header_portrait_personnal_img, 0, 0));135 Bitmap bm=header_portrait_personnal_img.getDrawingCache();136 header_portrait_personnal_img.setImageBitmap(ToRoundBitmap.toRoundBitmap(bm));137 } 138 //****************************139 140 user_name_personnal_text=(TextView) findViewById(R.id.user_name_personnal_text);141 //user_name_personnal_text.setOnClickListener(this);142 user_tag_personnal_text=(TextView) findViewById(R.id.user_tag_personnal_text);143 user_tag_personnal_text.setOnClickListener(this);144 user_sex_personnal_text=(TextView) findViewById(R.id.user_sex_personnal_text);145 user_sex_personnal_text.setOnClickListener(this);146 user_area_personnal_text=(TextView) findViewById(R.id.user_area_personnal_text);147 user_area_personnal_text.setOnClickListener(this);148 149 go_back_fisrt=(ImageView) findViewById(R.id.go_back_fisrt);150 go_back_fisrt.setOnClickListener(this);151 }152 153 //*******头像处理*******154 private View.OnClickListener listener = new View.OnClickListener(){155 156 @Override157 public void onClick(View v) {158 // TODO Auto-generated method stub159 showDialog();160 }};161 /**162 * 显示选择对话框163 */164 private void showDialog() {165 166 new AlertDialog.Builder(this)167 .setTitle("设置头像")168 .setItems(items, new DialogInterface.OnClickListener() {169 170 @Override171 public void onClick(DialogInterface dialog, int which) {172 switch (which) {173 case 0:174 Intent intent1 = new Intent(Intent.ACTION_PICK, null);175 intent1.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");176 startActivityForResult(intent1, 11);177 break;178 case 1:179 180 Intent intent2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);181 intent2.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(),182 "/"+userName+"_header.jpg")));183 startActivityForResult(intent2, 22);//采用ForResult打开184 break;185 }186 }187 })188 .setNegativeButton("取消", new DialogInterface.OnClickListener() {189 190 @Override191 public void onClick(DialogInterface dialog, int which) {192 dialog.dismiss();193 }194 }).show();195 }196 197 /**198 * 调用系统的裁剪199 * @param uri200 */201 public void cropPhoto(Uri uri) {202 Intent intent = new Intent("com.android.camera.action.CROP");203 intent.setDataAndType(uri, "image/*");204 intent.putExtra("crop", "true");205 // aspectX aspectY 是宽高的比例206 intent.putExtra("aspectX", 1);207 intent.putExtra("aspectY", 1);208 // outputX outputY 是裁剪图片宽高209 intent.putExtra("outputX", 150);210 intent.putExtra("outputY", 150);211 intent.putExtra("return-data", true);212 startActivityForResult(intent, 33);213 }214 /**头像保存到sd*/215 private void setPicToView(Bitmap mBitmap) {216 String sdStatus = Environment.getExternalStorageState(); 217 if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用 218 return; 219 } 220 FileOutputStream b = null;221 File file = new File(path);222 file.mkdirs();// 创建文件夹223 String fileName =path +userName+"_header.jpg";//图片名字224 try {225 picPath = fileName;226 b = new FileOutputStream(fileName);227 mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件228 229 } catch (FileNotFoundException e) {230 e.printStackTrace();231 } finally {232 try {233 //关闭流234 b.flush();235 b.close();236 } catch (IOException e) {237 e.printStackTrace();238 }239 240 }241 }242 243 @Override244 protected void onActivityResult(int requestCode, int resultCode, Intent data) {245 switch (requestCode) {246 case 11:247 if (resultCode == RESULT_OK) {248 cropPhoto(data.getData());//裁剪图片249 }250 251 break;252 case 22:253 if (resultCode == RESULT_OK) {254 File temp = new File(Environment.getExternalStorageDirectory()255 + "/"+userName+"_header.jpg");256 cropPhoto(Uri.fromFile(temp));//裁剪图片257 }258 259 break;260 case 33:261 if (data != null) {262 Bundle extras = data.getExtras();263 headerPortait = extras.getParcelable("data");264 if(headerPortait!=null){265 setPicToView(headerPortait);//保存在SD卡中266 File file = new File(picPath);267 String request = UploadUtil.uploadFile( file, "http://172.27.211.1/guodouRecipe/servlet/headerPortaitUploadServlet"); 268 if (request!=null&&!request.equals("")) {269 Toast.makeText(getApplicationContext(), "头像修改成功", 0).show(); 270 }271 header_portrait_personnal_img.setImageBitmap(ToRoundBitmap.toRoundBitmap(headerPortait));//用ImageView显示出来272 }273 }274 break;275 default:276 break;277 278 }279 super.onActivityResult(requestCode, resultCode, data);280 };281 //**********************************282 @Override283 public void onClick(View v) {284 // TODO Auto-generated method stub285 switch (v.getId()) {286 case R.id.user_tag_personnal_text:287 //个性标签处理288 final EditText et=new EditText(PersonnalMessageActivity.this);289 new AlertDialog.Builder(PersonnalMessageActivity.this)290 .setTitle("编辑个性标签")291 .setView(et)292 .setPositiveButton("确定", 293 new DialogInterface.OnClickListener() {294 295 @Override296 public void onClick(DialogInterface dialog, int which) {297 final String changeUserPersonnalTag=et.getText().toString();298 //if (changeUserPersonnalTag!=null&&!changeUserPersonnalTag.equals("")) {299 String url="http://172.27.211.1/guodouRecipe/servlet/changeUserPersonnalTagServlet";300 CustomRequest postRequest=new CustomRequest(Method.POST, url, new Listener<String>() {301 302 @Override303 public void onResponse(String ret) {304 if(ret.equals("true")){305 if(changeUserPersonnalTag!=null&&!changeUserPersonnalTag.equals("")){306 user_tag_personnal_text.setText(et.getText().toString()); 307 myHandler.sendEmptyMessage(0);308 }else{309 user_tag_personnal_text.setHint("未填写");310 Toast.makeText(getApplicationContext(), "没有编辑", 0).show();311 } 312 }313 314 }315 }, new ErrorListener(){316 317 @Override318 public void one rrorResponse(VolleyError arg0) {319 // TODO Auto-generated method stub320 myHandler.sendEmptyMessage(1);321 }}); 322 postRequest.setParam("userName", userName);323 postRequest.setParam("changeUserPersonnalTag", changeUserPersonnalTag);324 requestQueue.add(postRequest);325 326 //} else {327 // Toast.makeText(getApplicationContext(), "没有编辑", 0).show();328 //}329 }330 })331 .setNegativeButton("取消",new DialogInterface.OnClickListener() {332 333 @Override334 public void onClick(DialogInterface arg0, int arg1) {335 Toast.makeText(getApplicationContext(), "已放弃编辑", 0).show();336 }337 })338 .setCancelable(false)339 .show();340 341 break;342 case R.id.user_sex_personnal_text:343 final String[] sexs={"男","女"};344 selecteSex=sexs[0];345 new AlertDialog.Builder(PersonnalMessageActivity.this)346 .setTitle("请选择性别")347 .setSingleChoiceItems(sexs, 0,348 new DialogInterface.OnClickListener() {349 350 @Override351 public void onClick(DialogInterface dialog, int which) {352 // TODO Auto-generated method stub353 selecteSex=sexs[which];354 }355 })356 .setPositiveButton("确定", 357 new DialogInterface.OnClickListener() {358 359 @Override360 public void onClick(DialogInterface dialog, int which) {361 // TODO Auto-generated method stub362 Toast.makeText(PersonnalMessageActivity.this, selecteSex, Toast.LENGTH_SHORT).show();363 String url="http://172.27.211.1/guodouRecipe/servlet/changeUserSexServlet";364 CustomRequest postRequest=new CustomRequest(Method.POST, url, new Listener<String>() {365 366 @Override367 public void onResponse(String ret) {368 if(ret.equals("true")){369 user_sex_personnal_text.setText(selecteSex); 370 //myHandler.sendEmptyMessage(0);371 372 } 373 }374 }, new ErrorListener(){375 376 @Override377 public void one rrorResponse(VolleyError arg0) {378 // TODO Auto-generated method stub379 myHandler.sendEmptyMessage(1);380 }}); 381 postRequest.setParam("userName", userName);382 postRequest.setParam("selecteSex", selecteSex);383 requestQueue.add(postRequest);384 }385 })386 .setNegativeButton("取消", null)387 .show();388 break;389 case R.id.go_back_fisrt:390 Intent intent=new Intent(PersonnalMessageActivity.this,PersonalGuodouActivity.class); 391 intent.putExtra("userName", userName);392 setResult(5,intent);393 finish();394 overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);395 396 break;397 case R.id.user_area_personnal_text:398 Toast.makeText(getApplicationContext(), "还没有开放本功能", Toast.LENGTH_SHORT).show();399 break;400 default:401 break;402 }403 } 404 Handler myHandler=new Handler(){405 406 @Override407 public void handleMessage(Message msg) {408 super.handleMessage(msg);409 switch (msg.what) {410 case 0:411 Toast.makeText(getApplicationContext(), "编辑成功", 0).show();412 break;413 case 1:414 Toast.makeText(getApplicationContext(), "请求失败了", 0).show();415 break;416 default:417 break;418 }419 }420 421 };422 public ImageLoader getImageLoader(){423 GuodouRecipeApplication tna=(GuodouRecipeApplication) getApplication();424 return tna.getmImageLoader();425 }426 }
activity的布局文件:
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 tools:context="${relativePackage}.${activityClass}" > 6 7 <RelativeLayout 8 android:id="@+id/personal_message_header" 9 android:layout_width="match_parent" 10 android:layout_height="50dp" 11 android:background="#efe7d7" > 12 13 <ImageView 14 android:id="@+id/go_back_fisrt" 15 android:layout_width="wrap_content" 16 android:layout_height="fill_parent" 17 android:layout_alignParentLeft="true" 18 android:adjustViewBounds="true" 19 android:gravity="center_vertical" 20 android:src=http://www.mamicode.com/"@drawable/goback_activity" /> 21 22 <ImageView 23 android:id="@+id/header_logo" 24 android:layout_width="wrap_content" 25 android:layout_height="fill_parent" 26 android:layout_gravity="center_vertical" 27 android:layout_marginRight="5dp" 28 android:layout_toRightOf="@+id/go_back_fisrt" 29 android:adjustViewBounds="true" 30 android:src=http://www.mamicode.com/"@drawable/ic_main_logo" /> 31 32 <TextView 33 android:id="@+id/personal_user_name" 34 android:layout_width="wrap_content" 35 android:layout_height="fill_parent" 36 android:layout_toRightOf="@+id/header_logo" 37 android:gravity="center_vertical" 38 android:textSize="18sp" 39 android:textStyle="bold" 40 android:text="个人资料" /> 41 42 </RelativeLayout> 43 <RelativeLayout 44 android:id="@+id/personal_message_canter" 45 android:layout_width="match_parent" 46 android:layout_height="wrap_content" 47 android:layout_below="@+id/personal_message_header" 48 android:layout_marginLeft="15dp" 49 android:layout_marginRight="15dp" 50 android:layout_marginTop="10dp" 51 android:layout_marginBottom="5dp"> 52 <TextView 53 android:id="@+id/header_portrait_personnal" 54 android:layout_width="120dp" 55 android:layout_height="30dp" 56 android:textSize="16sp" 57 android:layout_marginTop="8dp" 58 android:layout_marginBottom="8dp" 59 android:gravity="center_vertical" 60 android:text="头像" /> 61 <ImageView 62 android:id="@+id/header_portrait_personnal_img" 63 android:layout_width="30dp" 64 android:layout_height="30dp" 65 android:layout_marginTop="8dp" 66 android:layout_toRightOf="@+id/header_portrait_personnal" 67 android:background="@drawable/default_user_photo"/> 68 <ImageView 69 android:id="@+id/line1" 70 android:layout_below="@+id/header_portrait_personnal" 71 style="@style/left_drawer_item_line" /> 72 <TextView 73 android:id="@+id/user_name_personnal" 74 android:layout_width="120dp" 75 android:layout_height="30dp" 76 android:layout_below="@+id/line1" 77 android:textSize="16sp" 78 android:layout_marginTop="8dp" 79 android:layout_marginBottom="8dp" 80 android:gravity="center_vertical" 81 android:text="昵称" /> 82 <TextView 83 android:id="@+id/user_name_personnal_text" 84 android:layout_width="wrap_content" 85 android:layout_height="30dp" 86 android:layout_below="@+id/line1" 87 android:layout_marginTop="8dp" 88 android:layout_toRightOf="@+id/header_portrait_personnal" 89 android:textSize="16sp" 90 android:gravity="center_vertical" 91 android:hint="昵称"/> 92 <ImageView 93 android:id="@+id/line2" 94 android:layout_below="@+id/user_name_personnal" 95 style="@style/left_drawer_item_line" /> 96 97 <TextView 98 android:id="@+id/user_tag_personnal" 99 android:layout_width="120dp"100 android:layout_height="30dp"101 android:layout_below="@+id/line2"102 android:textSize="16sp"103 android:layout_marginTop="8dp"104 android:layout_marginBottom="8dp"105 android:gravity="center_vertical"106 android:text="个性化标签" />107 <TextView 108 android:id="@+id/user_tag_personnal_text"109 android:layout_width="wrap_content"110 android:layout_height="30dp"111 android:layout_below="@+id/line2"112 android:layout_marginTop="8dp"113 android:layout_toRightOf="@+id/user_tag_personnal"114 android:textSize="16sp"115 android:gravity="center_vertical"116 android:hint="未填写"/>117 <ImageView 118 android:id="@+id/line3"119 android:layout_below="@+id/user_tag_personnal"120 style="@style/left_drawer_item_line" />121 122 <TextView123 android:id="@+id/user_sex_personnal"124 android:layout_width="120dp"125 android:layout_height="30dp"126 android:layout_below="@+id/line3"127 android:textSize="16sp"128 android:layout_marginTop="8dp"129 android:layout_marginBottom="8dp"130 android:gravity="center_vertical"131 android:text="性别" />132 <TextView 133 android:id="@+id/user_sex_personnal_text"134 android:layout_width="wrap_content"135 android:layout_height="30dp"136 android:layout_below="@+id/line3"137 android:layout_marginTop="8dp"138 android:layout_toRightOf="@+id/user_sex_personnal"139 android:textSize="16sp"140 android:gravity="center_vertical"141 android:hint="未选择"/>142 <ImageView 143 android:id="@+id/line4"144 android:layout_below="@+id/user_sex_personnal"145 style="@style/left_drawer_item_line" />146 147 <TextView148 android:id="@+id/user_area_personnal"149 android:layout_width="120dp"150 android:layout_height="30dp"151 android:layout_below="@+id/line4"152 android:textSize="16sp"153 android:layout_marginTop="8dp"154 android:layout_marginBottom="8dp"155 android:gravity="center_vertical"156 android:text="地区" />157 <TextView 158 android:id="@+id/user_area_personnal_text"159 android:layout_width="wrap_content"160 android:layout_height="30dp"161 android:layout_below="@+id/line4"162 android:layout_marginTop="8dp"163 android:layout_toRightOf="@+id/user_area_personnal"164 android:textSize="16sp"165 android:gravity="center_vertical"166 android:hint="请选择所在地区"/>167 <ImageView 168 android:id="@+id/line5"169 android:layout_below="@+id/user_area_personnal"170 style="@style/left_drawer_item_line" />171 </RelativeLayout>172 </RelativeLayout>
完整代码供大家参考,希望有用,中间有用到方形图片转换成圆形,方法在我的另一篇博文里
头像图片上传到sd及服务器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。