Android 开发经验Tips(3)
16lz
2021-01-23
每次更新一打开发小技巧O(∩_∩)O~
1. 设置Textview中文字与图片的padding值
android:drawablePadding="10dp"
2. 监听SharedPreferences改变
- registerOnSharedPreferenceChangeListener
sp1.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { // do any thing you want }});
3. TextView自动换行文字,排版混乱的解决方法
将textview中的字符全角化
public static String ToDBC(String input) { char[] c = input.toCharArray(); for (int i = 0; i< c.length; i++) { if (c[i] == 12288) { c[i] = (char) 32; continue; }if (c[i]> 65280&& c[i]< 65375) c[i] = (char) (c[i] - 65248); } return new String(c); }
或者直接使用word等工具转换所选文字
4. Fragment中的onActivityResult不被调用的解决办法
- 检查Fragment中的startActivityForResult的调用方式。请确保不要使用getActivity().startActivityForResult方法,而是要直接使用startActivityForResult
- 在基类BaseActivity继承FragmentActivity,重写onActivityResult方法
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { FragmentManager fm = getSupportFragmentManager(); int index = requestCode >> 16; if (index != 0) { index--; if (fm.getFragments() == null || index < 0 || index >= fm.getFragments().size()) { Log.w(TAG, "Activity result fragment index out of range: 0x" + Integer.toHexString(requestCode)); return; } Fragment frag = fm.getFragments().get(index); if (frag == null) { Log.w(TAG, "Activity result no fragment exists for index: 0x" + Integer.toHexString(requestCode)); } else { handleResult(frag, requestCode, resultCode, data); } return; } } /** * 递归调用,对所有子Fragement生效 * * @param frag * @param requestCode * @param resultCode * @param data */ private void handleResult(Fragment frag, int requestCode, int resultCode, Intent data) { frag.onActivityResult(requestCode & 0xffff, resultCode, data); List frags = frag.getChildFragmentManager().getFragments(); if (frags != null) { for (Fragment f : frags) { if (f != null) handleResult(f, requestCode, resultCode, data); } } }
5. 设置编辑框不可编辑
etPhoneNum.setFocusable(false); etPhoneNum.setFocusableInTouchMode(false);
6. ScrollView不满全屏留白问题
为ScrollView添加如下属性即可:
android:fillViewport="true"
7. 动态修改TextView的图片
setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom)
如果想手动设置大小的话就要用setCompoundDrawables,事先要给Drawable设置setBounds。
如果按照原有比例大小显示图片就使用setCompoundDrawablesWithIntrinsicBounds
8. 在当前页关闭上一页的activity
在要关闭的某个activity设置单例
public static PreviousActivity previousActivity; public static PreviousActivity getInstance() { return previousActivity; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); previousActivity = this; }
在当前页拿到实例调用finish
PreviousActivity.getInstance().finish();
9. 在fragment调用所在的activity的方法
MainActivity mainActivity = (MainActivity) getActivity(); mainActivity.done();
10. SharedPreferences也可以存储集合
public static Set getValueSet(Context context, String key){ SharedPreferences prefs = getNewSharedPreferences(context); return prefs.getStringSet(key, null); } public static void setValueSet(Context context, String key, Set value){ Editor editor = getNewSharedPreferences(context).edit(); editor.putStringSet(key, value); editor.commit(); }
这里putStringSet
修改数据,需要做一层额外的浅拷贝,然后对拷贝后的 Set
进行修改,再把结果通过 putStringSet
写回到 SharedPreferences
Set list = getValueSet(Config.KEY);Set result = new HashSet<>(list);if (true) { result.add(a);} else { result.remove(a);}setValueSet(Config.KEY, result);
11. fragment隐藏或者显示数据刷新
@Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); if (!hidden){ initData(); }else{ ... } }
new frament对象初始化数据时仍然需要在onCreateView等方法中进行
12. 更新 Android 6.0 之后无法找到 org.apache.http 包
在gradle中添加如下代码
android { useLibrary 'org.apache.http.legacy'}
其他相关文章
Android 开发经验Tips(1) http://www.jianshu.com/p/c2c8ccd53636
Android 开发经验Tips(2) http://www.jianshu.com/p/21bc9c2a6563
更多相关文章
- Android AndroidManifest.xml 四大组件注册方法
- Android中onClick的四种实现方法
- android中获取IP的方法
- Android NDK 工具链的使用方法(Standalone Toolchain)
- 使用反射获取Android中隐藏的方法
- android 按钮效果的两种实现方法
- Android设置桌面背景图片的方法
- android launcher使hotseat item显示标题文字
- [置顶] 找到一个在Android上创建阻塞式模态对话框的方法