每次更新一打开发小技巧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<Fragment> 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<String> getValueSet(Context context, String key){
SharedPreferences prefs = getNewSharedPreferences(context);
return prefs.getStringSet(key, null);
}
public static void setValueSet(Context context, String key, Set<String> value){
Editor editor = getNewSharedPreferences(context).edit();
editor.putStringSet(key, value);
editor.commit();
}
这里putStringSet
修改数据,需要做一层额外的浅拷贝,然后对拷贝后的 Set
进行修改,再把结果通过 putStringSet
写回到 SharedPreferences
Set<String> list = getValueSet(Config.KEY);
Set<String> 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
网友评论