当前位置:  编程技术>移动开发
本页文章导读:
    ▪从相本或者相机获得uri转为bitmap        从相册或者相机获得uri转为bitmap package com.amani.main; import java.io.ByteArrayOutputStream; import java.io.InputStream; import android.app.Activity; import android.app.AlertDialog; import android.content.ContentResolver; import androi.........
    ▪ 动态增多删除控件,并记住里面的内容        动态增加删除控件,并记住里面的内容     1.用来保存对象   private List<View> listOfPhoneSubView;//存放子View对象 private List<Button> listOfPhoneButton;//左边的按钮,用来选择类型,文本的获.........
    ▪ andriod格局常用控件       andriod布局常用控件   java代码中通过btn1关联次控件 android:id="@+id/btn1"   控件宽度 android:layout_width="80px"    //"80dip"或"80dp" android:layout_width =“wrap_content” android:layout_width =“match_parent”    控.........

[1]从相本或者相机获得uri转为bitmap
    来源: 互联网  发布时间: 2014-02-18
从相册或者相机获得uri转为bitmap
package com.amani.main;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;

public class chooser extends Activity {

        private ImageView imageView;
        private OnClickListener imgViewListener;
        Bitmap myBitmap;
        private byte[] mContent;
      
        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        imageView = (ImageView) findViewById(R.id.ivPic);
       
        imgViewListener = new OnClickListener() {
                        public void onClick(View v) {
                                final CharSequence[] items = { "相册", "拍照" };
                                AlertDialog dlg = new AlertDialog.Builder(chooser.this).setTitle("选择图片").setItems(items,
                                new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,int item) {
                                        //这里item是根据选择的方式,        在items数组里面定义了两种方式,拍照的下标为1所以就调用拍照方法      
                                        if(item==1){
                                                                Intent getImageByCamera= new Intent("android.media.action.IMAGE_CAPTURE");  
                                                                startActivityForResult(getImageByCamera, 1);  
                                                        }else{
                                                                Intent getImage = new Intent(Intent.ACTION_GET_CONTENT);
                                                        getImage.addCategory(Intent.CATEGORY_OPENABLE);
                                                        getImage.setType("image/jpeg");
                                                        startActivityForResult(getImage, 0);
                                                        }
                                                }
                                        }).create();
                                dlg.show();
                        }
                };
                //给imageView控件绑定点点击监听器
                imageView.setOnClickListener(imgViewListener);
              
    }
      
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       
        ContentResolver resolver = getContentResolver();
        /**
         * 因为两种方式都用到了startActivityForResult方法,这个方法执行完后都会执行onActivityResult方法,
         * 所以为了区别到底选择了那个方式获取图片要进行判断,这里的requestCode跟startActivityForResult里面第二个参数对应
         */
        if (requestCode == 0) {
            try {
                //获得图片的uri
                Uri originalUri = data.getData();
                //将图片内容解析成字节数组
                mContent=readStream(resolver.openInputStream(Uri.parse(originalUri.toString())));
                //将字节数组转换为ImageView可调用的Bitmap对象
                myBitmap = getPicFromBytes(mContent, null);
                ////把得到的图片绑定在控件上显示
                imageView.setImageBitmap(myBitmap);
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }

        }else if(requestCode ==1){
                try {
                        super.onActivityResult(requestCode, resultCode, data);
                            Bundle extras = data.getExtras();
                            myBitmap = (Bitmap) extras.get("data");
                            ByteArrayOutputStream baos = new ByteArrayOutputStream();    
                            myBitmap.compress(Bitmap.CompressFormat.JPEG , 100, baos);    
                                mContent=baos.toByteArray();
                        } catch (Exception e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }
                        //把得到的图片绑定在控件上显示
                        imageView.setImageBitmap(myBitmap);
        }

    }

    public static Bitmap getPicFromBytes(byte[] bytes, BitmapFactory.Options opts) {
        if (bytes != null)
            if (opts != null)
                return BitmapFactory.decodeByteArray(bytes, 0, bytes.length,opts);
            else
                return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
        return null;
    }
  
    public static byte[] readStream(InputStream inStream) throws Exception {
        byte[] buffer = new byte[1024];
        int len = -1;
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        while ((len = inStream.read(buffer)) != -1) {
                 outStream.write(buffer, 0, len);
        }
        byte[] data = outStream.toByteArray();
        outStream.close();
        inStream.close();
        return data;

   }
}

    
[2] 动态增多删除控件,并记住里面的内容
    来源: 互联网  发布时间: 2014-02-18
