Android 开发经验Tips(4)

作者: 燊在锦官城 | 来源:发表于2017-04-14 17:01 被阅读184次

    每次更新一打开发小技巧O(∩_∩)O~

    1. 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion

    理想上,在稳定状态下三者的关系应该更像这样:

    minSdkVersion (lowest possible) <= 
        targetSdkVersion == compileSdkVersion (latest SDK)
    

    用较低的 minSdkVersion 来覆盖最大的人群,用最新的 SDK 设置 target 和 compile 来获得最好的外观和行为。

    2. notification.setLatestEventInfo在6.0被弃用的替代方法

    Notification.Builder builder = new Notification.Builder(mContext);
            builder.setContentTitle(title);
            builder.setContentText(text);
            builder.setSmallIcon(R.drawable.icon);
            builder.setContentIntent(pendingIntent);
            builder.setWhen(System.currentTimeMillis());
            builder.setVibrate(vibrate);
            Notification notification = builder.getNotification();
            notification.flags = Notification.FLAG_AUTO_CANCEL;
            notification.defaults |= Notification.DEFAULT_VIBRATE;
    ...
    

    3. FloatMath.sqrt()找不到

    改为 (float)Math.sqrt()
    

    4. LocalBroadcastManager

    Android v4 兼容包提供android.support.v4.content.LocalBroadcastManager工具类,帮助大家在自己的进程内进行局部广播发送与注册,使用它比直接通过sendBroadcast(Intent)发送系统全局广播有以下几点好处。
    1因广播数据在本应用范围内传播,你不用担心隐私数据泄露的问题。
    2不用担心别的应用伪造广播,造成安全隐患。
    3相比在系统内发送全局广播,它更高效。

    广播注册:

    LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(getActivity());
       IntentFilter filter = new IntentFilter();
       filter.addAction(ACTION);
       myBroadcastReciver = new MyBroadcastReciver();
       localBroadcastManager.registerReceiver(myBroadcastReciver, filter);
    

    广播发送:

       Intent intent = new Intent();
       intent.setAction(SaleLeftFragment.ACTION);
       intent.putExtra(TAG, data);
       LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
    

    使用注意,请关注以下几点:
    1).LocalBroadcastManager注册广播只能通过代码注册的方式。
    2).LocalBroadcastManager注册广播后,一定要记得取消监听。
    3).重点的重点,使用LocalBroadcastManager注册的广播,您在发送广播的时候务必使用LocalBroadcastManager.sendBroadcast(intent);否则您接收不到广播。

    5. 设置dialog全屏的方法

            // 设置全屏
            WindowManager.LayoutParams p = this.getWindow().getAttributes();
            // 设置为屏幕宽高
            p.width = UtilPhoneParam.screenWidth;
            p.height = UtilPhoneParam.screenHeight;
            this.getWindow().setAttributes(p);
    

    6. 使用RelativeLayout 水平居中等分

                <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent" >
    
                    <Button
                        android:id="@+id/hello"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentLeft="true"
                        android:layout_toLeftOf="@+id/view"
                        android:text="First" />
    
                    <View
                        android:id="@+id/view"
                        android:layout_width="0dp"
                        android:layout_height="1dp"
                        android:layout_centerHorizontal="true" />
    
                    <Button
                        android:id="@+id/world"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentRight="true"
                        android:layout_alignTop="@+id/hello"
                        android:layout_toRightOf="@+id/view"
                        android:text="Second" />
    
                </RelativeLayout>
    

    7. 在代码中修改Shape的solid属性的color值

    GradientDrawable drawable =(GradientDrawable)view.getBackground();
    drawable.setColor(getResources().getColor(color));
    

    8. 使用shape来设置列表分割线

    <?xml version="1.0" encoding="utf-8"?>
    <inset xmlns:android="http://schemas.android.com/apk/res/android"
        android:insetLeft="13dp"
        android:drawable="@color/white_dddddd">
    </inset>
    

    注意列表背景色background的设置

    9. 依赖排除

    排除com.kevin:crop:1.0.2中的v7包,使用项目app中引入的v7

        compile('com.kevin:crop:1.0.2') {
            exclude group: 'com.android.support', module: 'appcompat-v7'
        }
    

    10. 设置某个方向上TextView的drawable

    tvText.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(R.drawable.icon),null,null,null);
    

    11. android:clipToPadding的使用

    主要用途:常常用于paddingTop,假设 内部有个属性设置了paddingTop,但是滑动的时候paddingTop的空间无法一起滑动则使用该属性
    如设置

    Android:clipToPadding=false
    

    可以使列表的paddingTop跟随着一起滑动。

    12. Android应用中返回键的监听及处理

    1. super.onBackPressed()会自动调用finish()方法,关闭 当前Activity,若要屏蔽Back键盘,注释该行代码即可
            @Override  
            public void onBackPressed() {  
                super.onBackPressed();  
                System.out.println("按下了back键   onBackPressed()");         
            }  
              
    
    1. onKeyDown 返回值表示:是否能完全处理该事件在此处返回false,所以会继续传播该事件.在具体项目中此处的返回值视情况而定.
    @Override  
            public boolean onKeyDown(int keyCode, KeyEvent event) {  
                if ((keyCode == KeyEvent.KEYCODE_BACK)) {  
                     System.out.println("按下了back键   onKeyDown()");   
                     return false;  
                }else {  
                    return super.onKeyDown(keyCode, event);  
                }  
                  
            }  
    

    其他相关文章

    Android 开发经验Tips(1) http://www.jianshu.com/p/c2c8ccd53636
    Android 开发经验Tips(2) http://www.jianshu.com/p/21bc9c2a6563
    Android 开发经验Tips(3) http://www.jianshu.com/p/79c417568075

    相关文章

      网友评论

        本文标题:Android 开发经验Tips(4)

        本文链接:https://www.haomeiwen.com/subject/zmxgattx.html