Android 笔记.代码段

本文总结了多个实用的Android开发技巧,包括线程优先级设置、IntentService使用、防止按钮重复点击、TextView跑马灯效果、解决点击穿透问题、适配不同Android版本、获取View尺寸、页面跳转动画、调整Dialog大小及解决WebView中文乱码等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文出处:http://blog.youkuaiyun.com/mmmlllii/article/details/8226030

附1.后台线程设置优先级 Process.setThreadPriority() 
附2.耗时的广播,使用IntentService处理繁重任务 

如果onReceive()衍生了一个线程并且返回,则包涵新线程在内的整个进程都被会判为失活状态(除非进程内的其它应用程序组件仍处于活跃状态),于是它就有可能被杀掉。这个问题的解决方法是令onReceive()启动一个新服务,并用其完成任务,于是系统就会知道进程中仍然在处理着工作。

int THREAD_PRIORITY_AUDIO //标准音乐播放使用的线程优先级
int THREAD_PRIORITY_BACKGROUND //标准后台程序
int THREAD_PRIORITY_DEFAULT // 默认应用的优先级
int THREAD_PRIORITY_DISPLAY //标准显示系统优先级,主要是改善UI的刷新
int THREAD_PRIORITY_FOREGROUND //标准前台线程优先级
int THREAD_PRIORITY_LESS_FAVORABLE //低于favorable
int THREAD_PRIORITY_LOWEST //有效的线程最低的优先级
int THREAD_PRIORITY_MORE_FAVORABLE //高于favorable
int THREAD_PRIORITY_URGENT_AUDIO //标准较重要音频播放优先级
int THREAD_PRIORITY_URGENT_DISPLAY //标准较重要显示优先级,对于输入事件同样适用



1.onCLick

if (System.currentTimeMillis() - mLastClickTime < 300) {  
    // in order to avoid user click bottom too quickly  
    return;  
}  
  
if (!button.isEnabled())  
    return;  
  
mLastClickTime = System.currentTimeMillis();  
mLastButtonId = button.getId(); 

这样写,在一般场景下会更严谨,防止一些重复点击之类的操作,可以根据自己的情况,在进行添加.

2.TextView跑马灯

android:ellipsize="marquee"  
android:marqueeRepeatLimit="marquee_forever"  
android:singleLine="true"  

这个跑马灯需要在获取焦点的时候才能有效果.

不获取焦点也有跑马灯效果.

自定义一个TextView,它继承TextView,并且重写isFocuse()方法,让它永远返回true.


3.SlidingDrawer 点击事件传递到下面布局的问题.

今天看到一个,在使用了SlidingDrawer ,open状态下,仍然能触发抽屉覆盖的View点击事件.  

解决办法.在content 添加 android:clickable="true" 属性. 猜测应该是因为 默认的content没有任何事件,就传递到下面.

4.Android 4.0 HttpURLConnection 下载失败问

http://blog.youkuaiyun.com/mmmlllii/article/details/8000081


5.View高度获取

在OnCreate()方法中获取控件的高度和宽度,需要使用的一个观察者(否则得到的height, paddingTop等数据为0,因onCreate()执行时,控件还未加载完成)

ViewTreeObserver vto = imageview.getViewTreeObserver();
        vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

            @Override
            public void onGlobalLayout() {
                // 此句若不执行,不影响控件宽高的获取结果,但是当前的onGlobalLayout()会执行多次,执行此句,当前方法只会执行一次
                imageview.getViewTreeObserver().removeGlobalOnLayoutListener(
                        this);
                Log.i("TAG", imageview.getMeasuredHeight()
                        + " -- - " + imageview.getHeight());
            }
        });

6.页面跳转动画 android:minSdkVersion="8"

Intent intent = new Intent(TransitionActivity.this, DeviceActivity.class);
                startActivity(intent);
                finish();
                //页面切换 -- 淡入淡出效果
                overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);

7. Dialog宽度设置.

在做项目中,有时候会遇到Dialog不受控制的问题.可以通过以下代码实现. 但是有个问题就是不够灵活.

WindowManager m = getWindowManager();                
Display d = m.getDefaultDisplay();  //为获取屏幕宽、高                          
LayoutParams p = getWindow().getAttributes();  //获取对话框当前的参数值       
    
Point outSize = new Point();    
d.getSize(outSize);    
    
Log.i(TAG, outSize.x + "-" + outSize.y);    
p.width = (int) (outSize.x * 0.6);        
p.alpha = 1.0f;              
p.dimAmount = 0.7f;      
p.gravity = Gravity.CENTER;    
getWindow().setAttributes(p);     


8.Android 4.0 WebView loadData 加载中文乱码

之前使用过loadData这种方式加载Html代码段.今天写一个功能需要使用,但是在我的手机(4.04)上却出现了中文乱码.无论如何设置编码,都无法发解决.
baidu一下,解决办法是 使用loadDataWithBaseURL.

9.Android ListView 点击后刷新.
<item name="android:choiceMode">singleChoice</item> 
这个标识ListView 为单选的属性.今天在开发的时候,发现点击完后,总会引发item里的图片再次刷新. 刚开始以为是Adapter的问题...  找了半天,去掉这个属性就好了.

10.Webview--让加载进来的页面自适应手机屏幕分辨率居中显示.

10让Webview加载的页面居中显示有我知道的俩种方法

第一种:

[java] 
WebSettings settings = webView.getSettings(); 
settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); 
LayoutAlgorithm是一个枚举用来控制页面的布局,有三个类型:

1.NARROW_COLUMNS:可能的话使所有列的宽度不超过屏幕宽度

2.NORMAL:正常显示不做任何渲染

3.SINGLE_COLUMN:把所有内容放大webview等宽的一列中

用SINGLE_COLUMN类型可以设置页面居中显示,页面可以放大缩小,但这种方法不怎么好,有时候会让你的页面布局走样而且我测了一下,只能显示中间那一块,超出屏幕的部分都不能显示。

 

第二种方法:

[java] 
//设置加载进来的页面自适应手机屏幕 
        settings.setUseWideViewPort(true); 
        settings.setLoadWithOverviewMode(true); 
第一个方法设置webview推荐使用的窗口,设置为true。第二个方法是设置webview加载的页面的模式,也设置为true。

这方法可以让你的页面适应手机屏幕的分辨率,完整的显示在屏幕上,可以放大缩小。
推荐使用第二张方法


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值