安卓Java知识方法整理精选总结

主线程handler机制

public Handler handler1=new Handler(){
		@Override
		public void handleMessage(Message msg)
		{
			// TODO: Implement this method
			super.handleMessage(msg);
			switch(msg.what){
				case 0:{}break;
				case 1:{}break;
			}
		}
	};


子线程handler机制:

class LooperThread extends Thread {
        public Handler handler;
        @Override
        public void run() {
            super.run();
            Looper.prepare();
            handler = new Handler() {
                @Override
                public void handleMessage(Message msg) {
                    super.handleMessage(msg);
					switch(msg.what){
						case 0:{
Thread.sleep(2000);//线程睡眠2秒


}break;
						case 1:{}break;
}

                }
				
				}; 
Looper.loop();
				//单线程执行一次的代码写在此
				}
			 //重写run函数
 }

主线程向子线程通信方法:

LooperThread looperthread4=new LooperTheread();
Message msg1=Message.obtain();
				msg1.what=1;//传递int型特殊数字消息
msg1.arg1=4;//传递int型普通数字消息
msg1.arg2=5;
msg1.obj="abc";//传递string型普通字符串
				looperthread4.handler.sendMessage(msg1);

子线程向主线程通信方法:

Message msg1=new Message();
msg1.what=1;//传递int型特殊数字消息
msg1.arg1=4;//传递int型普通数字消息
msg1.arg2=5;
msg1.obj="abc";//传递string型普通字符串
						handler1.sendMessage(msg1);

创建子线程一般方法

Thread thread1=new Thread(new Runnable(){

				@Override
				public void run()
				{
Thread.sleep(2000);//线程睡眠2秒

					// TODO: Implement this method
				}
			});
thread1.start();//执行子线程代码

利用Bufferedwriter写入字符串到文件方法:

public void Writetxttofile(String strcontent, String filePath,
			String fileName) {
		// 生成文件夹之后,再生成文件,不然会出错
		makeFilePath(filePath, fileName);// 生成文件
		String strFilePath = filePath + fileName;
		// 每次写入时,都换行写
		String strContent = strcontent + "\r\n";
		try {
			File file = new File(strFilePath);
			if (!file.exists()) {
	
				file.getParentFile().mkdirs();
				file.createNewFile();
			}
			FileWriter ofis1=new FileWriter(file,true)
			BufferedWriter owriter1=new BufferedWriter(ofis1);
				owriter1.write(strContent);
			owriter1.close();
		} catch (Exception e) {
		}
	}

	/**
	 * 生成文件
	 */
	public void makeFilePath(String filePath, String fileName) {
		File file = null;
		makeRootDirectory(filePath);// 生成文件夹
		try {
			file = new File(filePath + fileName);
			if (!file.exists()) {
				file.createNewFile();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return;
	}

	/**
	 * 生成文件夹
	 */
	public static void makeRootDirectory(String filePath) {
		File file = null;
		try {
			file = new File(filePath);
			if (!file.exists()) {
				file.mkdir();
			}
		} catch (Exception e) {
		}
	}

利用Bufferedreader读取文本方法:

String result1="";
File f1=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Formoney/numberofsoftware.txt");
if(file.exists()){
							try
							{
								BufferedInputStream fis1= new BufferedInputStream(new FileInputStream(f1));
								try
								{
									BufferedReader reader1= new BufferedReader(new InputStreamReader(fis1, "utf-8"), 5 * 1024 * 1024);
									String line1= "";
									try
									{
										while ((line1 = reader1.readLine()) != null)
										{result1=line1;

										}
									}
									catch (IOException e)
									{}
									try
									{
										reader1.close();
										fis1.close();
										
									}
									catch (IOException e)
									{}
								}
								catch (UnsupportedEncodingException e)
								{}
								
							}
							catch (FileNotFoundException e)
							{}
}//承接if

添加带有编辑框的对话框方法:

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);//主活动子活动及服务均通用,在哪个活动中则用相应活动名称+.this
builder.setTitle(title);    //设置对话框标题
builder.setIcon(android.R.drawable.btn_star); 
	final EditText edit = new EditText(MainActivity.this);

		builder.setView(edit);
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {x=edit.getText().toString();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

}
});
builder.setNeutralButton("第三个按钮", new DialogInterface.OnClickListener(){

							@Override
							public void onClick(DialogInterface p1, int p2)
							{//方法
}
});
		builder.setCancelable(true);    //设置按钮是否可以按返回键取消,false则不可以取消
