Android 开发经验Tips(3)

作者: 燊在锦官城 | 来源:发表于2016-12-27 15:49 被阅读205次

每次更新一打开发小技巧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

相关文章

网友评论

    本文标题:Android 开发经验Tips(3)

    本文链接:https://www.haomeiwen.com/subject/gzcevttx.html