Android开发中的一些小知识点记录(1-20)
来源:互联网 发布:九宫格日记软件 编辑:程序博客网 时间:2024/05/17 07:20
编写不易,如有转载,请声明出处: 梦回河口:http://blog.csdn.net/zxc514257857/article/details/60642640
Android开发中的一些小知识点记录(21-40) (41-60)
1,取消顶部的titlebar并全屏显示
// 取消titleBarrequestWindowFeature(Window.FEATURE_NO_TITLE); // 隐藏状态栏getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);// 取消actionbar将android:theme对应的主题parent设置为NoActionBar
2,根据手机和平板(TV)的不同,进行横竖屏的不同显示
if(!PhoneUtils.isTv(this)){ //是手机就横屏 是平板(TV)就正常 if(getRequestedOrientation()!= ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }}public class PhoneUtils { public static boolean isTv(Context context) { return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE; }}
3,解决一进入Activity EdirText抢占焦点,自动弹出虚拟键盘问题
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
4,注册广播,实现应用开机自启动
定义一个BroadcastReceiver
//创建开机自启动的广播接收者public class BootupReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //最好睡眠几秒钟,保证程序启动流畅 SystemClock.sleep(2000); intent = new Intent(context, SplashActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); }}
在AndroidManifest文件中定义该BroadcastReceiver
<receiver android:name=".receiver.BootupReceiver" android:enabled="true" android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> <category android:name="android.intent.category.DEFAULT" /> </intent-filter></receiver>
在AndroidManifest文件中添加权限
<uses-permission android:name=”android.permission.RECEIVE_BOOT_COMPLETED” />
5, 应用开机自启时,保证屏幕为去锁状态
在Activity的onCreate()方法中添加如下代码
KeyguardManager keyguardManager = (KeyguardManager)getSystemService(KEYGUARD_SERVICE);KeyguardManager.KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);lock.disableKeyguard();
在AndroidManifest文件中添加权限
<uses-permission android:name=”android.permission.DISABLE_KEYGUARD” />
6,点击退出按钮,需输入正确密码退出
/**点击退出按钮*/public void logout(View view){ final EditText password = new EditText(this); password.setFocusable(true); //设置为密码不可见形式 password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("请输入退出密码") .setIcon(R.mipmap.logo) .setNegativeButton("取消", null) .setCancelable(false) .setView(password) .setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { String inputName = password.getText().toString(); if(inputName.equals("123456")){ //退出所有Activity操作 ExitApplication.getInstance().exit(); }else{ new AlertDialog.Builder(SecondActivity.this) .setTitle("警告") .setIcon(R.mipmap.logo) .setMessage("密码输入错误,请重新输入!") .setCancelable(false) .setNegativeButton("取消",null) .setPositiveButton("确定",null) .show(); } } }).show();}
ExitApplication.getInstance().exit(); 不理解的话可参考:Android中实现一键退出应用程序 http://blog.csdn.net/zxc514257857/article/details/62104900
7,彩色ProgressBar
//(activity)MainActivityprivate ProgressBar mProgressBar;public static final int LOADING = 1;private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case LOADING: //各种初始化操作 break; } }}mProgressBar = (ProgressBar) findViewById(R.id.progressBar);new Thread(new Runnable() { int progress = 0; @Override public void run() { for (int i = 0; i < 100; i++) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } mProgressBar.setProgress(++progress); mProgressBar.incrementProgressBy(i); } handler.sendEmptyMessage(LOADING); } }).start();-----------------------------------------------------------//(layout)activity_main<ProgressBar android:id="@+id/progressBar" style="?android:attr/progressBarStyleHorizontal" android:background="#fff" android:layout_width="match_parent" android:layout_height="8dp" android:progressDrawable="@drawable/progressbar" android:layout_marginBottom="20dp" android:layout_alignParentBottom="true"/>-----------------------------------------------------------//(drawable)progressbar.xml<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@android:id/background"> <shape> <corners android:radius="5dip" /> <gradient android:angle="0" android:centerColor="#fff" android:centerY="0.75" android:endColor="#fff" android:startColor="#fff" /> </shape> </item> <item android:id="@android:id/secondaryProgress"> <clip> <shape> <corners android:radius="5dip" /> <gradient android:angle="0" android:centerColor="#80ffb600" android:centerY="0.75" android:endColor="#a0ffcb00" android:startColor="#80ffd300" /> </shape> </clip> </item> <item android:id="@android:id/progress"> <clip> <shape> <corners android:radius="5dip" /> <gradient android:angle="0" android:endColor="#8000ff00" android:startColor="#80ff0000" /> </shape> </clip> </item></layer-list>
8,加载WebView时html的路径表示
//加载WebView时,把html文件放在和res平级的assets目录下//载入assets目录OA文件夹下的index.html页面的固定表示如下:mWebView.loadUrl("file:///android_asset/OA/index.html");
9,简单掩盖应用程序刚启动时的白屏或黑屏问题
在AndroidManifest.xml文件中对出现白屏的那个页面(一般是第一个页面)添加一个透明的主题
如下图:
透明主题的代码如下:
<style name="AppTransparentTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowIsTranslucent">true</item> <item name="android:windowBackground">@android:color/transparent</item></style>
注:如果你发现MainActivity页面的背景也为透明的了,你需要将MainActivity的页面背景颜色手动设置为白色.
10,BitMap和String之间的相互转化
//通过Base64 BitMap转String public static String convertIconToString(Bitmap bitmap){ // outputstream ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.PNG, 100, baos); // 转为byte数组 byte[] appicon = baos.toByteArray(); return Base64.encodeToString(appicon, Base64.DEFAULT); } //通过Base64 String转BitMappublic static Bitmap convertStringToIcon(String str){ Bitmap bitmap = null; try { byte[] bitmapArray; bitmapArray = Base64.decode(str, Base64.DEFAULT); bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.length); return bitmap; }catch (Exception e){ return null; } }
11,修改EditText的hint文字的大小
SpannableString ss1 = new SpannableString("编号1");// 新建一个属性对象,设置文字的大小AbsoluteSizeSpan ass = new AbsoluteSizeSpan(25, true);// 附加属性到文本ss1.setSpan(ass, 0, ss1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);// 设置hint,一定要进行转换,否则属性会消失mEt_Num1.setHint(new SpannedString(ss1));SpannableString ss2 = new SpannableString("编号2");ss2.setSpan(ass, 0, ss2.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);mEt_Num2.setHint(new SpannedString(ss2));
这样就将两个EditText的hint值都设置了25dp大小。
12,开关按钮toggleButton的使用
//xml文件<ToggleButton android:id="@+id/tb" android:textOn="开" android:textOff="关" android:layout_width="match_parent" android:layout_height="wrap_content"/><ImageView android:id="@+id/iv" android:background="#fff" android:layout_width="match_parent" android:layout_height="match_parent"/>-------------------------------------------------------------------//activityprivate ToggleButton mTb;private ImageView mIv;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTb = (ToggleButton) findViewById(R.id.tb); mIv = (ImageView) findViewById(R.id.iv); mTb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean b) { if(b){ mIv.setBackgroundColor(Color.BLACK); }else{ mIv.setBackgroundColor(Color.WHITE); } } });}
13,VersionCode和VersionName
在ecplise中的VersionCode和VersionName在AndroidManifest.xml文件中定义着,但在Android中定义在Module的build.gradle文件中
VersionCode:对消费者不可见,用于应用市场、程序内部识别版本,判断新旧等用途。
VersionName:展示给消费者,消费者会通过它认知自己安装的版本,一般我们说的版本号就是这个
VersionCode和VersionName都是从小到大不停更新,一般都是同时递增的。如:VersionCode的值可以从1一直到1000或10000,VersionName的值也是从1.0.1到1.5.3或5.3.5
//获取VersionNamepublic static String getPackageVersionName(Context context, String pkgName) { try { PackageManager manager = context.getPackageManager(); PackageInfo info = manager.getPackageInfo(pkgName, 0); //PackageManager.GET_CONFIGURATIONS return info.versionName; } catch (Exception e) { e.printStackTrace(); return null; }}//获取VersionCodepublic static int getPackageVersionCode(Context context, String pkgName) { try { PackageManager manager = context.getPackageManager(); PackageInfo info = manager.getPackageInfo(pkgName, 0); return info.versionCode; } catch (Exception e) { e.printStackTrace(); return -1; }}
14,添加菜单按钮
//显示menu菜单 需在res目录下新建menu文件夹,menu文件夹下放置main.xml文件 public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main , menu); return true; }//编辑menu菜单<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/xxx" android:showAsAction="never" android:title="xxx"/></menu>// 将菜单中的每一个选项和其点击事件相对应public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.xxx: break; case R.id.xxx: break; default: break; }}
15,使用Weight属性,将Button按钮挤到最底部
//1,大布局必须为LinearLayout //2,Button按钮的高度必须为确定值 //3,Button按钮上方的布局的高度必须设置为wrap_content,并且设置layout_weight=”1”//大布局必须为LinearLayout<LinearLayout> <LinearLayout android:layout_height="wrap_content" android:layout_weight="1"> //上半部分设置高度自适应,并且权重为1 </LinearyLayout> //Button按钮的高度必须为确定值 <LinearLayout android:layout_height="50dp"> <button andtoid:text="底部按钮"/> </LinearyLayout></LinearLayout>
16,Intent传值基本使用
//1,使用startActivity方式传值,直接传值不求回报//MainActivity传值Intent intent = new Intent(MainActivity.this,SecondActivity.class);intent.putExtra("id" ,mId);startActivity(intent);finish();//SecondActivity取值Intent intent = getIntent();String mId = intent.getStringExtra("id");//2,使用startActivityForResult方式传值,需要对方传值过来//MainActivity要值Intent intent = new Intent(MainActivity.this,SecondActivity.class);int requestCode = 0;startActivityForResult(intent,requestCode);finish();//SecondActivity传值Intent intent = new Intent();intent.putExtra("id" , mId);int resultCode = 1;setResult(resultCode ,intent);//在MainActivity的onActivityResult方法里面取值String mId = data.getStringExtra("id");//3,如果两种方式在代码中都存在,可以写在一起,不用分开来写//MainActivity要值/传值Intent intent = new Intent(MainActivity.this,SecondActivity.class);int requestCode = 0;intent.putExtra("id" ,mId);startActivityForResult(intent,requestCode);finish();//SecondActivity传值/取值Intent intent1 = new Intent();intent1.putExtra("name" , mName);int resultCode = 1;setResult(resultCode ,intent1);------------------------------------Intent intent2 = getIntent();String mId = intent2.getStringExtra("id");//在MainActivity的onActivityResult方法里面取值String mName = data.getStringExtra("name");
17,SharedPreferences基本使用
//1,创建对象并初始化控件private SharedPreferences mSp;mSp = this.getSharedPreferences("config", 0);//2,在需要程序关闭后数据显现的位置保存数据private SharedPreferences.Editor mEditor;mEditor = mSp.edit();mEditor.putBoolean("needRegister", true);mEditor.putBoolean("withoutRegister", false);mEditor.commit();//3,一般在程序开始处就显示数据private boolean mNeedRegister;private boolean mWithoutRegister;mNeedRegister = mSp.getBoolean("needRegister",true);mWithoutRegister = mSp.getBoolean("withoutRegister",false);
18,循环执行操的代码编写
//1,创建Handler对象private Handler handler = new Handler();//2,在OnCreate()方法里面调用handler.post(runnable)protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); handler.post(runnable);}//3,创建Runnable对象,并每隔1秒钟循环执行xxx()方法private Runnable runnable = new Runnable() { public void run() { xxx(); handler.postDelayed(runnable,1000); }};//4,在onPause()方法里面移除循环protected void onPause() { super.onPause(); handler.removeCallbacks(runnable);}//注:此处的xxx()方法就是会循环执行的方法,每隔几秒循环一次可自行设定
19,使用SharedPreferences实现图片本地缓存
//1,从网络获取图片private static final int SUCCESS = 1;private void getImageFromNet(final String imagePath) { new Thread() { public void run() { try { URL url = new URL(imagePath); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setRequestMethod("GET"); con.setConnectTimeout(5 * 1000); InputStream is = con.getInputStream(); //把流转换为bitmap Bitmap bitmap = BitmapFactory.decodeStream(is); Message message = new Message(); message.what = SUCCESS; message.obj = bitmap; handler.sendMessage(message); } catch (Exception e) { e.printStackTrace(); } } }.start();}//2,把Bitmap转为String存储在SharedPreferences中private SharedPreferences.Editor mEditor = mSp.edit();Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case SUCCESS: Bitmap bitmap = (Bitmap) msg.obj; ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 80, byteArrayOutputStream); String img = new String(Base64.encodeToString(byteArrayOutputStream.toByteArray(), Base64.DEFAULT)); mEditor.putString("img", img); mEditor.commit(); } }};//3,需要使用时再把图片从SharedPreferences中取出private ImageView mIv_Photo = (ImageView) findViewById(R.id.iv_Photo);Bitmap img_bitmap = null;if (img != "") { byte[] bytes = Base64.decode(img.getBytes(), 1); img_bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);}mIv_Photo.setImageBitmap(img_bitmap);
20,Android应用市场上传、认领、通过审核的注意事项
Android应用市场:豌豆荚、GooglePlay、小米应用商店、腾讯应用宝、搜狗市场、安智市场等
上传:准备图标、apk、文字介绍、关键词、截图等
认领:准备代码截图、公司营业执照(个人是身份证)、apk包等
建议:上传apk的时候,手机里一定要集齐360卫士、金山毒霸、百度安全管家、腾讯安全管家。如果这四个都查不到有风险的话,基本每个市场都可以通过了;应用商店的关键词很重要,尽量在应用描述的前一段塞进你认为目标用户会搜索的词;有熟人会审核快很多,多和负责的客服MM和商务人员打交道;签名文件一定要保存好,软件升级的时候会用到,否则无法升级。
内容参考自:https://www.zhihu.com/question/21281842
Android开发中的一些小知识点记录(21-40) (41-60)
———-因本人才疏学浅,如博客或Demo中有错误的地方请大家随意指出,与大家一起讨论,共同进步,谢谢!———-
- Android开发中的一些小知识点记录(1-20)
- Android开发中的一些小知识点记录(21-40)
- Android开发中的一些小知识点记录(41-60)
- android开发一些小知识点记录
- Android中的一些小知识点
- Android开发中的一些小的知识点总结
- [长期记录]开发中的小知识点
- Android 自己开发中的一些小问题记录
- 记录平时Android开发中的一些小技巧
- android 开发中遇到的一些小的知识点在此做一个记录(持续更新)
- android小知识点记录
- Android 小知识点记录
- android 小知识点记录
- 记录开发过程中的一些小问题
- 记录一些Tensorflow小知识点
- Android开发过程中的几个小知识点
- Android开发中的一些java知识点
- 一些小知识点(1)
- 算法-排序-冒泡排序
- log4j-usage.html
- C++实现表达式的计算
- 【问题收录】Ubuntu14.04连接两个双显示器失败的解决方案
- Search Insert Position
- Android开发中的一些小知识点记录(1-20)
- 数组去重
- git切换分支保存修改的代码的方法
- mac环境变量
- TCP
- selenium 环境搭建(完整版)
- Haar小波
- EasyUI表单验证
- C程序的内存镜像