AlertDialog dialog = builder.create();  //创建对话框
dialog.setCanceledOnTouchOutside(true); //设置弹出框失去焦点是否隐藏,即点击屏蔽其它地方是否隐藏

//悬浮窗对话框需要增加的条件代码
//
dialog.show();

文件替换和删除方法:

try{
File rename1=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Formoney/replacedinfoffilter2.txt");
							File rename2=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Formoney/infoffilter2.txt");			rename1.renameTo(rename2);
							}catch(Exception e){}

//rename2.delete();//删除

设置按钮监听器事件:

//点击
			Button button1=findViewById(R.id.mainButton1);
		button1.setOnClickListener(new OnClickListener(){

				@Override
				public void onClick(View p1)
				{
					// TODO: Implement this method
				}
			});
//长按
		button1.setOnLongClickListener(new OnLongClickListener(){

				@Override
				public boolean onLongClick(View p1)
				{
					// TODO: Implement this method
					return false;
				}
			});

剪切板的方法:

(import android.content.*)
ClipboardManager clipboard1 = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
		clipboard1.setText("stringvalue");

adbshell命令类方法

public class RootShellCmd {

	private OutputStream os;
{}
	/**
	 * 执行shell指令
	 * 
	 * @param cmd
	 *            指令
	 */
	public final void exec(String cmd) {
		try {
			if (os == null) {
				os = Runtime.getRuntime().exec("su").getOutputStream();
			}
			os.write(cmd.getBytes());
			os.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 后台模拟全局按键
	 * 
	 * @param keyCode
	 *            键值
	 
	 */
	public final void simulateKey(int keyCode) {
		exec("input keyevent " + keyCode + "\n");
	}
	public final void tap1(int x,int y){
		exec("input tap " + x+" "+y+ "\n");
	}
	public final void sendmsg1(String s){
		
		exec("input text  '"+s+"' "+"\n");
		
	}
	public final void swipe1(int x1,int y1,int x2,int y2){
		
		exec("input swipe "+x1+" "+y1+" "+x2+" "+y2+"\n");
		
	}
	public final void swipe2(int x1,int y1,int x2,int y2,int time){
		
		exec("input swipe "+x1+" "+y1+" "+x2+" "+y2+" "+time+"\n");
		
	}
}


//在各种线程里定义一个类的对象方法:final RootShellCmd cmd1=new RootShellCmd();
//执行该对象所在类的某一个方法cmd1.exec("input keyevent 4"+"\n");

悬浮窗设置方法:

public class FxService extends Service 
{

//定义浮动窗口布局
    LinearLayout mFloatLayout;
    WindowManager.LayoutParams wmParams;
    //创建浮动窗口设置布局参数的对象
	WindowManager mWindowManager;
	
	Button mFloatView;
@Overri
	public void onCreate() 
	{
		// TODO Auto-generated method stub
		super.onCreate();
		createFloatView();


	
	}

	@Override
	public IBinder onBind(Intent intent)
	{
		// TODO Auto-generated method stub
		return null;
	}

	private void createFloatView()
	{
		wmParams = new WindowManager.LayoutParams();
		//获取的是WindowManagerImpl.CompatModeWrapper
		mWindowManager = (WindowManager)getApplication().getSystemService(getApplication().WINDOW_SERVICE);
		
		//设置window type
		wmParams.type = LayoutParams.TYPE_SYSTEM_ALERT; 
		//设置图片格式,效果为背景透明
        wmParams.format = PixelFormat.RGBA_8888; 
        //设置浮动窗口不可聚焦(实现操作除浮动窗口外的其他可见窗口的操作)
        wmParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE;      
        //调整悬浮窗显示的停靠位置为左侧置顶
        wmParams.gravity = Gravity.LEFT | Gravity.TOP;       
        // 以屏幕左上角为原点,设置x、y初始值,相对于gravity
        wmParams.x = 270;
        wmParams.y = 0;

        //设置悬浮窗口长宽数据  
        wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
       wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;

		 // 设置悬浮窗口长宽数据
        //wmParams.width = 100;
     //   wmParams.height = 100;
   
        LayoutInflater inflater = LayoutInflater.from(getApplication());
        //获取浮动窗口视图所在布局
        mFloatLayout = (LinearLayout) inflater.inflate(R.layout.FxService, null);
        //添加mFloatLayout
        mWindowManager.addView(mFloatLayout, wmParams);
        //浮动窗口按钮
        mFloatView = (Button)mFloatLayout.findViewById(R.id.FxServiceButton1);
        
        mFloatLayout.measure(View.MeasureSpec.makeMeasureSpec(0,
				View.MeasureSpec.UNSPECIFIED), View.MeasureSpec
				.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
        //设置监听浮动窗口的触摸移动
        mFloatView.setOnTouchListener(new OnTouchListener() 
        {
			
			@Override
			public boolean onTouch(View v, MotionEvent event) 
			{
				// TODO Auto-generated method stub
				//getRawX是触摸位置相对于屏幕的坐标,getX是相对于按钮的坐标
				wmParams.x = (int) event.getRawX() - mFloatView.getMeasuredWidth()/2;
			
				//减25为状态栏的高度
	            wmParams.y = (int) event.getRawY() - mFloatView.getMeasuredHeight()/2-80;
	   
	             //刷新
	            mWindowManager.updateViewLayout(mFloatLayout, wmParams);
				return false;  //此处必须返回false,否则OnClickListener获取不到监听
			}
		});	
        mFloatView.setOnLongClickListener(new OnLongClickListener(){

				@Override
				public boolean onLongClick(View p1)
				{
//方法

}
		});
	
mFloatView.setOnClickListener(new OnClickListener() 
        {
			
			@Override
			public void onClick(View v) 
			{
				// TODO Auto-generated method stub
				//Toast.makeText(FxService.this, "onClick", Toast.LENGTH_SHORT).show();
			}
		});
	}



	
	
	@Override
	public void onDestroy()
	{
		// TODO Auto-generated method stub
		super.onDestroy();
		if(mFloatLayout != null)
		{
			//移除悬浮窗口
			mWindowManager.removeView(mFloatLayout);
			System.exit(0);
			stopSelf();
		}
	}
	}//service类结尾

jsoup带cookies爬取静态网页源码方法

String url ="https://login.taobao.com/member/login.jhtml?spm=a21bo.2017.754894437.1.5af911d9bLLw4T&f=top&redirectURL=https%3A%2F%2Fwww.taobao.com%2F";
			Connection.Response res=Jsoup.connect(url).data("TPL_username","18600411573","TPL_password","sjb152535").method(Method.POST).execute();
						Document doc=res.parse();
						Map s=res.cookies();
						for(int page=0;page<44*pages;page=page+44){
			Document doc1=Jsoup.connect("https://s.taobao.com/search?q="+name+"s="+page).cookies(s).get();
						Elements element1=doc1.select("script");
int i=0;
String data1=null;
data1=element1.get(i).data();

用jsoup处理本地网页的方法

String path1=Environment.getExternalStorageDirectory().getAbsolutePath()+"/windows/BstSharedFolder/Formoney/xianyu/goodsinformation"+obj1+index1+"x"+index0+".html";
						 File file1=new File(path1);
		try
		{
			Document doc2=Jsoup.parse(file1, "gbk");
		Elements ele1=doc2.select(".item-list-wrap");
		
		for(int i=1;i<=ele1.select("a").size();i++){
		String id1=ele1.select("a.item-wrap:nth-child("+i+")").attr("href").toString();
		String title=ele1.select("a.item-wrap:nth-child("+i+") > div:nth-child(2) > p:nth-child(1)").text();
	}catch(IOException e){}

取得系统时间方法:

Time t=new Time(); // or Time t=new Time("GMT+8"); 加上Time Zone资料。
t.setToNow(); // 取得系统时间。
int year = t.year;
int month = t.month+1;
int day = t.monthDay;
int hour = t.hour; // 0-23
int minute = t.minute;
int second = t.second;

保留两位小数方法

DecimalFormat df=new DecimalFormat("0.00");
String newstr=df.format(oldstr-doublenum-longnum);

int,float,double与string之间的转换

int int1=0;
			 double double1=7;
			float float1=4;
			 String stringvalue="6";
  
			 int1=Integer.valueOf(stringvalue).intValue();//可不加.intValue()
			 stringvalue=String.valueOf(int1).toString();//可不加.toString()
			float1=Float.parseFloat(stringvalue);
 stringvalue=String.valueOf(float1);
			 			 stringvalue=String.valueOf(double1);
			 double1=Double.parseDouble(stringvalue);

通过网址直接下载并储存图片方法以及图片压缩方法:

try {
							String urlPath =getimgurl();
							URL url = new URL(urlPath);
							HttpURLConnection conn = (HttpURLConnection) url.openConnection();
							conn.setConnectTimeout(6*1000);  // 注意要设置超时,设置时间不要超过10秒,避免被android系统回收
							if (conn.getResponseCode() != 200) throw new RuntimeException("请求url失败");
							InputStream inSream = conn.getInputStream();
							//把图片保存到项目的根目录
							readAsFile(inSream, new File(Environment.getExternalStorageDirectory()+"/DCIM/Camera/"+"IMG_20190109_173606.jpg"));
				//Toast.makeText(getApplicationContext(),"ok",Toast.LENGTH_SHORT).show();
				Thread.sleep(5000);
					File file1=new File(Environment.getExternalStorageDirectory()+"/DCIM/Camera/"+"IMG_20190109_173606.jpg");
									compressBitmap(Environment.getExternalStorageDirectory()+"/DCIM/Camera/"+"IMG_20190109_173606.jpg",file1);
						} catch (Exception e) {
							e.printStackTrace();
						}
public void compressBitmap(String filePath, File file){
    // 数值越高,图片像素越低
    int inSampleSize = 4;
    BitmapFactory.Options options = new BitmapFactory.Options();
    //采样率
    options.inSampleSize = inSampleSize;
    Bitmap bitmap = BitmapFactory.decodeFile(filePath, options);  

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    // 把压缩后的数据存放到baos中
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100 ,baos);
    try {  
        FileOutputStream fos = new FileOutputStream(file);  
        fos.write(baos.toByteArray());  
        fos.flush();  
        fos.close();  
    } catch (Exception e) {  
        e.printStackTrace();  
    } 
}

定时执行任务方法:

Timer timer1=new Timer();
					TimerTask task1=new TimerTask(){

						@Override
						public void run()
						{
							cmd2.tap1(267,916);
							// TODO: Implement this method
						}
					};

timer1.schedule(task1,10000);//定时执行任务

给listview(以及spinner)添加数据源及arraylist和string数组方法

public ArrayList<String> listofkeyinf=new ArrayList<String>();
listofkeyinf.add(0,''stringvalue'');
listofkeyinf.add("stringvalue");
listofkeyinf.get(0);
listofkeyinf.clear();//清除arraylist里的所有数据
listofkeyinf.size()//arraylist的数据数目
listofkeyinf.indexOf("stringvalue");
			listofkeyinf.remove(0);
			listofkeyinf.contains("stringvalue");//布尔值
			listofkeyinf.lastIndexOf("stringvalue");
			
ListView listview1=findViewById(R.id.mainListView1);
//arraylist转化为数组
				String[] listofkeyinf1=listofkeyinf.toArray(new String[listofkeyinf.size()]);
				ArrayAdapter<String> arrayadapter1=new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,listofkeyinf1);
				listview1.setAdapter(arrayadapter1);





listofkeyinf1.length;//数组的数据数目(得到int型数字)
listofkeyinf1[0];//得到数组下标为0的数据(具体数据类型由数组定义决定)

//spinner方法
final Spinner spinner2=findViewById(R.id.CusasiSpinner1);
Spinner2.setVisibility(0(正常),4(不可见但占用位置),8(不可见且不占用位置));
final ArrayAdapter<String> adapter2=new ArrayAdapter<String>(CursasiActivity.this,android.R.layout.simple_list_item_1,String[]);
     Spinner2.setAdapter(adapter2);
	 
Spinner2.setOnItemSelectedListener(new OnItemSelectedListener(){

					@Override
					public void onItemSelected(AdapterView<?> p1, View p2, int which, long p4)
					{


switch(childPosition){
						case 0:{}break;
case 1{}break;
}
						// TODO: Implement this method
					}

					@Override
					public void onNothingSelected(AdapterView<?> p1)
					{
						// TODO: Implement this method
					}
				});

消息提示方法

Toast.makeText(MainActivity.this,"已存入数据库",Toast.LENGTH_SHORT).show();

expanderview方法:

private ExpandableListView expandableListView;
private String[] groups = {"         根据日期查询销售情况","         根据总商品列表查询销售情况"};
    //注意,字符数组不要写成{{"A1,A2,A3,A4"}, {"B1,B2,B3,B4,B5"}, {"C1,C2,C3,C4"}}*/
        public String[][] childs={{"请选择年份:","---","---"},{"当前商品销售情况","历史商品销售情况"}};
	@Override
    public void onCreate(Bundle savedInstanceState)
	{
        super.onCreate(savedInstanceState);
        
        // Set sub.xml as user interface layout
        setContentView(R.layout.Cusasi);
expandableListView = (ExpandableListView) findViewById(R.id.CusasiExpandableListView1);
        expandableListView.setAdapter(new MyExpandableListView());
		expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener(){

				@Override
				public boolean onChildClick(ExpandableListView p1, View p2, int p3, int p4, long p5)
				{
					if(p3==1){
						switch(p4){
							case 0:{}break;
case 1:{}break;
						}
						
						
						
					}
					
					
					// TODO: Implement this method
					return false;
				}
			});
		}

class MyExpandableListView extends BaseExpandableListAdapter {

        //返回一级列表的个数
        @Override
        public int getGroupCount() {
            return groups.length;
        }

        //返回每个二级列表的个数
        @Override
        public int getChildrenCount(int groupPosition) { //参数groupPosition表示第几个一级列表
           //Log.d("smyhvae", "-->" + groupPosition);
            return childs[groupPosition].length;
        }

        //返回一级列表的单个item(返回的是对象)
        @Override
        public Object getGroup(int groupPosition) {
            return groups[groupPosition];
        }

        //返回二级列表中的单个item(返回的是对象)
        @Override
        public Object getChild(int groupPosition, int childPosition) {
            return childs[groupPosition][childPosition];  //不要误写成groups[groupPosition][childPosition]
        }

        @Override
        public long getGroupId(int groupPosition) {
            return groupPosition;
        }

        @Override
        public long getChildId(int groupPosition, int childPosition) {
            return childPosition;
        }

        //每个item的id是否是固定?一般为true
        @Override
        public boolean hasStableIds() {
            return true;
        }

        //【重要】填充一级列表
        @Override
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {

            if (convertView == null) {
                convertView = getLayoutInflater().inflate(R.layout.item_group, null);
            }
            TextView tv_group = (TextView) convertView.findViewById(R.id.tv_group);
            tv_group.setText(groups[groupPosition]);
            return convertView;
        }

        //【重要】填充二级列表
        @Override
        public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {

            if (convertView == null) {
                convertView = getLayoutInflater().inflate(R.layout.item_child2, null);
            }
			
		
			final Spinner Spinner2=convertView.findViewById(R.id.item_child2Spinner2);
			
			
			Spinner2.setVisibility(groupPosition*8);
			
			//String[] s={"1","2","3"};
		
		//String[][][] strtime3={{{}},{{}},{{}}};
		//String[][] years2=years.toArray(new String[quantityofsoftware][]);
		String[][][] strtime3=listoftime3.toArray(new String[3][][]);
		//String[][][] s={{{"---","2019"},{"---","2019"}},{{"---","1","2"},{"---","3","4","5"}},{{"---","22","23"},{"---","27"}}};
			
		final ArrayAdapter<String> adapter2=new ArrayAdapter<String>(CursasiActivity.this,android.R.layout.simple_list_item_1,strtime3[childPosition][getchoice()]);
     Spinner2.setAdapter(adapter2);
	 
Spinner2.setOnItemSelectedListener(new OnItemSelectedListener(){

					@Override
					public void onItemSelected(AdapterView<?> p1, View p2, int which, long p4)
					{switch(childPosition){
						case 0:{
							}break;
						case 1:{
							}break;
						
					}
						// TODO: Implement this method
					}

					@Override
					public void onNothingSelected(AdapterView<?> p1)
					{
						// TODO: Implement this method
					}
				});
			
            //ImageView iv_child = (ImageView) convertView.findViewById(R.id.iv_child);
            TextView tv_child2= (TextView) convertView.findViewById(R.id.item_child2TextView2);

            //iv_child.setImageResource(resId);
            tv_child2.setText(childs[groupPosition][childPosition]);

            return convertView;
        }

        //二级列表中的item是否能够被选中?可以改为true
        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            return true;
        }
    }

		
}

