android笔记

本文汇总了Android开发中常用的技术要点,包括屏幕尺寸获取、网络状态检测、动态生成UI控件等实用技巧,还介绍了如何设置TextView内容过长时的显示方式及如何获取设备信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


————获取屏幕高宽———— 

[java]  view plain copy
  1. // 获取状态栏高度  
  2. Rect frames = new Rect();  
  3. MainTwoActivity.this.getWindow().getDecorView().getWindowVisibleDisplayFrame(frames);  
  4. int statusBarHeights = frames.top;  
  5.   
  6. //获取标题栏高度  
  7. int  titleHeights  = frames.height() - View.getheight();  
  8.   
  9. //获得屏幕高宽  
  10. int heights = MainTwoActivity.this.getWindowManager().getDefaultDisplay().getHeight();  
  11.   
  12. int widths = MainTwoActivity.this.getWindowManager().getDefaultDisplay().getWidth();  
  13.   
  14. //正确获取手机屏幕的分辨率和密度  
  15. DisplayMetrics dm = new DisplayMetrics();  
  16. getWindowManager().getDefaultDisplay().getMetrics(dm);  
  17. int widthPixels= dm.widthPixels;  
  18. int heightPixels= dm.heightPixels;  
  19. float density = dm.density;  
  20. int screenWidth = widthPixels * density ;  
  21. int screenHeight = heightPixels * density ;  
320*480的手机上得到的widthPixels值是320,heightPixels值是480,density的值是1.0。
在480*800的手机上的到的widthPixels值是320,heightPixels值是533,density的值是1.5。
注意: 此处DisplayMetrics不要使用context.getApplicationContext().getResources().getDisplayMetrics()来获取。

————关于inflate的使用———— 

[cpp]  view plain copy
  1. View view=View.inflate(this,R.layout.dialog_layout,null);  
  2.   
  3. TextViewdialog TV=(TextView)view.findViewById(R.id.dialog_tv);  


————后台动态生成控件———— 

[java]  view plain copy
  1. //第一是容器,创建一个容器(这里用LinearLayout举例);  
  2. LinearLayout lLayout = new LinearLayout(MainActivity.this);//(这里的this是一个Context变量);  
  3. //第二是容器的细节,也就是属性部分;比如,容器里的控件是怎样排的;  
  4. lLayout.setOrientation(LinearLayout.VERTICAL);  
  5. //第三是容器里的控件,创建自己想要的控件;比如,  
  6. EditText editText = new EditText(MainActivity.this);   
  7. Button button = new Button(MainActivity.this);//这里的this都是一个Context变量;  
  8. //第四是容器的细节,就是设置容器的属性;  
  9. editText.setLines(3);   
  10. editText.setGravity(Gravity.TOP|Gravity.LEFT);  
  11. button.setText("插入随机表情");  
  12. //第五是将控件加入到容器当中去;  
  13. LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);  
  14. lParams.setMargins(0,0,0,0);//设置margin属性  
  15. RelativeLayout.LayoutParams rParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);  
  16. rParams.addRule(RelativeLayout.CENTER_HORIZONTAL);//设置RelativeLayout控件下android:layout_centerHorizontal 属性  
  17. rParams.addRule(RelativeLayout.BELOW, tvtime.getId()); //设置RelativeLayout控件下android:layout_below 属性  
  18. rParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); //设置RelativeLayout控件下android:layout_alignParentLeft 属性  
  19. rParams1.addRule(RelativeLayout.LEFT_OF,tv.getId()); //设置RelativeLayout控件下android:layout_toRightOf 属性  
  20. lLayout.addView(editText, lParams);  
  21. lLayout.addView(button, lParams);  
  22. //第六是将容器将加入ContentView中;  
  23. setContentView(lLayout);  

————判断是否连接网络————

[java]  view plain copy
  1. /** 
  2.  * 检查网络连接 
  3.  * @param context 
  4.  * @return 
  5.  */  
  6. public static boolean isNetworkAvailable(Context context) {  
  7.     ConnectivityManager connectivity = (ConnectivityManager) context  
  8.             .getSystemService(Context.CONNECTIVITY_SERVICE);  
  9.     if (connectivity != null) {  
  10.         NetworkInfo[] info = connectivity.getAllNetworkInfo();  
  11.         if (info != null) {  
  12.             for (int i = 0; i < info.length; i++) {  
  13.                 if (info[i].getState() == NetworkInfo.State.CONNECTED) {  
  14.                     return true;  
  15.                 }  
  16.             }  
  17.         }  
  18.     }  
  19.     return false;  
  20. }  


加上相应的权限:

[html]  view plain copy
  1. <uses-permission android:name="android.permission.INTERNET" />  
  2. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>   

 

————判断只可以输入数字————

1、

android:digits属性:设置允许输入哪些字符。

假如只可以输入0到9的数字字符,设置为:android:digits ="1234567890"

2、

Integer.parseInt() 抛出的Exception来判断:

[java]  view plain copy
  1. try  
  2. {  
  3.      Integer.parseInt(string);  
  4. }  
  5. catch  
  6. {  
  7.     //发生了异常,那么就不是数字了。  
  8. }  

3、用正则表达式

 

[java]  view plain copy
  1. if(str.matches("^[0-9]")){  
  2.     //不是数字  
  3. }else{  
  4.     //是数字  
  5. }  

 

常用的正则表达式:

^[1-9]\d{3}$  非0开头的4位整数
^([1-9]\d{0,3})$  非零的最大4位数字,可以是1位,2位,3位 
[^a-zA-Z0-9]  只允许字母和数字 
[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……& amp;*()——+|{}【】‘;:”“’。,、?]    清除掉所有特殊字符

————获取屏幕宽度和高度————

[java]  view plain copy
  1. WindowManager wm = (WindowManager) getContext()   
  2. .getSystemService(Context.WINDOW_SERVICE);   
  3. int width = wm.getDefaultDisplay().getWidth();   
  4. int height = wm.getDefaultDisplay().getHeight();   

[java]  view plain copy
  1. WindowManager wm = this.getWindowManager();   
  2. int width = wm.getDefaultDisplay().getWidth();   
  3. int height = wm.getDefaultDisplay().getHeight();  

 

 

————Android 属性android:visibilty————

此属性意思是此视图是否显示,例如RelativeLayout中android:visibility="gone"

其有三个属性:visible显示;invisible不显示但是占用空间;gone不显示

在类中,可以设置其显示与否,setVisibility(View.GONE);不显示

setVisibility(View.VISIBLE);显示 如果想要得倒控件的显示状态 可以

通过:getVisibility()==View.GONE 或者getVisibility()==View.VISIBLE来作出判断

 

————Android CheckBox事件setOnCheckedChangeListener————

[java]  view plain copy
  1. checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {  
  2.               
  3.     @Override  
  4.     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {  
  5.     if(isChecked){  
  6.         System.out.println("勾选了...");  
  7.     }else{  
  8.         System.out.println("没勾选了...");  
  9.     }  
  10. }});  

 

————android中spinner级联设置默认选择setselection()函数无效————

对于两个spinner设计默认选择时,我使用的都是setselection(int position)函数,但这样的结果是只有第一级spinner能够实现默认选择的功能,第二级spinner死活都不行

 

后来尝试使用 setselection(int position,boolean animate)函数,就解决这个问题。后面的boolean 参数设为true.

 

————android中TextView内容过长加省略号————

在xml中:

[html]  view plain copy
  1. android:ellipsize = "end"     //省略号在结尾  
  2. android:ellipsize = "start"   //省略号在开头  
  3. android:ellipsize = "middle"   //省略号在中间  
  4. android:ellipsize = "marquee"  //跑马灯  
  5. android:singleline = "true"    //最好加上一个约束  

在后台代码中:

[java]  view plain copy
  1. tv.setEllipsize(TextUtils.TruncateAt.valueOf("END"));  
  2. tv.setEllipsize(TextUtils.TruncateAt.valueOf("START"));  
  3. tv.setEllipsize(TextUtils.TruncateAt.valueOf("MIDDLE"));  
  4. tv.setEllipsize(TextUtils.TruncateAt.valueOf("MARQUEE"));  
  5. tv.setSingleLine(true); //最好再加一个约束  


不仅对于textview有此属性,对于editext也有,不过它不支持marquee


Android 获取手机信息

/**
  * 获取手机信息
  */
 public void getPhoneInfo()
 {
  TelephonyManager tm = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);
  String mtyb = android.os.Build.BRAND;// 手机品牌
  String mtype = android.os.Build.MODEL; // 手机型号
  String imei = tm.getDeviceId();
  String imsi = tm.getSubscriberId();
  String numer = tm.getLine1Number(); // 手机号码
  String serviceName = tm.getSimOperatorName(); // 运营商
  tvPhoneInfo.setText("品牌: " + mtyb + "\n" + "型号: " + mtype + "\n" + "版本: Android " + android.os.Build.VERSION.RELEASE + "\n" + "IMEI: " + imei
    + "\n" + "IMSI: " + imsi + "\n" + "手机号码: " + numer + "\n" + "运营商: " + serviceName + "\n");
 }

 

/**
  * 获取手机内存大小
  * 
  * @return
  */
 private String getTotalMemory()
 {
  String str1 = "/proc/meminfo";// 系统内存信息文件
  String str2;
  String[] arrayOfString;
  long initial_memory = 0;
  try
  {
   FileReader localFileReader = new FileReader(str1);
   BufferedReader localBufferedReader = new BufferedReader(localFileReader, 8192);
   str2 = localBufferedReader.readLine();// 读取meminfo第一行,系统总内存大小

   arrayOfString = str2.split("\\s+");
   for (String num : arrayOfString)
   {
    Log.i(str2, num + "\t");
   }

   initial_memory = Integer.valueOf(arrayOfString[1]).intValue() * 1024;// 获得系统总内存,单位是KB,乘以1024转换为Byte
   localBufferedReader.close();

  }
  catch (IOException e)
  {
  }
  return Formatter.formatFileSize(getBaseContext(), initial_memory);// Byte转换为KB或者MB,内存大小规格化
 }

 


/**
  * 获取CPU核心数
  * 
  * @return
  */
 private int getNumCores()
 {
  // Private Class to display only CPU devices in the directory listing
  class CpuFilter implements FileFilter
  {
   @Override
   public boolean accept(File pathname)
   {
    // Check if filename is "cpu", followed by a single digit number
    if (Pattern.matches("cpu[0-9]", pathname.getName()))
    {
     return true;
    }
    return false;
   }
  }

  try
  {
   // Get directory containing CPU info
   File dir = new File("/sys/devices/system/cpu/");
   // Filter to only list the devices we care about
   File[] files = dir.listFiles(new CpuFilter());
   // Return the number of cores (virtual CPU devices)
   return files.length;
  }
  catch (Exception e)
  {
   e.printStackTrace();
   // Default to return 1 core
   return 1;
  }
 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值