动态增加删除控件,并记住里面的内容

 

 

1.用来保存对象

 

	private List<View> listOfPhoneSubView;//存放子View对象
	
	private List<Button> listOfPhoneButton;//左边的按钮,用来选择类型,文本的获取也是通过这里
	
	private List<EditText> listOfPhoneEditText;//右边的文本框,用来获取电话号码
	
	private List<String> listOfPhoneString;//用来保存左边按钮被点击的时候需要传递到别的Activity并显示的字符
	
	private List<Object> listOfPhoneTag;//用来标记对象


	private static List<HashMap<String, String>> listOfResolvedPhone;//存放从系统中解析出来的电话信息


        private int tagFlag = 0;

 

2.初始化

private void initList()//初始化ArrayList
{
		
	listOfPhoneSubView = new ArrayList<View>();
		
	listOfPhoneButton = new ArrayList<Button>();
		
	listOfPhoneEditText = new ArrayList<EditText>();
		
	listOfPhoneString = new ArrayList<String>();
				
	listOfPhoneTag = new ArrayList<Object>();
}

	private final String string1 = "住宅";//这个不要这样做,可以去读取系统的
	private final String string2 = "手机";
	private final String string3 = "单位";
	private final String string4 = "单位传真";
	private final String string5 = "住宅传真";
	private final String string6 = "寻呼机";
	private final String string7 = "其他";
	private final String string8 = "回拨号码";
	private final String string9 = "车载电话";
	private final String string10 = "公司总机";
	private final String string11 = "ISDN";
	private final String string12 = "总机";
	private final String string13 = "其他传真";
	private final String string14 = "无线装置";
	private final String string15 = "电报";
	private final String string16 = "TTY TDD";
	private final String string17 = "单位手机";
	private final String string18 = "单位寻呼机";
	private final String string19 = "助理";
	private final String string20 = "彩信";
	private final String string21 = "自定义";


public void initStringListOfNumber()//初始化listOfPhoneString
	{
		listOfPhoneString.add(string1);
		listOfPhoneString.add(string2);
		listOfPhoneString.add(string3);
		listOfPhoneString.add(string4);
		listOfPhoneString.add(string5);
		listOfPhoneString.add(string6);
		listOfPhoneString.add(string7);
		listOfPhoneString.add(string8);
		listOfPhoneString.add(string9);
		listOfPhoneString.add(string10);
		listOfPhoneString.add(string11);
		listOfPhoneString.add(string12);
		listOfPhoneString.add(string13);
		listOfPhoneString.add(string14);
		listOfPhoneString.add(string15);
		listOfPhoneString.add(string16);
		listOfPhoneString.add(string17);
		listOfPhoneString.add(string18);
		listOfPhoneString.add(string19);
		listOfPhoneString.add(string20);
		listOfPhoneString.add(string21);
	}


 

3.开启线程到系统中获取数据

Runnable r = new Runnable()
{
  	
	//处理数据
	public void run()
	{
		listOfResolvedPhone = QueryLinkmanInfoByRawContactId.queryPhoneInfo(EditLinkman.this, rawContactId);
			
                Message msg = new Message();
	        myHandler.sendMessage(msg);//得到电话信息以后通知更新界面
	}
};

  在queryPhoneInfo()中,我们调用并查询了系统的信息,并对系统中的数据进行匹配处理,最终返回回来得到listOfResolvedPhone会是List<HashMap<String, String>>保存的用户的信息,比如:PHONE_TYPE_ID:1