安卓客户端与服务端的交互方法:

final Thread thr1=new Thread(new Runnable(){

				@Override
				public void run()
				{try{
					String username1=tv1.getText().toString();
				String password1=tv2.getText().toString();
				
				String connectURL="http://191927353580.xhcloud.design/";
				HttpPost httpRequest = new HttpPost(connectURL);
				List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("user1",username1));
params.add(new BasicNameValuePair("pwd1",password1));
try {
			HttpEntity httpEntity = new UrlEncodedFormEntity(params,"utf-8");
			httpRequest.setEntity(httpEntity);
			
			HttpClient httpClient = new DefaultHttpClient();
			HttpResponse httpResponse = httpClient.execute(httpRequest);
			
			if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
				String result = EntityUtils.toString(httpResponse.getEntity());
				//tv.setText(result);
		Looper.prepare();
		Toast.makeText(MainActivity.this,result,Toast.LENGTH_SHORT).show();
		Looper.loop();
			}else{Looper.prepare();
				Toast.makeText(MainActivity.this,"error",Toast.LENGTH_SHORT).show();
				Looper.loop();
			//	tv.setText("request error");
			}
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
 
	
	}catch(Exception e){
		
		
	}
			
	
	
	// TODO: Implement this method
				}
			});

glide加载图片方法(需要glide.jar包)

