Android 笔记 (持续更新)

觉得有意思有用处的就简单记下

作为备忘录

1 , 更改顶部状态栏和底部导航栏颜色

  • Android L及以上版本
  • 状态栏颜色在style.xml中修改colorPrimaryDark颜色即可
  • 导航栏颜色在style.xml中修改navigationBarColor颜色即可
  • Android L以下版本
  • 参考:http://www.jianshu.com/p/bae25b5eb867

2 , 一个非常好用的翻译插件

是我这个英语渣的福利

3 , Android studio自带的截图与录制视频功能

  • 连接手机后,点开底部Android Monitor,如图 :
sample0.png

4 , 布局文件中的含透明值颜色的写法

  • android:background="#80000000"
  • 前面两个数字是透明值【00~99 : 透明~不透明】,后面为颜色代码

5 , 在service里启动activity

Intent intent = new Intent(getBaseContext() , Activity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
getApplication().startActivity(intent);

6 , 进入activity的时候取消edittext自动获取焦点

在父布局加这两句话

android:focusable="true"
android:focusableInTouchMode="true"

7 , 显示简单的加载框

ProgressDialog progressDialog = ProgressDialog.show(context, title, message);

8 , 防止点击edittext的时候被软键盘遮住

在Androidmanifest中添加

android:windowSoftInputMode="stateHidden|adjustPan"

9 , 同一个Textview设置不同文字颜色

String string = "设置不同文字颜色"; 
SpannableString ss = new SpannableString(string);
ss.setSpan(new ForegroundColorSpan(Color.GREEN), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
textview.setText(ss);

10 , Bitmap转为Drawable

Drawable drawable = new BitmapDrawable(bitmap);

11 , 将本地图片取出并设置为bitmap格式

Bitmap bitmap = BitmapFactory.decodeFile(PhotoPath);

12 , 保存bitmap格式的文件到本地

try { 
      FileOutputStream out = new FileOutputStream(outFilePath); 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); 
      out.flush(); out.close(); 
    } catch (IOException e) {
      e.printStackTrace();
    }

13 , 使用过bitmap后不再使用时谨记释放内存

if (bitmap != null) { 
    bitmap.recycle();//释放bitmap
 }

14 , Material风格的Dialog的使用

AlertDialog.Builder builder = new AlertDialog.Builder(context); 
builder.setTitle(title)
       .setMessage(message) 
       .setView(view) 
       .setNegativeButton("取消", null)
       .setPositiveButton("加入", null)
       .create()
       .show();

15 , Android5.0全透明状态栏效果

//取消标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().requestFeature(Window.FEATURE_NO_TITLE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = getWindow();    
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
            | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);    
    window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.setStatusBarColor(Color.TRANSPARENT);
    window.setNavigationBarColor(Color.TRANSPARENT);
}

16 , 不同APP之间的Activity跳转

Intent intent = new Intent(); 
intent.setClassName(packageName,packageName+activityName); 
startActivity(intent);

17 , 带阴影的背景xml

示例图:


sample2.png
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#BBB" />
            <corners android:radius="5dp" />
        </shape>
    </item> 
    <item android:bottom="3px">
        <shape android:shape="rectangle">
            <solid android:color="#FFE0EEEE" />
            <stroke
                android:width="0.5dp"
                android:color="@color/colorCcc" />
            <corners android:radius="5dp" />
            <padding
                android:bottom="15dp"
                android:left="15dp"
                android:right="15dp"
                android:top="15dp" />
        </shape>
    </item>
</layer-list>

18 , AlertDialog点击按钮后对话框不消失的处理方法

在点击PositiveButton或NegativeButton按钮的方法中加入

try {    
      Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");    
      field.setAccessible(true);   
      field.set(dialog, false); // false - 不能关闭 , true - 关闭
} catch (Exception e) {   
     e.printStackTrace();
}

19 , 使用代码为textview设置drawableLeft

1.在XML中使用

android:drawableLeft="@drawable/icon"  

2.代码中动态变化

Drawable drawable= getResources().getDrawable(R.drawable.drawable);  
/// 这一步必须要做,否则不会显示.  
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());  
mTextview.setCompoundDrawables(drawable,null,null,null);  