PHONE_TYPE:住宅 PHONE_NUMBER:13023895363

 

4.更新界面

private Handler myHandler = new Handler()
{
		
	@Override
	public void handleMessage(Message msg)
	{

          	showPhone();//根据listOfResolvedPhone中的值初始化显示电话信息的LinearLayout->llPhone
        }
};


public void showPhone()
{
		//让顶部啊按钮监听事件
	btnPhone.setOnClickListener(new OnClickListener() {
			
		public void onClick(View v) {
				// 增加一个子View
				System.out.println("增加一个Phone子View");
				addSubViewOfPhone();
			}
		});
		
		if(listOfResolvedPhone.isEmpty())
		{
			System.out.println("PhoneList is empty");
			//do nothing...
		}
		else
		{
			System.out.println("PhoneList is NO empty");
			int sizeOfResolvedPhone = listOfResolvedPhone.size();
			for(int i = 0; i < sizeOfResolvedPhone; i++)
			{
				
//				String phoneTypeId = listOfResolvedPhone.get(i).get(LD_PHONE_ID);//这样做虽然比较好,但是逻辑太乱了,暂时不考虑
				String phoneType = listOfResolvedPhone.get(i).get(LD_PHONE_TYPE);
				String phoneNumber = listOfResolvedPhone.get(i).get(LD_PHONE);
				
				LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
				View subView = inflater.inflate(R.layout.sub_view_of_add_linkman, null);
								
				Button btnChooseType = (Button)subView.findViewById(R.id.svoal_btn_choose_type);
				EditText rlEditText = (EditText)subView.findViewById(R.id.svoal_et_input);
				rlEditText.setInputType(InputType.TYPE_CLASS_NUMBER);//设置输入类型和键盘为数字
				RelativeLayout rlDel = (RelativeLayout)subView.findViewById(R.id.svoal_rl_del);
				System.out.println("phoneType:" + phoneType);
				System.out.println("phoneNumber:" + phoneNumber);
				btnChooseType.setText(phoneType);
				rlEditText.setText(phoneNumber);
				
				btnChooseType.setOnClickListener(new BtnChooseNumberTypeClickedListener());
				
				rlDel.setOnClickListener(new RlNumberDelClickedListener());
				
				subView.setTag(tagFlag);
			    btnChooseType.setTag(tagFlag);
			    rlEditText.setTag(tagFlag);
			    rlDel.setTag(tagFlag);
			    
			    listOfPhoneSubView.add(subView);
			    listOfPhoneButton.add(btnChooseType);
			    listOfPhoneEditText.add(rlEditText);
				
			    listOfPhoneTag.add(rlDel.getTag());
				
			    tagFlag ++;
				
			    llPhone.addView(subView, LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);//增加一个View
			}
		}
		
	}
 

tag的作用是什么呢?

为什么要给每一个控件都加上一个Tag呢?

有两个方面:

1.当用户删除某一个元素的时候,不一定是从哪里删除,有可能是从列表中间删除,所以当用户点击子View上面的删除按钮的时候,需要通过v.getTag()获得要被删除的是哪个元素。通过这个Tag就可以将他们都删除了。

2.当点击选择电话类型的时候,同样,你需要把用户选择的哪个类型的字符串返回回来,你如何锁定是哪个Button需要被更改呢?同样也是通过Tag,我们在打开选择类型的Activity的时候,不仅将让用户进行选择的List传递过去,也将Tag传递过去,传递过去以后什么都不做,直接返回,返回回来以后就可以找到是哪个Button上面的类型名需要更改了。

 

 

