android一些坑与小技巧

Android的一些坑

1、 LinearLayout中的orientation & gravity

  • 当LinearLayout布局中设置orientation=”vertical”属性:如果子组件设置layout_gravity=”center_vertical”是无效的;
  • 如果LinearLayout中设置gravity=”center_vertical”是可以起到作用将子组件垂直居中的。水平布局同理

2、获取xml资源文件中定义的数组

getResources().getStringArray(R.array.city)

3、列表里的CheckBox(不理解)

4、布局里的ListView|GridView抢占焦点

Scrollview里嵌套Gridview,Gridview抢焦点问题(显示布局的时候老是先从Gridview的第一个item显示)
解决方法:在获取inflate view之后,代码给GridView.setFocusable(false)就可以了

5、去除Listview滚动背景变黑,item点击默认背景

listview默认背景和系统窗口一样是透明的,如果给listview加上背景图片,或者背景颜色时,滚动时listview会黑掉,因为滚动时,列表里面的view重绘用的依旧是系统默认的透明色,颜色值为#FF191919
解决办法:
- 调用listview的setCacheColorHint(0),颜色值设置为0
- 设置xml文件中listView的属性 Android:cacheColorHint=”#00000000”,滚动时,重绘View的时候就不会有背景颜色。
android:listSelector=”#00000000”
进行上面的设置之后,ListView点击item时就没有任何现象了

6、开启Android系统程序设置页面

Intent intent = new Intent();
intent.setClassName("com.android.settings","com.android.settings.ManageApplications");
intent.setAction("android.intent.action.MAIN");
try {
    startActivity(intent);
} catch (Exception e) {
    e.printStackTrace();
}  

7、禁止EditText自动获取布局焦点

解决之道:在EditText的父级控件中找一个,设置成
android:focusable=”true”
android:focusableInTouchMode=”true”

8、RadioButton设置默认选中

如果RadioGroup中设置默认选中一个RadioButton后,在选择时会选中两个的问题
解决方法:
不需要设置RadioButton的默认选中, 这样会使RadioButton一直处于选中状态.
把radioButton.setCheck(true);
更改为radioGroup.check(radioButton.getId());

9、实现ImageView宽度填满屏幕,高度自适应

1、自定义ImageView重写View的onMeasure方法

public class ResizableImageView extends ImageView {  

    public ResizableImageView(Context context) {  
        super(context);  
    }  

    public ResizableImageView(Context context, AttributeSet attrs) {  
        super(context, attrs);  
    }  

    @Override  
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){  
        Drawable d = getDrawable();  

        if(d!=null){  
            // ceil not round - avoid thin vertical gaps along the left/right edges  
            int width = MeasureSpec.getSize(widthMeasureSpec);  
            //高度根据使得图片的宽度充满屏幕计算而得  
            int height = (int) Math.ceil((float) width * (float) d.getIntrinsicHeight() / (float) d.getIntrinsicWidth());  
            setMeasuredDimension(width, height);  
        }else{  
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);  
        }  
    }  
}  

2、设置ImageView的属性

//宽度填满屏幕
android:layout_width=”match_parent”
android:scaleType=”fitXY”
android:layout_height=”wrap_content”
//保持比例,一定要设置
android:adjustViewBounds=”true”

10、主题文件设置的颜色

http://blog.csdn.net/chengtaoyan/article/details/79401751

11、Android GridView组件如何去除四周的空隙

设置GridView的android:listSelector属性 android:listSelector=”@null” 设置后四周空隙就消除了

12、隐藏ListView滚动条

setScrollbarFadingEnabled(true);
//不活动的时候隐藏,活动的时候显示

setVerticalScrollBarEnabled(true);
//不活动的时候隐藏,活动的时候也隐藏

13、android:parentActivityName

一个Activity在manifet里声明了Android:parentActivityName;这时候通过Activity左上角的返回按钮点击返回,启动声明的父Activity,并且总会先调用父Activity的OnDestroy方法,点击子Activity的左上角返回按钮的时候,调用逻辑如下:
MainActivity.onDestroy();
MainActivity.onCreate(null);
MainActivity.onStart();
解决方案是: 为设置MainActivity属性android:launchMode=singleTop

顺便脑补android:parentActivityName的作用,就是为了左上角给子Activity加一个返回按钮,具体信息如下:
Android 4.1 提高性能、增强用户体验
  App 栈导航:通过设置 android:parentActivityName 改变回退栈的内容,如果栈中没有 parentActivity,则合成栈,通过
onPrepareNavigateUpTaskStack() 改变 parentActivity 中的内容。

14、ScrollView 显示不全

有时候 ScrollView 嵌套 LinearLayout 时会有显示不全的情况,这个时候应该看看 ScrollView 的父布局是不是用的 CoordinatorLayout。
当外部用 CoordinatorLayout 时,内部应该用 NestedScrollView ,不然会产生不确定的 bug。
同样在 CoordinatorLayout 内部使用 ViewPager & TabLayout 来显示不同的 Fragment 时,如果 Fragment 内使用 ScrollView 也会有显示不全的情况。

15、OOM 内存溢出

当你在测试应用时,如果在部分机型上运行正常,而在部分机型上出现 OOM ,除了对应用再次做各种优化外,你可以在配置文件中加上:

16、Toolbar 左侧有空白(内边距)

引起原因:
在V7包下,Wiget.AppCompat.Toolbar的parent中,contentInsetStart(默认的有值)这个属性就是引起自定义ActionBar不能完全填充的原因。

  

然后在AppStyle中(一定在这,单独在Toolbar的style中设置不起作用)重写Toolbar的属性:

"toolbarStyle">@style/ClubToolbar  

17、ListView、RecyclerView、ScorllView、Viewpager 等等,取消顶部半圆形的拉力纹

android:overScrollMode=”never”

18、.9图片

左边和上边的黑边表示拉伸区域。右边和下边的黑边表示填充区域

你可能感兴趣的:(IT,android)