20, 使用代码为textview设置下划线

textView.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); //下划线
textView.getPaint().setAntiAlias(true);//抗锯齿

21, 对话框AlertDialog中的EditText不能自动打开软键盘

Activity中需要启动一个AlertDialog,这个对话框使用的是自定义布局,在这个对话框里有个EditText,可能是自定义布局的问题,导致对话框弹出时不能自动打开软键盘并定位焦点到文本框里。

解决方法:延迟一会儿调出输入法

public void showKeyboard() {  
      //调用系统输入法  
    InputMethodManager inputManager = (InputMethodManager) editText  
            .getContext().getSystemService(Context.INPUT_METHOD_SERVICE);  
    inputManager.showSoftInput(editText, 0);  
}  

//在dialog.show()后,
dialog.show();  
Timer timer = new Timer();  
timer.schedule(new TimerTask() {  
    @Override  
    public void run() {  
        dialog.showKeyboard();  
    }  
}, 300);  

22, Android L版本以后, style.xml能做什么

style.jpg

23, 几行代码通知系统自动安装apk

//apk文件的本地路径  
File apkfile = new File(apkFilePath);  
//会根据用户的数据类型打开android系统相应的Activity。  
Intent intent = new Intent(Intent.ACTION_VIEW);  
//设置intent的数据类型是应用程序application  
intent.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");  
//为这个新apk开启一个新的activity栈  
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
//开始安装  
startActivity(intent);  
//关闭旧版本的应用程序的进程  
android.os.Process.killProcess(android.os.Process.myPid());

24, Android5.0改变AlertDialog的样式

在xml中定义一个主题:

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <!-- Used for the buttons -->
    <item name="colorAccent">#FFC107</item>
    <!-- Used for the title and text -->
    <item name="android:textColorPrimary">#FFFFFF</item>
    <!-- Used for the background -->
    <item name="android:background">#4CAF50</item>
</style>

样式如下图所示:


Paste_Image.png

在创建的对话框的时候,这样创建就可以了。

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyAlertDialogStyle);
builder.setTitle("AppCompatDialog");
builder.setMessage("Lorem ipsum dolor...");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Cancel", null);
builder.show();

这样的方法是每个地方使用的时候,都要在构造函数传我们的这个Dialog的Theme,我们也可以全局的定义对话框的样式。

<style name="MyTheme" parent="Base.Theme.AppCompat.Light">
    <item name="alertDialogTheme">@style/MyAlertDialogStyle</item>
    <item name="colorAccent">@color/accent</item>
</style>

在我们的AndroidManifest.xml文件中声明application或者activity的时候设置theme为MyTheme即可,不过需要注意的一点是,我们的Activity需要继承自AppCompatActivity。

25, 当从 Recent Apps 界面划掉一个程序时

service会触发onTaskRemoved()这个方法
假如你当前启动service的方式是bindService , 那么就不会触发 , 必须要用startService;
当然 , 你也可以两种方式一起开启;
在做后台下载的时候遇到了这个问题 , 搜索了很久才解决的 , 而且用的是Google
http://stackoverflow.com/questions/24127923/service-ontaskremoved-not-called-if-started-with-bindservice
嗯 , 做一下笔记

26, 查看默认debug的签名

keytool -v -list -keystore C:\Users\Administrator\.android\debug.keystore

27, TextView文字设置竖向显示

1.属性介绍:
安卓中XML属性有 android:ems="x"
x表示一行显示的字符个数。
2.具体的设置
第一步:设置控件宽度为包裹内容 android:layout_width="wrap_content"
第二步:设置每行显示一个字符 android:ems="1"

28, 获取当前是否有网络

添加权限 :

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

代码如下 :

ConnectivityManager connectivityManager = (ConnectivityManager)
                getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable()) {
    //网络已打开
    } else {
    //网络已关闭
}

29, 发送一个系统广播通知手机有图片更新

保存好图片之后 , 有时候在本地相册查看不了 , 其实是要发送一条广播去通知手机有图片更新 , 代码如下 :

Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.fromFile(new File(filePath));
intent.setData(uri);
sendBroadcast(intent);

30, 重启APP :

 Intent intent = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());
 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 startActivity(intent);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容