前言
最近两个月,一直在做新项目,期间遇到了不少问题,在此备忘一下吧
问题汇总
1. Scrollview嵌套RecycleView后,滑动卡顿的问题
1 | recyclerView.setNestedScrollingEnabled(false); |
当然也可以这样解决:
1 | LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false) { |
2. 自定义actionbar去掉左右空白
原因
actionbar样式中默认有两个属性contentInsetStart/contentInsetEnd分别控制左右边距,默认是16dp
解决方案
- 方法1
1
2
3
4
5
6
7
8
9
10
11
12
13
14View view = LayoutInflater.from(this).inflate(R.layout.custom_actionbar,null);
ActionBar.LayoutParams layoutParams = new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT,
ActionBar.LayoutParams.MATCH_PARENT);
layoutParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.CENTER_HORIZONTAL;
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setCustomView(view, layoutParams);
ViewParent parent = view.getParent();
if (parent instanceof Toolbar) {
// 解决系统actionbar左右留有16dp空白问题
((Toolbar) parent).setContentInsetsAbsolute(0, 0);
} - 方法2
经过网上搜索得出答案, 原来需要重写为0dp即可解决。
1 | <item name="contentInsetStart"> 和 <item name="contentInsetEnd"> |
3. 隐藏Listview和RecyclerView 滑动边界的阴影
1 | android:overScrollMode="never" |
4. RelativeLayout @id/ 和@+id/的区别
1 | <Button |
xml的解析是从上往下扫描的,如果id为btn_menu_scores的View在当前View下方,则会报如下错误:
No resource found that matches the given name (at ‘layout_alignLeft’ with value ‘@id/btn_menu_scores’)
此时把@id/改成@+id/就可以了
1 | <Button |
5. EditText输入表情
- 方法1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16CharSequence charSequence = Html.fromHtml(html,
new ImageGetter() {
public Drawable getDrawable(String source) {
// TODO Auto-generated method stub
Drawable drawable = getResources().getDrawable(
Integer.parseInt(source));
// 设置drawable的大小。设置为实际大小
drawable.setBounds(0, 0,
drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight());
return drawable;
}
}, null);
textView.setText(charSequence); - 方法2
1
2
3
4
5
6
7
8
9
10
11Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
images[randomId]);
// 得到SpannableString对象,主要用于拆分字符串
SpannableString spannableString = new SpannableString("image");
// 得到ImageSpan对象
ImageSpan imageSpan = new ImageSpan(MainActivity.this, bitmap);
// 调用spannableString的setSpan()方法
spannableString.setSpan(imageSpan, 0, 5,
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
// 给EditText追加spannableString
editText.append(spannableString);
6. ScrollView嵌套RecyclerView自动滑动问题
这貌似是RecyclerView的一个Bug,具体请看这里:
https://issuetracker.google.com/issues/37120277
ScrollView里面套一个RecyclerView使用时,会发现当RecyclerView填充满数据后,ScrollView会自动滑动到RecyclerView所在位置。原因是RecyclerView抢占了焦点,解决方案当然也多种多样了,能够阻止RecyclerView获取焦点即可。因为我的布局中是ScrollView包含LinearLayout,LinearLayout又包含RecyclerView,所以在LinearLayout中添加如下属性即可
1 | android:descendantFocusability="blocksDescendants" |
7. SharePreference升级兼容问题
1 | public static void setSettingTextSize(int time) { |
8. IllegalStateException: Can not perform this action after onSaveInstanceState
- 解决方法1
重写activity onSaveInstanceState方法,并且不要调用父类方法
1 |
|
- 解决方法2
重写activity onSaveInstanceState方法,并且在调用父类方法之前,随意传一个参数,如下
1 |
|
http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html
9. 获取java 泛型T对应class
1 | Class<T> entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; |
参考:http://blog.csdn.net/u013692310/article/details/53706283
10. 布局Preview失效
解决方案:删除工程根目录下build目录,然后重新build一次即可。
11. 动态设置layout_marginTop
1 | ViewGroup.LayoutParams params = mBackView.getLayoutParams(); |