android 模拟点击时间开发中点击菜单切出应用时,为啥app为白色,无法显示正常内容

场景:android开发中,经常看到好几个UI界面底部都有一个相同的菜单。点击对应菜单项时,会显示对应的页面,点击某个按钮时又会显示对应页面。分析:对于初学者来说可能会以为是Activity跳转了,当然你要这样做也可以实现了(不推荐这样做哦)。为什么不能用Activity跳转呢?如果这样用,每个Acitity相同代码量会很多,而且跳转都是要刷新UI界面的。体验速度就不用说了,可想而知!那么该用什么呢?我们这时就要用Fragment(Fragment的简介?可以去看另一篇文章)。用它就是为了不重复的刷新(也就是不重新实例化),要刷新时才从新刷新(重新实例化)。实现:先说一下大概步骤:准备工作: 先创建一个主Acitity和对应的布局文件(写好底部菜单UI)第一步:创建4个继承自android.support.v4.app.Fragment的java文件,并一起创建对应的布局文件/* & 1):在mainActivity.java文件同级目录新建名为fragment的目录 & &(用来放4个java文件) & 2):新建文件时,一定要继承自Fragment(是android.support.v4包下的) & 3):创建对应的布局文件。 & 4):为fragment文件绑定布局文件,通过重写方法onCreateView方法 */第二步:添加所有Fragment到管理类去。(添加前先实列化好)第三步:要能过点击按钮显示不同的Fragment当然得先监听按钮事件第四步:创建一个继承自FragmentActivity的类,并定义一个方法来实现Fragment页面间的切换第五步:在当前Activity中创建一个方法,调用内部类的页面切换方法。并保存当前Tag第六步:fragment中控制页面切换(去对应Java文件中设置监听事件,调用switchFragment方法)主Activity的布局文件:&?xml&version=&1.0&&encoding=&utf-8&?&
&RelativeLayout&xmlns:android=&http://schemas.android.com/apk/res/android&
&&&&android:layout_width=&match_parent&
&&&&android:layout_height=&match_parent&
&&&&android:background=&#cccccc&&
&&&&&!--&内容(显示各种fragment页面)&--&
&&&&&RelativeLayout
&&&&&&&&android:id=&@+id/main_content&
&&&&&&&&android:layout_width=&match_parent&
&&&&&&&&android:layout_height=&wrap_content&&
&&&&&/RelativeLayout&
&&&&&!--&底部按钮&--&
&&&&&LinearLayout
&&&&&&&&android:layout_width=&match_parent&
&&&&&&&&android:layout_height=&35dp&
&&&&&&&&android:background=&#ffffff&
&&&&&&&&android:gravity=&center&
&&&&&&&&android:layout_alignParentBottom=&true&
&&&&&&&&android:orientation=&horizontal&&
&&&&&&&&&TextView
&&&&&&&&&&&&android:id=&@+id/main&
&&&&&&&&&&&&android:layout_width=&0dp&
&&&&&&&&&&&&android:layout_weight=&1&
&&&&&&&&&&&&android:layout_height=&35dp&
&&&&&&&&&&&&android:gravity=&center&
&&&&&&&&&&&&android:text=&首页&
&&&&&&&&&&&&android:textColor=&#000fff&/&
&&&&&&&&&TextView
&&&&&&&&&&&&android:id=&@+id/shop&
&&&&&&&&&&&&android:layout_width=&0dp&
&&&&&&&&&&&&android:layout_weight=&1&
&&&&&&&&&&&&android:layout_height=&35dp&
&&&&&&&&&&&&android:gravity=&center&
&&&&&&&&&&&&android:text=&购物&
&&&&&&&&&&&&android:textColor=&#605e5e&/&
&&&&&&&&&TextView
&&&&&&&&&&&&android:id=&@+id/user&
&&&&&&&&&&&&android:layout_width=&0dp&
&&&&&&&&&&&&android:layout_weight=&1&
&&&&&&&&&&&&android:layout_height=&35dp&
&&&&&&&&&&&&android:gravity=&center&
&&&&&&&&&&&&android:text=&会员&
&&&&&&&&&&&&android:textColor=&#605e5e&/&
&&&&&/LinearLayout&
&/RelativeLayout&主Activity的代码:package&com.youhutong.
import&android.os.B
import&android.support.v4.app.F
import&android.support.v4.app.FragmentA
import&android.support.v4.app.FragmentM
import&android.support.v7.app.AppCompatA
import&android.view.V
import&android.widget.TextV
import&com.youhutong.fragment.fragment.CateF
import&com.youhutong.fragment.fragment.MainF
import&com.youhutong.fragment.fragment.ShopF
import&com.youhutong.fragment.fragment.UserF
public&class&MainActivity&extends&AppCompatActivity&implements&View.OnClickListener&{
&&&&private&String&fragmentT
&&&&private&TextView&main,shop,
&&&&private&Fragment&mainFragment&=&new&MainFragment(),
&&&&&&&&&&&&&&&&&&&&&shopFragment&=&new&ShopFragment(),
&&&&&&&&&&&&&&&&&&&&&userFragment&=&new&UserFragment(),
&&&&&&&&&&&&&&&&&&&&&cateFragment&=&new&CateFragment();
&&&&@Override
&&&&protected&void&onCreate(Bundle&savedInstanceState)&{
&&&&&&&&super.onCreate(savedInstanceState);
&&&&&&&&setContentView(R.layout.main);
&&&&&&&&//&&第一步:创建4个继承自android.support.v4.app.Fragment的java文件,并一起创建对应的布局文件
&&&&&&&&/*
&&&&&&&&&&&1):在mainActivity.java文件同级目录新建名为fragment的目录&&&&(用来放4个java文件)
&&&&&&&&&&&2):新建文件时,一定要继承自Fragment(是android.support.v4包下的)
&&&&&&&&&&&3):创建对应的布局文件。
&&&&&&&&&&&4):为fragment文件绑定布局文件,通过重写方法onCreateView方法
&&&&&&&&&*/
&&&&&&&&//&&第二步:添加所有Fragment到管理类去。(添加前先实列化好)
&&&&&&&&this.getSupportFragmentManager()&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&获取管理类
&&&&&&&&&&&&&&&&.beginTransaction()&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&开启事物
&&&&&&&&&&&&&&&&.add(R.id.main_content,&mainFragment,&&mainFragment&)&//&添加fragment
&&&&&&&&&&&&&&&&.add(R.id.main_content,&shopFragment,&&shopFragment&)&//&添加fragment
&&&&&&&&&&&&&&&&.add(R.id.main_content,&userFragment,&&userFragment&)&//&添加fragment
&&&&&&&&&&&&&&&&.add(R.id.main_content,&cateFragment,&&cateFragment&)&//&添加fragment
&&&&&&&&&&&&&&&&.hide(cateFragment)
&&&&&&&&&&&&&&&&.hide(shopFragment)
&&&&&&&&&&&&&&&&.hide(userFragment)
&&&&&&&&&&&&&&&&.commit();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&提交
&&&&&&&&this.fragmentTag&=&&mainFragment&;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&保存当前显示的Tag
&&&&&&&&//&&第三步:要能过点击按钮显示不同的Fragment当然得先监听按钮事件
&&&&&&&&initView();
&&&&&&&&//&&第四步:创建一个继承自FragmentActivity的类,并定义一个方法来实现Fragment页面间的切换
&&&&&&&&//&&第五步:在当前Activity中创建一个方法,调用内部类的页面切换方法。并保存当前Tag
&&&&&&&&//&&第六步:fragment中控制页面切换(去对应Java文件中设置监听事件,调用switchFragment方法)
&&&&&*&主Activity切换Fragment页面方法入口
&&&&&*&@param&toTag&&要显示的Fragment的Tag
&&&&public&void&switchFragment(String&toTag){
&&&&&&&&MyFragmentActivity&mf&=&new&MyFragmentActivity();
&&&&&&&&mf.switchFragment(getSupportFragmentManager(),toTag,&this.fragmentTag);
&&&&&&&&this.fragmentTag&=&toT
&&&&&*&&创建一个继承自FragmentActivity的类,并定义一个方法来实现Fragment页面间的切换
&&&&class&MyFragmentActivity&extends&FragmentActivity{
&&&&&&&&//&定义一个方法:实现Fragment页面间的切换
&&&&&&&&public&void&switchFragment(FragmentManager&fm,&String&toTag,&String&foTag)&{
&&&&&&&&&&&&Fragment&fo&=&fm.findFragmentByTag(foTag);
&&&&&&&&&&&&Fragment&to&=&fm.findFragmentByTag(toTag);
&&&&&&&&&&&&if&(fo&!=&to)&{
&&&&&&&&&&&&&&&&fm.beginTransaction().hide(fo).show(to).commit();
&&&&&&&&&&&&}
&&&&&*&初始化3个按钮,并绑定监听器
&&&&private&void&initView()&{
&&&&&&&&main&=&(TextView)&findViewById(R.id.main);
&&&&&&&&shop&=&(TextView)&findViewById(R.id.shop);
&&&&&&&&user&=&(TextView)&findViewById(R.id.user);
&&&&&&&&main.setOnClickListener(this);
&&&&&&&&shop.setOnClickListener(this);
&&&&&&&&user.setOnClickListener(this);
&&&&&*&监听器对应点击方法
&&&&public&void&onClick(View&v)&{
&&&&&&&&switch&(v.getId()){
&&&&&&&&&&&&case&R.id.main:
&&&&&&&&&&&&&&&&this.switchFragment(&mainFragment&);
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&case&R.id.shop:
&&&&&&&&&&&&&&&&this.switchFragment(&shopFragment&);
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&case&R.id.user:
&&&&&&&&&&&&&&&&this.switchFragment(&userFragment&);
&&&&&&&&&&&&&&&&
}MainFragment.java的代码:(这里带按钮点击切换Fragment的实现)package&com.youhutong.fragment.
import&android.os.B
import&android.support.annotation.N
import&android.support.v4.app.F
import&android.view.LayoutI
import&android.view.V
import&android.view.ViewG
import&android.widget.TextV
import&com.youhutong.fragment.MainA
import&com.youhutong.fragment.R;
&*&&&&首页
public&class&MainFragment&extends&Fragment{
&&&&private&MainActivity&mainA
&&&&private&TextView&
&&&&@Nullable
&&&&@Override
&&&&//&创建该Fragment的视图
&&&&public&View&onCreateView(LayoutInflater&inflater,&@Nullable&ViewGroup&container,&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&@Nullable&Bundle&savedInstanceState)&{
&&&&&&&&this.mainActivity&=&(MainActivity)&getActivity();
&&&&&&&&return&inflater.inflate(R.layout.fragment_main,&container,&false);
&&&&@Override
&&&&//&当Activity的onCreate方法返回时调用
&&&&public&void&onActivityCreated(@Nullable&Bundle&savedInstanceState)&{
&&&&&&&&super.onActivityCreated(savedInstanceState);
&&&&&&&&btnss&=&(TextView)&getView().findViewById(R.id.main_btn1);
&&&&&&&&btnss.setOnClickListener(new&View.OnClickListener()&{
&&&&&&&&&&&&@Override
&&&&&&&&&&&&public&void&onClick(View&v)&{
&&&&&&&&&&&&&&&&mainActivity.switchFragment(&cateFragment&);
&&&&&&&&&&&&}
&&&&&&&&});
}MainFragment.java的布局文件:&?xml&version=&1.0&&encoding=&utf-8&?&
&LinearLayout&xmlns:android=&http://schemas.android.com/apk/res/android&
&&&&android:orientation=&vertical&
&&&&android:layout_width=&match_parent&
&&&&android:layout_height=&match_parent&&
&&&&&TextView
&&&&&&&&android:layout_width=&match_parent&
&&&&&&&&android:layout_height=&wrap_content&
&&&&&&&&android:layout_weight=&1&
&&&&&&&&android:gravity=&center&
&&&&&&&&android:text=&这是首页&
&&&&&&&&android:textSize=&30sp&/&
&&&&&TextView
&&&&&&&&android:id=&@+id/main_btn1&
&&&&&&&&android:layout_width=&match_parent&
&&&&&&&&android:layout_height=&40dp&
&&&&&&&&android:layout_margin=&100dp&
&&&&&&&&android:background=&#f91f39&
&&&&&&&&android:textColor=&#ffffff&
&&&&&&&&android:gravity=&center&
&&&&&&&&android:text=&跳到分类页&
&&&&&&&&android:textSize=&16sp&/&
&/LinearLayout&然后就是还有三个Fragment和对应的布局文件,都是差不多(只是名字不同,显示文字不同而于)这里就只列出一个Fragment和对应的布局文件:package&com.youhutong.fragment.
import&android.os.B
import&android.support.annotation.N
import&android.support.v4.app.F
import&android.view.LayoutI
import&android.view.V
import&android.view.ViewG
import&com.youhutong.fragment.R;
&*&&&&分类页
public&class&ShopFragment&extends&Fragment&{
&&&&@Nullable
&&&&@Override
&&&&public&View&onCreateView(LayoutInflater&inflater,&@Nullable&ViewGroup&container,&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&@Nullable&Bundle&savedInstanceState)&{
&&&&&&&&return&inflater.inflate(R.layout.fragment_shop,&container,&false);
}&?xml&version=&1.0&&encoding=&utf-8&?&
&LinearLayout&xmlns:android=&http://schemas.android.com/apk/res/android&
&&&&android:orientation=&vertical&
&&&&android:layout_width=&match_parent&
&&&&android:layout_height=&match_parent&&
&&&&&TextView
&&&&&&&&android:layout_width=&match_parent&
&&&&&&&&android:layout_height=&wrap_content&
&&&&&&&&android:layout_weight=&1&
&&&&&&&&android:gravity=&center&
&&&&&&&&android:text=&这是购物页&
&&&&&&&&android:textSize=&30sp&/&
&/LinearLayout&有需要的朋友也可以下载源码学习一下:(android studio & &model模块)
 浏览器启用弹出窗口过滤功能,将无法跳转到下载页。在浏览器地址栏右边符号提示处点击允许就可以了!
【温馨提示】源码包解压密码:www.youhutong.com
如果你觉得这篇教程的内容对你有帮助、请支持本站谢谢! 
转载请注明来源地址:小川编程 >>
订阅号“”
填写您的邮件地址,订阅更多的精彩内容:您的位置: >>
  最近一朋友提了几个Android问题让我帮忙写个小分享,我觉得对新人还是挺有帮助的,所以有了这个小分享。
  1. 目前, Android APP开发完成后,通常需要在哪些机型上进行测试?
  2. 目前, 开发Android APP时,需要考虑的分辨率有哪些?
  这两个问题可以合起来回答的。
  源自Google Play的数据,每月都会进行update,可以及时了解Android版本比例趋势。
  屏幕密度数据
  OpenGL ES版本
  也可以参考一下国内一个第三方数据:
  目前三星和小米市场占有率是遥遥领先的,三星Note2、Note3、S3、S4、S5、小米123、红米必须测试,魅族也比较坑爹,加入测试名单吧。再选中小屏幕各一款(譬如华为C8650、Moto ME511)。
  Android 1.5、1.6、2.0、2.1和小屏幕的属于古董级别的机器,市场存量也很少,新出的机器都是4.0以上的了,所以必要时需要舍弃对古董的支持,因为适配成本很高,对于新开发的应用,这个适配不值得投入。
  3. 目前, 开发Android APP时,适应多个分辨率的技术方案有哪些?
  http://developer.android.com/guide/practices/screens_support.html
  Android的屏幕适配,可以在工程res目录下进行处理,无需写代码,Android自动找最适合的资源进行显示,相信大家都相当熟悉的了。
  目前我使用的是ADT22.6,新建一个Android工程,会自动在res目录下生成这个目录结构。这里有5个前缀drawable的文件夹,对应不同密度屏幕时所取的图片资源或者样式。
  做一个功能正常的App,开发者需要遵循一些开发守则,与此同时,设计师也需要有一套标准来设计Android UI,所有的Android UI设计指南都在这里了。
  9Path这个简单易用的工具,很实用,必须推荐。
  画个图标,都要出N种分辨率,每次机械操作实在有点弱爆,推荐一个牛X的工具:
  其中的功能可以自动切图输出各种屏幕密度的icon,可视化构建布局,自动生成布局文件。
  推荐这个,设计师应该会很喜欢,秒切图。
  实际开发中,考虑到包体积大小,不会在所有drawable中都放不同size的图片资源,而是只使用一套图片资源,编写不同的布局。个别特殊的图片资源就每个drawable文件夹中放相应的size,譬如程序图标,不按文件夹放可能会导致在Launcher显示失真。
  虽然不作任何改动也可以在Android Pad上跑,但由于Pad屏幕较大,操作体验不一样,建议重新设计。
  4. 开发Android APP时,配置文件应放在哪里(APP本地、远程WeB Server中)?应该如何考虑?  
  这个就要看需求了,如果只是本机使用,譬如保存软件设置,不需要联网操作的,那首选当然是保存在本地。
  如果业务需要和服务器交互,可以做成云配置方式。为了跨平台的兼容性,可以考虑使用Google的ProtoBuf,比XML更小更快更简单,后台和终端定义一套协议,自动生成C++、Java或者Python代码。
  5. Android APP测试方案通常考虑哪些因素?有测试方案的参考实例吗?  
  机型适配:屏幕大小,这个只能人工检验了(程序不知道你的UI长得好不好看)
  Android版本(某些API在低版本上没有的,会Crash,推荐Lint静态扫描)
  网络质量:联通、电信、移动、WiFi、弱网络等
  安全性:网络数据必定经过加密处理;本地不保存安全信息(帐号密码等),或者加密保存
  代码中敏感信息尽量使用byte数组而不是字符串代码混淆处理(Proguard)
  SD卡剩余空间很少,没SD卡,双SD卡,飞行模式,时间有误等。
  性能:CPU、内存占用(开发可以使用Linux的top命令或者DDMS里面的工具)
  网络流量消耗(有各种第三方流量监控软件)
  6. 开发Android APP时,为了提高工作效率,提高项目质量、通常需要抽象出一些lib出来,请列出经常用到的接口的名称和用途。  
  更多精彩可以上github搜搜,这就不班门弄斧了。
  7. Android APP开发中其它需要提醒的问题
  android4.4在UI线程无法进行网络操作不单只android API版本不一定导致运行异常,有些机型还使用Java 1.5进行编译,使用某些Java 1.6的函数会Crash的。
  注意OOM问题,目前android手机已经有3G内存了,但并非一个应用就能使用全部内存。了解一下堆内存,一个软件至少一个进程,一个进程跑一个虚拟机,进程使用的堆内存大小,每部手机不一定一样。
  Show Dialog的问题,永远要判断Activity是否还在。
  使用了高版本的API函数,在低版本机器上挂了。
  非UI线程不能操作UI。可能有各种权限被禁的问题。
  没有浏览器、没有软件安装器、没有Email等发生ActivityNotFoundexception。
  超快速连续点击按钮可能触发跑多个线程的问题。
  Android4.4短信权限设置,原生系统带有新接口,第三方系统可能裁剪掉了。
  8. 什么情况下发生OOM,如何避免?
  图片操作(图片缩放、bitmap生成等)、序列化反序列化数据等会消耗大量内存。合理使用数据结构(链表和数组),及时释放引用,使用弱引用等能降低OOM情况发生。
  9. 出现ANR怎么办?
  如果Android程序某个操作执行等待超过5s,会出现ANR(Application Not Responding)的对话框,对于执行耗时的操作,譬如网络操作,就不能在主线程上进行了(Android 4.4不让你这样做了),这些任务应该跑在主线程外,譬如新建一个线程处理,或者自己写一个网络引擎对所有网络请求进行管理。
  10. 如何跟踪研发质量?
  Coverity接入:
  代码缺陷扫描,不扫不知道,一扫吓一跳。满分推荐!Fro Free!如果你写的是开源代码,还能直接接入GitHub,超方便。
  Crash是无法避免的,我们能做的是尽量把Crash的情况减少。发出去的版本,用户发生Crash了,我们需要把Crash数据收集起来。所以软件需要做一个Crash上报,汇总整理。统计每个版本的Crash率,并把Crash按优先级进行修复。
  当然,版本检查更新也少不了。
  11. 如果跟踪用户对产品的反馈?
  不管你写软件所用的技术有多么牛B,用户是不知道的,也不关心的。用户关心的是你的产品体验到底有多牛B。加上用户可以轻松反馈的反馈功能,你会发现有时用户的idea还不错的。
  做出来的产品好还是不好,需要有产品数据支撑,所以加插相关数据统计上报点,哪个功能热门,新增用户多少,活跃用户多少,一目了然。
  12. 安全检查
  为避免异常情况的跳转或者恶意攻击,Android组件在启动时都需要判断传入的参数是否为空。
  敏感信息需要进行权限限制或者加密处理。
  能不暴露的组件就不暴露,在AndroidManifest中为组件加上android:exported=&false&属性。
  需要暴露的组件通过自定义权限进行调用,添加自定义权限android:permission=&yourapp.permission.CALL&检测WebView漏洞http://security.tencent.com/index.php/opensource/detail/1
  13. 常用工具有哪些:
  Lint(清理资源、安全检查、layout优化等)
  一般在提测前清理一下冗余资源,查一下有没有用了一些高API Level才有的接口,查一下安全问题。
  Findbugs(检查java代码缺陷)
  在开发工程中就可以对单个文件进行检查,有问题可以及时处理。
  MAT(内存泄漏调试工具)http://www.eclipse.org/mat/
  遇到内存或者性能问题时,一般会结合几种工具来查问题,找解决方法。
  Method Profiling(统计方法耗时)
  Eclipse Class Decompiler(从此Eclipse不怕看不到jar包内的代码了)
  Hierarchy Viewer(查看Activity堆栈、layout加载层次、像素眼)
  只能连接开发板手机或者模拟器,如果你的手机连不上,搜一下&Hierarchy Viewer 真机&,各种教程教你如何连上。
  Activity太多,有时出问题了,但又想不起这个页面叫什么名字,插上去,一目了然。
  很清晰看出Layout布局层次, 还能显示计算layout耗时,绘图耗时,UI性能优化好帮手。
  TinyPNG(压缩图片资源利器,山崩地裂推荐)
  7z(压缩APK利器,上线前压一下就可以,简单实用,五星推荐)
  Apktool、Dex2jar 、jd-gui(反编译套装,你懂的)
  Mark Man(设计师何苦为难工程师)
  Beyond Compare(各种神对比,我喜欢对比代码)
  Tcpdump(Linux dump包工具)
  adb shell tcpdump -p -vv-s 0 -w /sdcard/capturenet.pcap  
  WireShark(查看网络dump包)
  遇到棘手问题时,还是需要他们帮忙解决的。
  CMD (很简单的脚本却能大大提高效率,大家多学多分享)
  一些经常操作的动作,使用手工操作又耗时又麻烦还可能出错,使用命令行去操作的话会极大提供效率。
  拖放安装应用,不用再弹出xx助手xx宝来的蜗牛速度安装了(速度快了,心情好了):
  adb install %1
  卸载应用:
  adb uninstall com.tencent.qqpim
  拉去SD卡目录文件
  adb pull /sdcard/test/log c:testlog
  获取联系人db
  adb pull /data/data/com.android.providers.contacts/databases/contacts2.db C:contact2.db
  tcpdump包
  adb shell tcpdump -p -vv -s 0 -w /sdcard/capturenet.pcap
  SDK裁剪打包
  裁目录:rd/s/q S:tencentsrcAGJ
  裁文件:del S:tencentsrccomtencenttestTestApplication.java
手机开发热门文章
手机开发最新文章2015年8月 移动开发大版内专家分月排行榜第三2014年9月 移动开发大版内专家分月排行榜第三2014年7月 移动开发大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。sponsored links
Android开发之解决APP启动白屏或者黑屏闪现的问题
在做搜芽的过程中,发现那个外包人缘做的不行,因为启动的时候会停顿,然后白屏一会,联想到几个月前我在我的三僚企业通信软件里面拉起9K-Mail的时候也会黑屏,所以决定学习一下。解决一下。这不,万能的网络还是非常有用的。
在这里总结一下。
(参考及转载:http://www.2cto.com/kf/293.html)
欢迎页启动的线程由于请求和处理的数据量过大而,导致欢迎页在出现之前界面上会有一个短暂的白色闪屏停留,当然白色闪屏的停留是因为 application 的主题样式android:theme=@style/AppTheme 使用了 Theme.Light 题导致的,Light 样式的 windowBackground、colorBackground、colorForeground 等属性的值均为 light 也就是白色偏亮,所以才会出现白色闪屏。下面是我的 APP 出现白色闪屏时样式引用的代码:
简单的修改后,闪屏颜色为黑色,代码如下:
代码修改后引用的样式为黑色主题,但欢迎页仍然会有黑色闪屏短暂的停留。继续进行修改,设置透明属性为 true,代码如下:
经过这次的修改之后黑色闪屏现象消失了,最终达到了自己理想的效果。最后,经过查阅资料发现已经有人总结和处理过这类问题了,并且给出了优缺点的分析,我在这里以我的理解对其进行引用。
原来避免黑色闪屏有2种方法,分别为:1.为 Theme 设置背景图;2.为 Theme 设置透明属性。显然我采用的是第二种方式,先分别看看这2种方式所引用的代码:
上面的2种 Theme 中,为 Theme 设置背景图后程序在启动的时候,会首先显示这张图,避免发生黑屏;为 Theme 设置透明属性,程序启动后不会黑屏而是透明,等到界面初始化完成后才一次性显示出来。下面是两种方式的优缺点:
为 Theme 设置背景图 给人程序启动快的感觉,界面先显示背景图,然后再刷新其他界面控件,刷新不同步。为 Theme 设置透明属性 给人程序启动慢的感觉,界面会一次性刷出来,刷新同步。
但是问题有出现了,原先在配置了activity的切换动画效果,设置完android:windowIsTranslucent=true之后切换动画失效了。暂时我也不知道android系统的theme属性之间关系的错综复杂,继承来继承去的。。。为什么会出现这种问题,不过还好无意间找到了解决办法
当然首页退出的时候可以单独配置MainActivity的退出动画和进入动画
MainActivity的退出和进入动画可以引用系统提供的,但是好像在style里面配置引用不了有些系统的anim,
在文件夹sdkplatformsandroid-20data es下面,activity_open_enter.xml,activity_close_exit.xml可以直接拷贝到项目中,修改
单独写一个进入或者退出,然后其它默认。。。。。。。
多动手,测试,如果有错误的地方麻烦留言一起交流,谢谢
另一篇值得看的文章:(http://blog.csdn.net/u/article/details/)
前几天Boss就反应说,机器每次启动程序都会闪一下黑屏,这个客户不接受。没办法,只能想想怎么解决,最后找到了下面的方法。闪黑屏的原因主要是我们启动Activity的时候,需要跑完onCreate和onResume才会显示界面。也就是说需要处理一些数据后,才会显示。按照这种思路,是不是我把初始化的工作尽量减少就可以避免黑屏?事实是,就算你onCreate啥都不做,仍然会闪一下黑屏,因为初始化解析界面时需要一定时间。下面是解决办法:
(PS:新建的QQ群,有兴趣可以加入一起讨论:Android群:)  
1、自定义Theme
//Edited by mythou
//http://www.cnblogs.com/mythou/
//1、设置背景图Theme
&style name=&Theme.AppStartLoad& parent=&android:Theme&&
&item name=&android:windowBackground&&@drawable/ipod_bg&/item&
&item name=&android:windowNoTitle&&true&/item&
//2、设置透明Theme
&style name=&Theme.AppStartLoadTranslucent& parent=&android:Theme&&
&item name=&android:windowIsTranslucent&&true&/item&
&item name=&android:windowNoTitle&&true&/item&
  上面我定义了两种Theme,第一种Theme就是设置一张背景图。当程序启动时,首先显示这张背景图,避免出现黑屏。第二种Theme是把样式设置为透明,程序启动后不会黑屏而是整个透明了,等到界面初始化完才一次性显示出来。下面说说两种方式的优缺点:
Theme1 程序启动快,界面先显示背景图,然后再刷新其他界面控件。给人刷新不同步感觉。Theme2 给人程序启动慢感觉,界面一次性刷出来,刷新同步。
2、修改AndroidManifest.xml
为了使上面Theme生效,我们需要设置一些Activity的Theme
//Edited by mythou
//http://www.cnblogs.com/mythou/
&application
android:allowBackup=&true&
android:icon=&@drawable/ipod_icon&
android:label=&@string/app_name&
android:launchMode=&singleTask&&
&!-- iPod主界面 --&
android:name=&com.apical.apicalipod.IPodMainActivity&
  &!-- 使用上面定义的样式 mythou--&
android:theme=&@style/Theme.AppStartLoad&
android:label=&@string/app_name& &
&intent-filter&
&action android:name=&android.intent.action.MAIN& /&
&category android:name=&android.intent.category.LAUNCHER& /&
&/intent-filter&
&/activity&
&/application&
可以在Activity里面增加上面自定义的样式。另外在Application里面增加也是可以的,而且是全局效果。自定义Theme放在 /res/values/styles.xml 里面。如果没有这个文件,自己添加一个即可。如果存在多个Activity切换,中间也可能会存在短暂黑屏问题。原因也是Activity启动的时候需要初始化加载数据,如果想避免这种情况,可以在你切换的Activity里面增加上面的样式。上面两种样式都可以避免黑屏。可以实际测试一下你的程序选择一种效果。这个只是把黑屏避免了,但是如果你程序初始化启动慢,还是会给人程序启动慢的感觉。需要自行优化程序初始化过程。
3、Theme属性详解
//Edited by mythou
//http://www.cnblogs.com/mythou/
android:theme=&@android:style/Theme.Dialog& //Activity显示为对话框模式
android:theme=&@android:style/Theme.NoTitleBar& //不显示应用程序标题栏
android:theme=&@android:style/Theme.NoTitleBar.Fullscreen& //不显示应用程序标题栏,并全屏
android:theme=&Theme.Light & //背景为白色
android:theme=&Theme.Light.NoTitleBar& //白色背景并无标题栏
android:theme=&Theme.Light.NoTitleBar.Fullscreen& //白色背景,无标题栏,全屏
android:theme=&Theme.Black& //背景黑色
android:theme=&Theme.Black.NoTitleBar& //黑色背景并无标题栏
android:theme=&Theme.Black.NoTitleBar.Fullscreen& //黑色背景,无标题栏,全屏
android:theme=&Theme.Wallpaper& //用系统桌面为应用程序背景
android:theme=&Theme.Wallpaper.NoTitleBar& //用系统桌面为应用程序背景,且无标题栏
android:theme=&Theme.Wallpaper.NoTitleBar.Fullscreen& //用系统桌面为应用程序背景,无标题栏,全屏
android:theme=&Theme.Translucent& //透明背景
android:theme=&Theme.Translucent.NoTitleBar& //透明背景并无标题
android:theme=&Theme.Translucent.NoTitleBar.Fullscreen& //透明背景并无标题,全屏
android:theme=&Theme.Panel & //面板风格显示
android:theme=&Theme.Light.Panel& //平板风格显示
4、Theme和Style
  Android里面除了Theme外还有Style,例如下面是Launcher里面配置workspace的一个Style
//Edited by mythou
//http://www.cnblogs.com/mythou/
 &style name=&WorkspaceIcon&&
&item name=&android:layout_width&&match_parent&/item&
&item name=&android:layout_height&&match_parent&/item&
&item name=&android:layout_gravity&&center&/item&
&item name=&android:gravity&&center_horizontal&/item&
&item name=&android:singleLine&&true&/item&
&item name=&android:ellipsize&&marquee&/item&
&item name=&android:textSize&&12sp&/item&
&item name=&android:textColor&&#FFF&/item&
&item name=&android:shadowRadius&&2.0&/item&
&item name=&android:shadowColor&&#B0000000&/item&
Style可以理解为一组属性集合,方便不同的View设置使用,我们在View里面使用Style的时候,跟使用Theme是一样的应用方法。那么Style和Theme有什么区别?下面列出两者区别:
样式用在单独的View,如:Button、TextView等主题通过AndroidManifest.xml中的&application&和&activity&用在整个应用或者某个 Activity,主题对整个应用或某个Activity存在全局性影响。如果一个应用使用了主题,同时应用下的view也使用了样式,那么当主题与样式属性发生冲突时,样式的优先级高于主题。
  上面就是通过Theme解决程序启动闪黑屏问题,并且讲解了Theme和Style,通过Theme配置,其实还可以做个欢迎页面。不过我们都希望程序启动速度越快越好,因此还是需要多多优化自己的程序。
Edited by mythou
原创博文,转载请标明出处:http://www.cnblogs.com/mythou/p/3196042.html&
这篇文章主要介绍了Android编程中activity启动时出现白屏.黑屏问题的解决方法,涉及Android针对activity启动设置的技巧,需要的朋友可以参考下本文实例讲述了Android编程中activity启动时出现白屏.黑屏问题的解决方法.分享给大家供大家参考,具体如下: 默认情况下 activity 启动的时候先把屏幕刷成白色,再绘制界面,绘制界 ...
这篇文章主要介绍了Android开发基础之创建启动界面Splash Screen的方法,以实例形式较为详细的分析了Android定制启动界面的布局及功能实现相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下本文实例讲述了Android开发基础之创建启动界面Splash Screen的方法.分享给大家供大家参考.具体如下: 启动界面Splash Screen ...
Android AnimationDrawable动画与APP启动.加载引导页面(画面) AnimationDrawable是Android的Frame动画,可以简单的认为此AnimationDrawable能够将一系列资源图片加载成&电影&一样播放.当下,在一些APP中,往往需要在APP切入主题之前加载一些引导页面(宣传海报.装饰画面. ...
电脑死机.蓝屏.黑屏.报错解决办法 1.ctrl+alt+delete,打开任务管理器,选择关机-重新启动,如果不行接着看. 2.长按电源5秒钟,强制关机,(因为可能是CPU过热,它需要凉快一下),在正常开机,如果不行接着看. 3.长按电源5秒钟,强制关机,开机,按F8,选择最后一次正常启动,如果不行接着看. 4.长按电源5秒钟,强制关机,开机,按F8,选择 ...
一下方法或设置均未验证 ========== 锁屏或黑屏会广播两个消息分别是:ACTION_SCREEN_OFF和ACTION_SCREEN_ON 程序控制手机永远不锁屏或者永远亮光:通过设置View.setKeepScreenOn(boolean)的方法可以永不锁屏 ===========以下方法作者声称没有监听到该广播=========== public ...}

我要回帖

更多关于 android 点击菜单 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信