Glide.with(this)
     .load(url)
     .placeholder(R.drawable.loading)
     .error(R.drawable.error)
     .diskCacheStrategy(DiskCacheStrategy.NONE)
     .override(100, 100)
     .into(imageView);

SharedPreferences储存数据方法

public static void saveUserInfo(Context context, String user1,String money1,String status) {
        /**
         * SharedPreferences将用户的数据存储到该包下的shared_prefs/config.xml文件中,
         * 并且设置该文件的读取方式为私有,即只有该软件自身可以访问该文件
         */
        SharedPreferences sPreferences = context.getSharedPreferences("config", context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sPreferences.edit();
        //当然sharepreference会对一些特殊的字符进行转义,使得读取的时候更加准确
        editor.putString("username1",user1);
		editor.putString("money1", money1);
		editor.putString("status", status);
        //切记最后要使用commit方法将数据写入文件
        editor.commit();}
//在主活动中调用方法
SharedPreferences sPreferences = getSharedPreferences("config", MODE_PRIVATE);
String money1=sPreferences.getString("money1","0.00");
//精简代码如下
public static void savestringinf(Context context,String name,String stringvalue){
		SharedPreferences sPreferences = context.getSharedPreferences("config", context.MODE_PRIVATE);
		SharedPreferences.Editor editor=sPreferences.edit();
		editor.putString(name,stringvalue);//也可以editor.putInt(name,integer);
		editor.commit();}

附录1 :input keyevent值所对应的字符

0 --> “KEYCODE_UNKNOWN”
1 --> “KEYCODE_MENU”
2 --> “KEYCODE_SOFT_RIGHT”
3 --> “KEYCODE_HOME”
4 --> “KEYCODE_BACK”
5 --> “KEYCODE_CALL”
6 --> “KEYCODE_ENDCALL”
7 --> “KEYCODE_0”
8 --> “KEYCODE_1”
9 --> “KEYCODE_2”
10 --> “KEYCODE_3”
11 --> “KEYCODE_4”
12 --> “KEYCODE_5”
13 --> “KEYCODE_6”
14 --> “KEYCODE_7”
15 --> “KEYCODE_8”
16 --> “KEYCODE_9”
17 --> “KEYCODE_STAR”
18 --> “KEYCODE_POUND”
19 --> “KEYCODE_DPAD_UP”
20 --> “KEYCODE_DPAD_DOWN”
21 --> “KEYCODE_DPAD_LEFT”
22 --> “KEYCODE_DPAD_RIGHT”
23 --> “KEYCODE_DPAD_CENTER”
24 --> “KEYCODE_VOLUME_UP”
25 --> “KEYCODE_VOLUME_DOWN”
26 --> “KEYCODE_POWER”
27 --> “KEYCODE_CAMERA”
28 --> “KEYCODE_CLEAR”
29 --> “KEYCODE_A”
30 --> “KEYCODE_B”
31 --> “KEYCODE_C”
32 --> “KEYCODE_D”
33 --> “KEYCODE_E”
34 --> “KEYCODE_F”
35 --> “KEYCODE_G”
36 --> “KEYCODE_H”
37 --> “KEYCODE_I”
38 --> “KEYCODE_J”
39 --> “KEYCODE_K”
40 --> “KEYCODE_L”
41 --> “KEYCODE_M”
42 --> “KEYCODE_N”
43 --> “KEYCODE_O”
44 --> “KEYCODE_P”
45 --> “KEYCODE_Q”
46 --> “KEYCODE_R”
47 --> “KEYCODE_S”
48 --> “KEYCODE_T”
49 --> “KEYCODE_U”
50 --> “KEYCODE_V”
51 --> “KEYCODE_W”
52 --> “KEYCODE_X”
53 --> “KEYCODE_Y”
54 --> “KEYCODE_Z”
55 --> “KEYCODE_COMMA”
56 --> “KEYCODE_PERIOD”
57 --> “KEYCODE_ALT_LEFT”
58 --> “KEYCODE_ALT_RIGHT”
59 --> “KEYCODE_SHIFT_LEFT”
60 --> “KEYCODE_SHIFT_RIGHT”
61 --> “KEYCODE_TAB”
62 --> “KEYCODE_SPACE”
63 --> “KEYCODE_SYM”
64 --> “KEYCODE_EXPLORER”
65 --> “KEYCODE_ENVELOPE”
66 --> “KEYCODE_ENTER”
67 --> “KEYCODE_DEL”
68 --> “KEYCODE_GRAVE”
69 --> “KEYCODE_MINUS”
70 --> “KEYCODE_EQUALS”
71 --> “KEYCODE_LEFT_BRACKET”
72 --> “KEYCODE_RIGHT_BRACKET”
73 --> “KEYCODE_BACKSLASH”
74 --> “KEYCODE_SEMICOLON”
75 --> “KEYCODE_APOSTROPHE”
76 --> “KEYCODE_SLASH”
77 --> “KEYCODE_AT”
78 --> “KEYCODE_NUM”
79 --> “KEYCODE_HEADSETHOOK”
80 --> “KEYCODE_FOCUS”
81 --> “KEYCODE_PLUS”
82 --> “KEYCODE_MENU”
83 --> “KEYCODE_NOTIFICATION”
84 --> “KEYCODE_SEARCH”
85 --> "TAG_LAST_KEYCODE

附录2:主进程中添加悬浮窗的方法

public void createFloatView()
    {
                
     final Button   btn_floatView = new Button(getApplicationContext());
        btn_floatView.setText("悬浮窗");

	final WindowManager wm = (WindowManager) getApplicationContext().getSystemService(
		Context.WINDOW_SERVICE);
	final WindowManager.LayoutParams params = new WindowManager.LayoutParams();


	// 设置window type
        params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
        /*
         * 如果设置为params.type = WindowManager.LayoutParams.TYPE_PHONE; 那么优先级会降低一些,
         * 即拉下通知栏不可见
         */

        params.format = PixelFormat.RGBA_8888; // 设置图片格式,效果为背景透明

        // 设置Window flag
        params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
        /*
         * 下面的flags属性的效果形同“锁定”。 悬浮窗不可触摸,不接受任何事件,同时不影响后面的事件响应。
         * wmParams.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL |
         * LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_NOT_TOUCHABLE;
         */

        // 设置悬浮窗的长得宽
        params.width = 200;
        params.height = 200;
Button bt7=findViewById(R.id.mainButton6);
	bt7.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View p1)
			{wm.removeView(btn_floatView);
				// TODO: Implement this method
			}
		});
        // 设置悬浮窗的Touch监听
        btn_floatView.setOnTouchListener(new OnTouchListener()
        {
            int lastX, lastY;
            int paramX, paramY;

            public boolean onTouch(View v, MotionEvent event)
            {
                switch (event.getAction())
                {
                case MotionEvent.ACTION_DOWN:
                    lastX = (int) event.getRawX();
                    lastY = (int) event.getRawY();
                    paramX = params.x;
                    paramY = params.y;
                    break;
                case MotionEvent.ACTION_MOVE:
                    int dx = (int) event.getRawX() - lastX;
                    int dy = (int) event.getRawY() - lastY;
                    params.x = paramX + dx;
                    params.y = paramY + dy;
                    // 更新悬浮窗位置
                    wm.updateViewLayout(btn_floatView, params);
                    break;
                }
                return true;
            }
        });
		
//......
//添加到WindowManager里面
        wm.addView(btn_floatView, params);
	boolean isAdded = true;
}

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值