前言
放心,以下所提到的都已经在项目中被证实有效,可安心食用。
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
最后
这是第一期,后面我会继续总结的。
敬请期待!