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不能完全填充的原因。
<style name="ClubToolbar" parent="Widget.AppCompat.Toolbar">
<item name="contentInsetStart">0dp</item><!-- 设置该属性解决空白部分-->
</style>
然后在AppStyle中(一定在这,单独在Toolbar的style中设置不起作用)重写Toolbar的属性:
<item name="toolbarStyle">@style/ClubToolbar</item>
17、ListView、RecyclerView、ScorllView、Viewpager 等等,取消顶部半圆形的拉力纹
android:overScrollMode=”never”
18、.9图片
左边和上边的黑边表示拉伸区域。右边和下边的黑边表示填充区域