Android开发中的一些小知识点记录(21-40)
2017-04-29 15:56
441 查看
编写不易,如有转载,请声明出处: 梦回河口:http://blog.csdn.net/zxc514257857/article/details/70953767
Android开发中的一些小知识点记录 (1-20) (41-60)
![](https://img-blog.csdn.net/20170429161846603?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenhjNTE0MjU3ODU3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20170503001025301?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenhjNTE0MjU3ODU3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
![](https://img-blog.csdn.net/20170503214708106?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenhjNTE0MjU3ODU3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
添加权限:
![](https://img-blog.csdn.net/20170505154326069?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenhjNTE0MjU3ODU3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
为了给用户更多的数据保护,Android6.0之后移除了通过 WiFi 和蓝牙 API 来在应用程序中可编程的访问本地硬件标示符,用WifiInfo.getMacAddress() 和 BluetoothAdapter.getAddress() 方法都返回 02:00:00:00:00:00。
Android6.0之前获取方法:
Android6.0以后获取方法:
Wifi未打开得到的是:02:00:00:00:00:00
android屏获取EthernetMac地址方式:
![](https://img-blog.csdn.net/20170529100400148?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenhjNTE0MjU3ODU3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
可以发现最新的稳定版本是3.5,于是用编辑器随意打开一个项目gradle\wrapper里面的gradle-wrapper.properties文件,找到distributionUrl这一行,将里面的版本替换为3.5,然后编译运行,AS就会开始下载,下载完后重启AS,就可以使用最新的Gradle了
或者:
附:欧阳鹏 我的Android进阶之旅——>Android KeyCode列表
00% FF(不透明)
5% F2
10% E5
15% D8
20% CC
25% BF
30% B2
35% A5
40% 99
45% 8c
50% 7F
55% 72
60% 66
65% 59
70% 4c
75% 3F
80% 33
85% 21
90% 19
95% 0c
100% 00(全透明)
如: #FFFFFFFF 不透明白色
#00FFFFFF 全透明白色
![](https://img-blog.csdn.net/20170611225859121?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenhjNTE0MjU3ODU3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
Android版本和API Level对应表下载请移步:http://download.csdn.net/detail/zxc514257857/9867553
Android开发中的一些小知识点记录 (1-20) (41-60)
———-因本人才疏学浅,如博客或Demo中有错误的地方请大家随意指出,与大家一起讨论,共同进步,谢谢!———-
Android开发中的一些小知识点记录 (1-20) (41-60)
21,从一个App中打开手机中安装的某个应用程序
import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Toast; import java.util.Collections; import java.util.List; public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; private PackageManager mPackageManager; private Context mContext = MainActivity.this; private List<ApplicationInfo> mListAppcations; private Intent mIntent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取手机中所有应用程序的包名的准备工作 mPackageManager = getPackageManager(); mIntent = new Intent(Intent.ACTION_MAIN,null); mIntent.addCategory(Intent.CATEGORY_LAUNCHER); mListAppcations = mPackageManager.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES); Collections.sort(mListAppcations,new ApplicationInfo.DisplayNameComparator(mPackageManager)); } // 启动一个Apk的Button点击事件 public void launchApk(View view){ // 获取手机中所有应用程序的包名 for (ApplicationInfo info : mListAppcations){ Log.e(TAG, "getPackagename: ---"+ info.packageName ); // 匹配QQ的包名 如果手机中安装了QQ if(info.packageName.equals("com.tencent.mobileqq")){ // 就打开该应用程序 Intent resolveIntent = mPackageManager.getLaunchIntentForPackage(info.packageName); mContext.startActivity(resolveIntent); } } } }
22,用代码检测android设备是否root或是否获取root权限
//(activity)MainActivity import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import java.io.DataOutputStream; import java.io.IOException; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } private void doSU() { try { // 这里执行是系统已经开放了root权限,而不是说通过执行这句来获得root权限 Process process = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(process.getOutputStream()); // os.writeBytes("ifconfig eth0 192.168.18.122\n"); os.writeBytes("exit\n"); os.flush(); // 如果已经root,但是用户选择拒绝授权,e.getMessage() = write failed: EPIPE (Broken pipe) // 如果没有root,e.getMessage()= Error running exec(). Command: [su] Working Directory: null Environment: null } catch (IOException e) { e.printStackTrace(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.checkRoot: doSU(); break; default: break; } return super.onOptionsItemSelected(item); } } ---------------------------------------------------------------------------------------- //(app->src->main->res->menu)main.xml <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/checkRoot" android:showAsAction="never" android:title="CheckRoot"/> </menu>
23,SpannableString实现一个TextView显示多种不同的文字大小和颜色
//MainActivity import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.SpannableString; import android.text.Spanned; import android.text.style.TextAppearanceSpan; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private TextView mTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView = (TextView) findViewById(R.id.textView); SpannableString styledText = new SpannableString("赶紧洗洗睡"); styledText.setSpan(new TextAppearanceSpan(this, R.style.style0), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); styledText.setSpan(new TextAppearanceSpan(this, R.style.style1), 1, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); styledText.setSpan(new TextAppearanceSpan(this, R.style.style2), 2, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); styledText.setSpan(new TextAppearanceSpan(this, R.style.style3), 3, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); styledText.setSpan(new TextAppearanceSpan(this, R.style.style4), 4, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); mTextView.setText(styledText, TextView.BufferType.SPANNABLE); } } ------------------------------------------------------------------- //(app->src->main->res->values)styles <resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> <style name="style0"> <item name="android:textSize">40sp</item> <item name="android:textColor">#00ff00</item> </style> <style name="style1"> <item name="android:textSize">35sp</item> <item name="android:textColor">@color/colorAccent</item> </style> <style name="style2"> <item name="android:textSize">30sp</item> <item name="android:textColor">#ffff00</item> </style> <style name="style3"> <item name="android:textSize">25sp</item> <item name="android:textColor">#00ffff</item> </style> <style name="style4"> <item name="android:textSize">20sp</item> <item name="android:textColor">#ff00ff</item> </style> </resources>
24,Html.fromHtml(html)加载到TextView中的使用
// MainActivity import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.StrictMode; import android.support.v7.app.AppCompatActivity; import android.text.Html; import android.text.Spanned; import android.text.method.LinkMovementMethod; import android.text.method.ScrollingMovementMethod; import android.widget.TextView; import java.io.InputStream; import java.net.URL; public class MainActivity extends AppCompatActivity { private TextView mTextView1; private TextView mTextView2; private TextView mTextView3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); } private void initView(){ mTextView1 = (TextView) findViewById(R.id.textView1); mTextView2 = (TextView) findViewById(R.id.textView2); mTextView3 = (TextView) findViewById(R.id.textView3); } private void initData(){ // 调用严苛模式 struct(); // 用Html语法写成的显示内容 String html = "<html><head><title>TextView使用HTML</title></head><body><p><strong>TextView使用HTML</strong></p><p><em>TextView使用HTML</em></p>" + "<p><a href=\"http://www.baidu.com/\">百度</a>一键打开百度</p><p><font color=\"#aabb00\">颜色1</p>" + "<p><font color=\"#00bbaa\">颜色2</p><h1>标题1</h1><h3>标题2</h3><h6>标题3</h6>" + "网络图片</p><img src=\"http://avatar.csdn.net/0/3/8/2_zhang957411207.jpg\"/></body></html>"; // TextView显示滚动条 mTextView1.setScrollbarFadingEnabled(false); // 给TextView设置可滚动 mTextView1.setMovementMethod(ScrollingMovementMethod.getInstance()); // 给TextView设置超链接可以打开网页 mTextView1.setMovementMethod(LinkMovementMethod.getInstance()); Spanned spanned = Html.fromHtml(html, new Html.ImageGetter() { @Override public Drawable getDrawable(String source) { InputStream is = null; Drawable drawable = null; try{ URL url = new URL(source); is = (InputStream) url.getContent(); // 在主线程中访问网络 drawable = Drawable.createFromStream(is, null); // drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicWidth()); drawable.setBounds(0,0,200,200); is.close(); }catch (Exception e){ e.printStackTrace(); return null; } return drawable; } }, null); mTextView1.setText(spanned); String textStr1 = "本月已充值 <font color=\"#FF0000\">" + 100 + "</font>元"; String textStr2 = "已充值 <font color=\"#FF0000\">" + 300 + "</font>元"; // 没有拼接,颜色显示正确 mTextView2.setText(Html.fromHtml(textStr1)); // 拼接过后,颜色效果消失 mTextView3.setText("本月" + Html.fromHtml(textStr2)); } /** * 报告与线程及虚拟机相关的策略违例。一旦检测到策略违例(policy violation), * 你将获得警告,其包含了一个栈trace显示你的应用在何处发生违例。你可以强制用警告代替崩溃(crash), * 也可以仅将警告计入日志,让你的应用继续执行 */ public static void struct() { // 严苛模式的线程策略 StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectDiskReads() .detectDiskWrites() .detectNetwork() .penaltyLog() .build()); // 严苛模式的虚拟机策略 StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() // 探测SQLite数据库操作 .detectLeakedSqlLiteObjects() // 打印logcat .penaltyLog() .penaltyDeath() .build()); } } ---------------------------------------------------------------------------------------- // (layout)activity_main <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingTop="10dp" android:paddingBottom="10dp" android:paddingLeft="10dp" android:orientation="vertical" tools:context="com.test.fromhtmldemo.MainActivity"> <TextView android:scrollbars="vertical" android:scrollbarThumbVertical="@color/colorAccent" android:scrollbarSize="3dp" android:id="@+id/textView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text=""/> <TextView android:id="@+id/textView2" android:layout_width="match_parent" android:layout_height="wrap_content"/> <TextView android:id="@+id/textView3" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
添加权限:
<uses-permission android:name="android.permission.INTERNET" />
25,TextView设置超链接
//MainActivity import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.Html; import android.text.SpannableString; import android.text.Spanned; import android.text.method.LinkMovementMethod; import android.text.style.URLSpan; import android.widget.TextView; public class MainActivity extends AppCompatActivity { private TextView mTv1; private TextView mTv2; private TextView mTv3; private TextView mTv4; private TextView mTv5; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); } private void initView(){ //(方法一)用autoLink="all"自动识别 mTv1 = (TextView) findViewById(R.id.tv1); //(方法二)将显示内容写到String.xml中 mTv2 = (TextView) findViewById(R.id.tv2); //(方法三)用Html类的fromHtml()方法 mTv3 = (TextView) findViewById(R.id.tv3); //(方法四)用Spannable或实现它的类 mTv4 = (TextView) findViewById(R.id.tv4); //(方法五)用Spannable或实现它的类,去掉超链接下划线 mTv5 = (TextView) findViewById(R.id.tv5); } private void initData(){ mTv1.setText("(1_1)百度:http://www.baidu.com/"); //激活链接 mTv2.setMovementMethod(LinkMovementMethod.getInstance()); String html = "(1_3)百度:<a href='http://www.baidu.com'>进入百度</a>"; mTv3.setText(Html.fromHtml(html)); //激活链接 mTv3.setMovementMethod(LinkMovementMethod.getInstance()); SpannableString ss1 = new SpannableString("(1_4)百度:进入百度"); //设置8~12为网站链接 ss1.setSpan(new URLSpan("http://www.baidu.com"), 8, 12, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); mTv4.setText(ss1); //激活链接 mTv4.setMovementMethod(LinkMovementMethod.getInstance()); SpannableString ss2 = new SpannableString("(1_5)百度:进入百度"); //设置8~12为网站链接 ss2.setSpan(new URLSpanNoUnderline("http://www.baidu.com"), 8, 12, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); mTv5.setText(ss2); //激活链接 mTv5.setMovementMethod(LinkMovementMethod.getInstance()); } } ---------------------------------------------------------------------------------------- //URLSpanNoUnderline import android.graphics.Color; import android.text.TextPaint; import android.text.style.URLSpan; /** * 去掉下划线的超链接 */ public class URLSpanNoUnderline extends URLSpan{ public URLSpanNoUnderline(String url) { super(url); } @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); //无下划线 ds.setUnderlineText(false); //字体颜色 ds.setColor(Color.parseColor("#646464")); } } ---------------------------------------------------------------------------------------- //(layout)activity_main <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!--用autoLink="all"设置普通文本--> <TextView android:id="@+id/tv1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:autoLink="all"/> <!--将显示内容写到String.xml中--> <TextView android:id="@+id/tv2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:text="@string/tv2"/> <!--用Html类的fromHtml()方法--> <TextView android:id="@+id/tv3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp"/> <!--用Spannable或实现它的类--> <TextView android:id="@+id/tv4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp"/> <!--用Spannable或实现它的类去掉超链接下划线--> <TextView android:id="@+id/tv5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp"/> </LinearLayout> ---------------------------------------------------------------------------------------- //(values)Strings <resources> <string name="app_name">TextView</string> <string name="tv2">(1_2)百度:<a href="http://www.baidu.com">进入百度</a> </string> </resources>
26,android设备获取WIFIMac地址方式
官方解释:为了给用户更多的数据保护,Android6.0之后移除了通过 WiFi 和蓝牙 API 来在应用程序中可编程的访问本地硬件标示符,用WifiInfo.getMacAddress() 和 BluetoothAdapter.getAddress() 方法都返回 02:00:00:00:00:00。
Android6.0之前获取方法:
// 添加权限 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> // 返回的字符串就是设备的Mac地址 private String getWIFIMac() { WifiManager manager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo infor = manager.getConnectionInfo(); return infor.getMacAddress(); }
Android6.0以后获取方法:
// 添加权限 <uses-permission android:name="android.permission.INTERNET"/> // 返回的字符串就是设备的Mac地址 public static String macAddress() throws SocketException { String address = null; // 把当前机器上的访问网络接口的存入 Enumeration集合中 Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); Log.d("TEST_BUG", " interfaceName = " + interfaces ); while (interfaces.hasMoreElements()) { NetworkInterface netWork = interfaces.nextElement(); // 如果存在硬件地址并可以使用给定的当前权限访问,则返回该硬件地址(通常是 MAC)。 byte[] by = netWork.getHardwareAddress(); if (by == null || by.length == 0) { continue; } StringBuilder builder = new StringBuilder(); for (byte b : by) { builder.append(String.format("%02X:", b)); } if (builder.length() > 0) { builder.deleteCharAt(builder.length() - 1); } String mac = builder.toString(); Log.d("TEST_BUG", "interfaceName="+netWork.getName()+", mac="+mac); // 从路由器上在线设备的MAC地址列表,可以印证设备Wifi的 name 是 wlan0 if (netWork.getName().equals("wlan0")) { Log.d("TEST_BUG", " interfaceName ="+netWork.getName()+", mac="+mac); address = mac; } } return address; }
Wifi未打开得到的是:02:00:00:00:00:00
android屏获取EthernetMac地址方式:
private String getMacAddr(){ String procVersionStr; try { BufferedReader reader = new BufferedReader(new FileReader("/sys/class/net/eth0/address"), 256); try { procVersionStr = reader.readLine(); } finally { reader.close(); } } catch (IOException e) { Log.e("", "IO Exception when getting irnumber", e); return ""; } return procVersionStr; }
27,Mediaplayer获取数据播放的三种方式
// 从资源文件中获取 MediaPlayer player = new MediaPlayer.create(this,R.raw.test); player.stare() // 从文件系统中获取 private String externalPath = Environment.getExternalStorageDirectory() + "/Movies/a.mp4"; MediaPlayer player = new MediaPlayer(); player.setDataSource(externalPath); player.prepare(); player.start(); // 从网络中获取 private String netPath = "http://xxx.mp4"; MediaPlayer player = new MediaPlayer(); player.setDataSource(externalPath); player.prepare(); player.start();
28,去除ListView和RecyclerView边界阴影效果和滚动条
android:overScrollMode="never" android:scrollbars="none"
29,Android获取设备IMEI、设备型号、SDK版本和系统版本
// 获取设备IMEI <uses-permission android:name="android.permission.READ_PHONE_STATE"/> TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String IMEIs = tm.getDeviceId() ; // 设备型号 String device_model = Build.MODEL; // 设备SDK版本 String version_sdk = Build.VERSION.SDK; // 设备系统版本 String version_release = Build.VERSION.RELEASE;
30,Android获取设备IP地址
// 获取设备的WifiIp地址,Wifi未打开获取为0.0.0.0 private String getWifiIP() { WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); //判断wifi是否开启 if (!wifiManager.isWifiEnabled()) { wifiManager.setWifiEnabled(true); } WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int ipAddress = wifiInfo.getIpAddress(); String wifiIP = intToIp(ipAddress); return wifiIP; } private String intToIp(int i) { return (i & 0xFF ) + "." + ((i >> 8 ) & 0xFF) + "." + ((i >> 16 ) & 0xFF) + "." + ( i >> 24 & 0xFF) ; } // 获取当前连接的网络的IP地址,包括Wifi网络和有线网络 private String getIPAddr() { try { for (Enumeration<NetworkInterface> en = NetworkInterface .getNetworkInterfaces(); en.hasMoreElements(); ) { NetworkInterface intf = en.nextElement(); for (Enumeration<InetAddress> enumIpAddr = intf .getInetAddresses(); enumIpAddr.hasMoreElements(); ) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) { return inetAddress.getHostAddress(); } } } } catch (SocketException ex) { ex.printStackTrace(); } return "0.0.0.0"; }
31,Android通过程序创建桌面快捷方式,可以指定快捷方式的网址
程序卸载快捷方式不会消失,如果存在快捷方式不会重复创建// 添加权限 <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> // activity代码 import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Parcelable; import android.support.v7.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Parcelable icon = Intent.ShortcutIconResource.fromContext(this, R.mipmap.baidu); addShortcut(icon,"百度",Uri.parse("https://www.baidu.com/")); } public void addShortcut(Parcelable icon, String name, Uri uri) { Intent intentAddShortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); intentAddShortcut.putExtra("duplicate", false); // 添加名称 intentAddShortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, name); // 添加图标 intentAddShortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon); // 设置Launcher的Uri数据 Intent intentLauncher = new Intent(); intentLauncher.setData(uri); // 添加快捷方式的启动方法 intentAddShortcut .putExtra(Intent.EXTRA_SHORTCUT_INTENT, intentLauncher); sendBroadcast(intentAddShortcut); } }
32,将文字显示在图片上,通过margin等于负值的方式实现
<ImageView android:src="@mipmap/baidu" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitXY" android:id="@+id/imageView"/> <TextView android:layout_marginTop="-100dp" android:layout_below="@+id/imageView" android:layout_centerHorizontal="true" android:text="手机百度" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
33,实现界面不被弹出的键盘挤上去
//在AndroidMainfest.xml文件中对应的Activity添加 android:windowSoftInputMode="adjustPan"
34,Android开发中mipmap和drawable中文件的分辨率
// mipmap文件夹中icon的尺寸 mipmap-mdpi/icon.png (48x48 px 160DPI) mipmap-hdpi/icon.png (72x72 px 240DPI) mipmap-xhdpi/icon.png (96x96 px 320DPI) mipmap-xxhdpi/icon.png (144x144 px 480DPI) mipmap-xxxhdpi/icon.png (192x192 px 640DPI) // drawable文件夹切图标准 drawable-mdpi (480×320 px) drawable-hdpi (800×480 px) drawable-xhdpi (1280×720 px) drawable-xxhdpi (1920×1080 px) drawable-xxxhdpi (3840×2160 px) 1x : 1.5x : 2x : 3x : 4x
35,Android中如何升级Gradle
从 https://services.gradle.org/versions/all 网站中获取最新的Gradle的版本号:可以发现最新的稳定版本是3.5,于是用编辑器随意打开一个项目gradle\wrapper里面的gradle-wrapper.properties文件,找到distributionUrl这一行,将里面的版本替换为3.5,然后编译运行,AS就会开始下载,下载完后重启AS,就可以使用最新的Gradle了
36,获取Android屏幕的实际分辨率
public static Point getScreenResolution(Context context) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(dm); Point size = new Point(); size.x = dm.widthPixels; size.y = dm.heightPixels; return size; }
或者:
public static Display getWindowDisplay(){ WindowManager windowManager = ((Activity) mContext).getWindowManager(); Display display = windowManager.getDefaultDisplay(); return display; }
37,点击某个键实现Home键效果
/**点击F1相当于点击Home键*/ public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_F1) { Intent intent = new Intent(Intent.ACTION_MAIN); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addCategory(Intent.CATEGORY_HOME); startActivity(intent); return true; } return super.onKeyDown(keyCode, event); }
38,获取物理按键的KeyCode值
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { while(true){ Log.i(TAG , "keyCode:" + keyCode); return super.onKeyDown(keyCode, event); } }
附:欧阳鹏 我的Android进阶之旅——>Android KeyCode列表
39,颜色透明度对应表
透明度 十六进制00% FF(不透明)
5% F2
10% E5
15% D8
20% CC
25% BF
30% B2
35% A5
40% 99
45% 8c
50% 7F
55% 72
60% 66
65% 59
70% 4c
75% 3F
80% 33
85% 21
90% 19
95% 0c
100% 00(全透明)
如: #FFFFFFFF 不透明白色
#00FFFFFF 全透明白色
40,Android版本和API Level对应表
Android版本和API Level对应表下载请移步:http://download.csdn.net/detail/zxc514257857/9867553
Android开发中的一些小知识点记录 (1-20) (41-60)
———-因本人才疏学浅,如博客或Demo中有错误的地方请大家随意指出,与大家一起讨论,共同进步,谢谢!———-
相关文章推荐
- Android开发中的一些小知识点记录(1-20)
- android开发一些小知识点记录
- Android开发中的一些小知识点记录(41-60)
- android 开发中遇到的一些小的知识点在此做一个记录(持续更新)
- Android开发网上的一些重要知识点
- Android开发网上的一些重要知识点 [2]
- Android开发网上的一些重要知识点
- [转载]Android开发网上的一些重要知识点
- Android开发网上的一些重要知识点【1】
- Android开发网上的一些重要知识点
- Android开发的一些重要知识点(二)
- Android开发网上的一些重要知识点 [4]
- Android上OpenGL开发一些经验记录(上)
- Android开发网上的一些重要知识点
- Android开发网上的一些重要知识点【1】
- Android开发的一些重要知识点(一)
- Android开发网上的一些重要知识点_3
- Android开发网上的一些重要知识点_2
- Android开发网上的一些重要知识点
- 初学android开发的一些过程记录