public void addSubViewOfPhone()
	{
		
		LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
		
	    View subView = inflater.inflate(R.layout.sub_view_of_add_linkman, null); 
	    
	    Button btnChooseType = (Button)subView.findViewById(R.id.svoal_btn_choose_type);//选择号码类型
	    
	    EditText rlEditText = (EditText)subView.findViewById(R.id.svoal_et_input);//接收号码的输入
	    
	    rlEditText.setHint("电话");
	    
	    rlEditText.setInputType(InputType.TYPE_CLASS_NUMBER);//设置输入类型和键盘为数字
	    
	    RelativeLayout rlDel = (RelativeLayout)subView.findViewById(R.id.svoal_rl_del);//右边的删除按钮
	    
	    btnChooseType.setOnClickListener(new BtnChoosePhoneTypeClickedListener());
	    
	    rlDel.setOnClickListener(new RlNumberDelClickedListener());
	    
	    //在创建的时候判断下现在是第几个了,设置btnChooseType上默认显示的内容
	    switch(listOfPhoneTag.size())
	    {
	    case 0:
	    	btnChooseType.setText(string1);
	    	break;
	    case 1:
	    	btnChooseType.setText(string2);
	    	break;
	    case 2:
	    	btnChooseType.setText(string3);
	    	break;
	    case 3:
	    	btnChooseType.setText(string4);
	    	break;
	    case 4:
	    	btnChooseType.setText(string5);
	    	break;
	    case 5:
	    	btnChooseType.setText(string6);
	    	break;
	    case 6:
	    	btnChooseType.setText(string7);
	    	break;
	    case 7:
	    	btnChooseType.setText(string8);	
	    	break;
	    default:
	    	btnChooseType.setText(string8);//其他的暂时不考虑啦。就取前8吧
	    	
	    }
	    
	    
	    subView.setTag(tagFlagOfPhone);
	    btnChooseType.setTag(tagFlagOfPhone);
	    rlEditText.setTag(tagFlagOfPhone);
	    rlDel.setTag(tagFlagOfPhone);
	    listOfPhoneSubView.add(subView);
		
		listOfPhoneButton.add(btnChooseType);
		listOfPhoneEditText.add(rlEditText);
		
		listOfPhoneTag.add(rlDel.getTag());
		
		tagFlagOfPhone ++;
		
		llPhone.addView(subView, LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
	}
	
	
	/**
	 * 删除一个电话subView
	 * */
	class RlNumberDelClickedListener implements OnClickListener
	{
		
		public void onClick(View v)
		{
			System.out.println("删除:");
			
			//根据tag找到它在list中的位置,删除中所有list中对应的
			int id = -1;
			int sizeOfTag = listOfPhoneTag.size();
			for(int i = 0; i < sizeOfTag; i++)
			{
				
				if((Integer)listOfPhoneTag.get(i) == (Integer)(v.getTag()))
				{
					System.out.println("找到并删除了索引:" + i);
					id = i;
					llPhone.removeView(listOfPhoneSubView.get(id));//越界了
					listOfPhoneSubView.remove(id);
					listOfPhoneButton.remove(id);
					listOfPhoneEditText.remove(id);
					listOfPhoneTag.remove(id);//记得Remove掉自己啊!!!
					break;
				}
				else
				{
					System.out.println("不可能找不到的!");
				}
			}
			
		}
	}
	
	/**
	 * 选择号码类型的按钮被点击的时候
	 * */
	private int tagFlagOfPhone = 0;
	class BtnChoosePhoneTypeClickedListener implements OnClickListener
	{
		public void onClick(View v)
		{

			System.out.println("BtnChooseTypeClickedListener:");
			
			System.out.println("v.getTag():" + (Integer)v.getTag());
			
			Intent intent = new Intent();  
            
			Bundle bundle = new Bundle();
			
			bundle.putInt(TAG, (Integer)v.getTag());//这个传递到DialogActivity再从那边传递过来,就可以知道是谁传递的了
			
			bundle.putString(TITLE, "请选择号码类型");
			
			bundle.putString(FLAG, NUMBER);
			
			if(listOfPhoneString.isEmpty())
			{
				initStringListOfNumber();
				bundle.putStringArrayList(STRING_LIST, (ArrayList<String>)listOfPhoneString);
			}
			else
			{
				bundle.putStringArrayList(STRING_LIST, (ArrayList<String>)listOfPhoneString);
			}
			
			intent.putExtras(bundle);
			
            intent.setClass(EditLinkman.this, DialogActivity.class);  
              
            startActivityForResult(intent, REQUEST_CODE);
			
		}
	}
	
	/**
	 * 将TAG的值传递进来,到TAG数组中进行值匹配
	 * 将匹配到的索引返回
	 * */
	public int getIndexOfPhoneTag(int TAG)
	{
		int index = -1;
		int sizeOfTag = listOfPhoneTag.size();
		for(int i = 0; i < sizeOfTag; i++)
		{
			
			if((Integer)listOfPhoneTag.get(i) == TAG)
			{
				index = i;
			}
		}
		
		return index;
	}
	
 

 

 

@Override  
    public void onActivityResult(int requestCode, int resultCode, Intent data)  
    {  
        super.onActivityResult(requestCode, resultCode, data);    
        System.out.println("EditLinkman--onActivityResult");  
         if(requestCode == REQUEST_CODE)  
         {    
               if(resultCode == RESULT_OK)  
               {    
            	   
            	System.out.println("EditLinkman--RESULT_OK");
            	   
                Bundle extras = data.getExtras();    
                if (extras != null)  
                {    
                	System.out.println("extras != null:FLAG:" + extras.getString(FLAG).toString());
                	
                    if(extras.getInt(TAG) == -1)
                    {
                    	System.out.println("收到传递回来的空TAG" + extras.getString("TAG"));
                    }
                    else if(extras.getString(FLAG).equals(NUMBER))
                    {
                    	System.out.println("收到传递回来的值" + extras.getInt(TAG));
                    	
                    	listOfPhoneButton.get(getIndexOfPhoneTag(extras.getInt(TAG))).setText(extras.getString(VALUE));
                    }
                }
               }
         }
    }
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


    
[3] andriod格局常用控件
    来源: 互联网  发布时间: 2014-02-18
andriod布局常用控件

 

java代码中通过btn1关联次控件

android:id="@+id/btn1"

 

控件宽度

android:layout_width="80px"    //"80dip"或"80dp"

android:layout_width =“wrap_content”

android:layout_width =“match_parent” 

 

控件高度

android:layout_height="80px"    //"80dip"或"80dp"

android:layout_height =“wrap_content”

android:layout_height =“match_parent”

 

控件排布

android:orientation="horizontal”

android:orientation="vertical“

 

控件间距

android:layout_marginLeft="5dip"      //距离左边

android:layout_marginRight="5dip"      //距离右边

android:layout_marginTop="5dip"      //距离上面

android:layout_marginRight="5dip"      //距离下面

 

控件显示位置

android:gravity="center"    //left,right, top, bottom

android:gravity="center_horizontal"

 

android:layout_gravity是本元素对父元素的重力方向。

android:layout_gravity属性则设置控件本身相对于父控件的显示位置

android:gravity是本元素所有子元素的重力方向。

 

android:layout_gravity="center_vertical"

android:layout_gravity="left"

android:layout_gravity="left|bottom"

 

 

TextView中文本字体

android:text="@String/text1"    //在string.xml中定义text1的值

android:textSize="20sp"

android:textColor=”#ff123456”

android:text    //普通(normal), 斜体(italic),粗斜体(bold_italic)

 

定义控件是否可见

android:visibility=”visible”     //可见

android:visibility=”invisible”  //不可见,但是在布局中占用的位置还在

android:visibility=”gone”   //不可见,完全从布局中消失

 

定义背景图片

android:background="@drawable/img_bg"    //img_bg为drawable下的一张图片

 

seekbar控件背景图片及最大值

android:progressDrawable="@drawable/seekbar_img" 

android:thumb="@drawable/thumb"           

android:max = "60"


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
编程技术其它 iis7站长之家
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3