Android开发中那些坑爹的bug

1,真机测试中,字体变大挤出边框,原因是测试机调大了字体,需在activity中设置字体不随系统的字体改变而改变。
    在baseActivity中加入:

    @Override  
    public Resources getResources() {  
        Resources res = super.getResources();    
        Configuration config=new Configuration();    
        config.setToDefaults();    
        res.updateConfiguration(config,res.getDisplayMetrics() );  
        return res;  
    }  



2,ListView被ScrollView包裹导致listview行数显示不全。

加入方法使Listview有多长显示多长:

/**
* 设置Listview的高度
*/
public void setListViewHeight(ListView listView) {  
   ListAdapter listAdapter = listView.getAdapter();   
   if(listAdapter == null) {  
       return;  
   }  
   int totalHeight = 0;  
   for (int i = 0; i < listAdapter.getCount(); i++) {  
       View listItem = listAdapter.getView(i, null, listView);  
       listItem.measure(0, 0);  
       totalHeight += listItem.getMeasuredHeight();  
   }  
   ViewGroup.LayoutParams params = listView.getLayoutParams();  
   params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));  
   listView.setLayoutParams(params); 
}



后来发现子listview的TextView显示多行文本时,计算就不准确了,在网上找到了其他的解决方法:


在自定义listview继承listview,实现onMeasure方法:

[java]  view plain  copy
  1. @Override    
  2.    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {    
  3.        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,  MeasureSpec.AT_MOST);    
  4.        super.onMeasure(widthMeasureSpec, expandSpec);    
  5.    }    

测试了一下,发现这个方法是可行的。


3,布局页面中引用drawable中的xml画的虚线,在模拟器和真机中显示为实线。

<?xml version="1.0" encoding="utf-8"?>  
<shape xmlns:android="http://schemas.android.com/apk/res/android"  
    android:shape="line" >  
  
    <stroke  
        android:dashGap="4dip"  
        android:dashWidth="10dip"  
        android:width="1dip"  
        android:color="@android:color/darker_gray" />  
    <size android:height="2dip"/>   
</shape>  



解决方法,在AndroidManifest中关掉硬件加速。

android:hardwareAccelerated="false"




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值