Android开发中那些相见恨晚的小技巧(一)

前言

放心,以下所提到的都已经在项目中被证实有效,可安心食用。

RecyclerView滑动时FAB自动隐藏

    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
                @Override
                public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                    if (dy > 0 || dy < 0 && fab.isShown()){
                        fab.hide();
                    }
                }

                @Override
                public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                    if(newState == RecyclerView.SCROLL_STATE_IDLE){
                        fab.show();
                    }
                    super.onScrollStateChanged(recyclerView, newState);
                }
            });

单独开启某个Activity时禁止其在多任务中显示

在标签中添加属性excludeFromRecents,并设置为true.

    <activity
         android:name=".DemoActivity"
         android:excludeFromRecents="true"/>

布局中存在ScrollView,打开页面后没有聚焦到布局顶部的问题

在ScrollView的上级View中设置属性:

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

设置EditText的编辑状态

    /**
         * 设置EditText是否可编辑
         * @param editText
         * @param enable
         * @param inputType
         */
        private void setEditTextEnable(EditText editText , boolean enable , int inputType) {
            editText.setFocusable(enable);
            editText.setFocusableInTouchMode(enable);
            editText.setLongClickable(enable);
            editText.setInputType(inputType);
        }

提醒:如果你在布局文件中设置了android:digits属性,如果你重新设置了InputType会导致digits失效。

设置windowSoftInputMethod不生效

在布局文件的根布局中添加如下属性:

    android:fitsSystemWindows="true"

给View添加动画

    //view.animator()会返回ViewPropertyAnimator对象,其内部是通过ValueAnimator进行实现的。
    //不调用start()方法也是可以执行动画的。执行动画的时机是在下一帧刷新的时候。
    //原理是因为scaleX()方法里面已经添加了startAnimator()方法
    //如果调用start()那么会先去cancel()掉已经添加的callbacks(为一个Runnable,里面有startAniamtion()方法)
    textView.animate().scaleX(1.5f).scaleY(1.5f).alpha(0.5f).setDuration(2000).start();

显示Emoji

    /**
         * 根据unicode值生成表情
         * 需要把U+替换成0x
         * @param unicode
         * @return
         */
        public static String getEmojiByUnicode(int unicode){
            return new String(Character.toChars(unicode));
        }

举个例子:

我们要显示这个表情:

调用上面的方法,我们只需要把U+改成0x就行了。

    public class MainActivity extends AppCompatActivity {

        private TextView mTextView;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mTextView = findViewById(R.id.text_view);
            String laugh = getEmojiByUnicode(0x1F600);
            mTextView.setText(laugh);
        }


        /**
         * 根据unicode值生成表情
         * 需要把U+替换成0x
         * @param unicode
         * @return
         */
        public static String getEmojiByUnicode(int unicode){
            return new String(Character.toChars(unicode));
        }

    }

最终显示的效果:

咦,为什么显示的表情和上面的都不一样啊?因为我的测试设备系统是7.1,那个时候安卓的表情就是这个样子的。如果你想把表情样式统一的话,可以使用谷歌提供的EmojiCompact或者用图片来替换。

一个Android Studio快捷键

打开最近文件:

windows: Ctrl + E

mac: Command + E

最后

这是第一期,后面我会继续总结的。

敬请期待!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值