继《微博尾》之《玩转尾巴》好玩尾巴积分版传送门:http://blog.csdn.net/love_5209/article/details/39473983

(本文android新手所做,有疑问或建议请回复~直接回帖或联系新浪微博@请叫我小纯酷

最新版本号3.1微博尾下载地址:http://android.myapp.com/myapp/detail.htm?apkName=com.xiaoku.weibowei

学习android也快一个月了,本身有java基础。学起来也比較easy。第一个应用《微博尾》因此诞生了~(作为第一个作品对于本人来说还是比較惬意的)

说难不难,简单也不简单(对于新手来说会遇到一些问题的),思路一有了,就開始做了(兴趣所在),做的过程中也遇到非常多问题。也慢慢积累了经验。

首先。想法非常重要。没有想法都不知从何做起。微博尾这个的想法是从网上浏览无意间看到的,通过改动微博尾,来显示发微博时“来自 xxx手机”的标志。便认为好玩[土(zhuang)豪(bi)必备],于是開始着手做~~~

微博尾1.0下载地址:

apkName=com.xiaoku.weibowei">http://android.myapp.com/myapp/detail.htm?apkName=com.xiaoku.weibowei  (可下载对比着功能看以下的解说)

好了。開始了~~~

1、收集微博尾资源,在网上找了非常多微博尾的app_src,收集了非常多之后就開始了。

2、搭建好开发环境,因为如今的手机android版本号都基本4.xx了。故而选择目标版本号4.2.2,最小支持版本号3.2。

3、開始设计界面布局以及样式等等。

先上张首页图效果例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG92ZV81MjA5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

这里。首页布局採用了GridView布局方式,每一个Item里面均有一个TextView,每一个TextView绑定了一个图片以及文字,专门用于显示手机类型的(大类型,可点击进入小尾巴分类),点击之后显演示样例如以下:

这里採用了ListView布局,表面看仅仅有一个TextView,里面事实上还隐藏了还有一个TextView,用于存放相应的app_src,当点击ListView的某个item时,相应的app_src将被加入到相应要公布微博的URL中,之后点击以下的“微博。走你“button。就可以到新浪微博发微博,所发的微博也即能显示你所点击的尾巴类型如” 来自 iPhone5s “等~~

整体流程就是这样子。

看起来实现好像没什么难度,事实上中间也遇到一些问题,这里略微解说一下:

1、首先对于新手来说,非常多东西学了不一定能全记住,要养成好的习惯,比方,新建一个Activity就要想到在清单文件AndroidManifest.xml中加入相应的Activity申明。而这个应用须要用到网络。也就得加入相应的网络permission了。

2、上面Gridview相应的每个item点击进去后显示的ListView。当然不是一个个的Activity了,不然非常浪费资源的。能够採用Fragment碎片。灵活又方便。当然,採用了Fragment又会遇到一些问题了。

比方。返回事件,当从主页MainActivity(GridView用一个Fragment包装)跳到ListView(一个Fragment),此时还是MainActivity,仅仅只是换了个Fragment而已,所以不处理一下返回事件的话,一点返回将退出程序了。怎样解决呢?

看以下代码

  1. Fragment selectPhoneFragment = new SelectPhoneFragment();
  2. FragmentTransaction transaction = getFragmentManager().beginTransaction();
  3.  
  4. Bundle bundle = new Bundle();
  5. bundle.putString("phoneName", PHONE_NAME[position]);
  6. selectPhoneFragment.setArguments(bundle);
  7.  
  8. transaction.replace(R.id.main_fragment,selectPhoneFragment);
  9. transaction.addToBackStack(null);
  10. transaction.commitAllowingStateLoss();

transaction.addToBackStack(null);这句是关键。将当前的Activity加入到栈中。返回时就可以显示刚刚那个Activity。

3、17个手机产商,我直接就存放在String数组中了,以及相应的图片drawable ID,兴许可使用面向对象的方式存放。可是,70多个微博尾,怎样存放呢?刚開始想了存放在Sqlite数据库中,后来想想还是不习惯使用Sqlite,于是。就採用了properties工具类来存储了。工具代码例如以下:

  1. package com.xiaoku.weibowei.util;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.util.Properties;
  6. /**
  7. * 读取property文件
  8. */
  9.  
  10. @SuppressWarnings("serial")
  11. public class FileUtil implements java.io.Serializable{
  12. private Properties prop ;
  13. private InputStream is ;
  14.  
  15. public FileUtil(String filename)
  16. {
  17. prop = new Properties() ;
  18. is = getClass().getResourceAsStream("/assets/"+filename);
  19. try {
  20. prop.load(is);
  21. if(is!=null)
  22. is.close();
  23. } catch (IOException e) {
  24. System.out.print(e.getMessage()) ;
  25. e.printStackTrace();
  26. }
  27. }
  28.  
  29. //取得属性
  30. public String getProperties(String PropertyName)
  31. {
  32. return prop.getProperty(PropertyName);
  33. }
  34. }

从上面的代码能够看到。我存放的property文件是放在assets文件夹下的。

于是,我就能够在property文件里存放相应的手机以及相应微博尾键值对了。

键为手机商,值为多个尾巴组合起来。如:华为=荣耀6的尾巴#荣耀6&荣耀3C的尾巴#荣耀3C

取出来之后在依照&划分,之后再依照#划分,便可取到相应尾巴的app_src了。

4、刚刚前面说过的fragment另一个问题。就是横竖屏的时候会出错,比方MainActivity(里面的一个fragment手机产商,记为MainFragment),点击某个手机产商,调到另一个fragment,此时还在MainActivity,假设切换横竖屏的话,就会出现跳回MainFragment界面。原因是横竖屏切换的话默认会导致Activity从新调用onCreate方法一次。也就是会显示了MainFragment手机产商界面。可在清单文件配置例如以下:

  1. <activity android:name="com.xiaoku.weibowei.MainActivity" android:configChanges="orientation|keyboardHidden|keyboard|screenSize"></activity>

然后在MainActivity中重写一下onConfigurationChanged方法(这里我就没处理了):

  1. //横竖屏切换
  2. @Override
  3. public void onConfigurationChanged(Configuration newConfig) {
  4. /*if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
  5. Toast.makeText(getApplicationContext(), "横屏", Toast.LENGTH_LONG).show();
  6. }else{
  7. Toast.makeText(getApplicationContext(), "竖屏", Toast.LENGTH_LONG).show();
  8. }*/
  9. super.onConfigurationChanged(newConfig);
  10. }

5、关于2次返回button退出时显示吐丝”再按一次退出程序“的做法,事实上也非常easy,仅仅需在MainActivity中重写一下onKeyDown,里面做一下推断

  1. //2次返回退出应用
  2. @Override
  3. public boolean onKeyDown(int keyCode, KeyEvent event) {
  4. if (keyCode == KeyEvent.KEYCODE_BACK) {
  5. if (this.getFragmentManager().getBackStackEntryCount() == 0) {//最后一个fragment即主页~
  6. if ((System.currentTimeMillis() - mExitTime) > 2000) {
  7. Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
  8. mExitTime = System.currentTimeMillis();
  9. }else {
  10. finish();
  11. }
  12. return true;
  13. }
  14. }
  15. return super.onKeyDown(keyCode, event);
  16. }
  1. </pre>这里的【 if (this.getFragmentManager().getBackStackEntryCount() == 0) {//最后一个fragment即主页~ 】   也比較关键,由于使用了fragment,不然在ListViewFragment(也就是选择详细某个手机型号的界面)里面点击返回也会运行这一个,不做这段处理的话,也会显示”再按一次退出程序“。<p></p><p></p><p>6、关于菜单button(右上角三个点),可能是由于版本号问题,有些地方显示不了,可在MainActivity中的onCreate方法做下面处理:</p><p></p><pre name="code" class="java">//显示三个点菜单
  2. try {
  3. ViewConfiguration config = ViewConfiguration.get(this);
  4. Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
  5. if(menuKeyField != null) {
  6. menuKeyField.setAccessible(true);
  7. menuKeyField.setBoolean(config, false);
  8. }
  9. } catch (Exception e) {
  10. e.printStackTrace();
  11. }

在菜单”关于“button显示相应的页面中,显示作者信息等等那一个页面,横竖屏切换遇到了以下的字看不到了,原因就是没有设置滚动栏,可在相应的Layout中加入ScrollView包裹你要滚动的视图。

  1. <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="fill_parent"
  3. android:layout_height="fill_parent"
  4. android:scrollbars="vertical">
  5.  
  6. 包裹要滚动的视图
  7.  
  8. </ScrollView>

在菜单”图解“button中,事实上也就是初始安装显示的引导页面,使用的是ViewFilpper, 可參考http://blog.csdn.net/love_5209/article/details/38516233

里面又涉及到横竖屏切换问题。一横屏,显示的图片不是非常好看,故而应该设置仅仅同意竖屏显示,可在清单文件配置相应的Activity:

  1. <activity android:name="com.xiaoku.weibowei.ViewFlipperActivity" android:screenOrientation="nosensor">

參数还有其它,大家能够研究研究~

7、点击”微博,走你“button之后,跳到还有一个Activity。这里採用了WebView来訪问传过来的URL值,默认不做处理的话,訪问后会出现能够訪问新浪微博,可是点击不了里面的button之类的,返回也没有直接在浏览器返回(无论你点了多少个页面,一点返回直接跳回ListViewFragment页面),故须要做一下处理例如以下:

  1. @SuppressLint({ "SetJavaScriptEnabled", "SdCardPath" })
  2. @Override
  3. public void onViewCreated(View view, Bundle savedInstanceState) {
  4. super.onViewCreated(view, savedInstanceState);
  5. String url = (String) getArguments().get("url");//接收传过来的URL
  6. webView = (WebView) getActivity().findViewById(R.id.webview);
  7.  
  8. //点击后退button,让WebView后退一页(也能够覆写Activity的onKeyDown方法)
  9. webView.setOnKeyListener(new View.OnKeyListener() {
  10. @Override
  11. public boolean onKey(View v, int keyCode, KeyEvent event) {
  12. if (event.getAction() == KeyEvent.ACTION_DOWN) {
  13. if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
  14. webView.goBack(); //后退
  15. //webview.goForward();//前进
  16. return true; //已处理
  17. }
  18. }
  19. return false;
  20. }
  21. });
  22.  
  23. //设置浏览器可用
  24. WebSettings s = webView.getSettings();
  25. s.setBuiltInZoomControls(true);
  26. s.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
  27. s.setUseWideViewPort(true);
  28. s.setLoadWithOverviewMode(true);
  29. s.setSavePassword(true);
  30. s.setSaveFormData(true);
  31. s.setJavaScriptEnabled(true);
  32. // enable navigator.geolocation
  33. s.setGeolocationEnabled(true);
  34. s.setGeolocationDatabasePath("/data/data/com.xiaoku.weibowei/databases/");
  35. // enable Web Storage: localStorage, sessionStorage
  36. s.setDomStorageEnabled(true);
  37. webView.requestFocus();
  38. webView.setScrollBarStyle(0);
  39.  
  40. webView.setWebViewClient(new WebViewClient(){
  41. @Override
  42. public boolean shouldOverrideUrlLoading(WebView view,
  43. String url) {
  44. view.loadUrl(url);
  45. return true;
  46. }
  47. });//自己定义浏览器
  48. webView.loadUrl(url);
  49. Toast.makeText(getActivity(), "载入网页,请稍等...", Toast.LENGTH_LONG).show();
  50. }

除了以上这些,事实上还有其它的一些功能,比方进入ListViewFragment,listView滑动的效果。软件初始显示图解,之后点击直接进入主页;嵌入插屏广告;分享功能等等。

对于源代码眼下暂不提供,有问题可回帖交流

微博尾2.0版本号已完工。9月份初上线。

(版本号预告:尾巴达90多种。加入个性尾巴,分享功能提供下载地址)

微博尾下载地址:http://android.myapp.com/myapp/detail.htm?apkName=com.xiaoku.weibowei

感谢您的阅读~!

我的第一个android应用——装逼神器《微博尾》的更多相关文章

  1. LESS使用方法简介(装逼神器)

    LESS 做为 CSS 的一种形式的扩展,它并没有阉割 CSS 的功能,而是在现有的 CSS 语法上,添加了很多额外的功能,所以学习 LESS 是一件轻而易举的事情,果断学习之! 变量 很容易理解: ...

  2. vue装逼神器简述

    主要是分享下用vuejs开发项目过程中遇到的问题,vuejs开发的优势和需要注意的地方. 项目主要页面:主页,最新,分类,分类列表,详情页,结果页,斗图(列表,制作页) 效果图: 地址:https:/ ...

  3. Python3 装逼神器---词云(wordcloud)

    词云 (Word Cloud)是对文本中出现频率较高的词语给予视觉化展示的图形, 是一种常见的文本挖掘的方法. 实例:     依赖包: # pip3 install wordcloud  jieba ...

  4. Android特效专辑(六)——仿QQ聊天撒花特效,无形装逼,最为致命

    Android特效专辑(六)--仿QQ聊天撒花特效,无形装逼,最为致命 我的关于特效的专辑已经在CSDN上申请了一个专栏--http://blog.csdn.net/column/details/li ...

  5. Android零基础入门第12节:熟悉Android Studio界面,开始装逼卖萌

    原文:Android零基础入门第12节:熟悉Android Studio界面,开始装逼卖萌 通过前两期的学习,我们可以正确搭建好Android Studio的开发环境,也创建了HelloWorld工程 ...

  6. VopSdk一个高逼格微信公众号开发SDK:自动化生产(装逼模式开启)

    VopSdk一个高逼格微信公众号开发SDK(源码下载) VopSdk一个高逼格微信公众号开发SDK:自动化生产(装逼模式开启) 针对第一版,我们搞了第二版本,老规矩先定个目标. 一 我们的目标 a.移 ...

  7. 用dos命令导出一个文件夹里面所有文件的名字(装逼利器)

    首先,当然是在相关的文件夹打开dos命令窗口. 然后,输入如下命令:dir/b >a.txt 如果你非常了解dos命令,那么你一定会觉得这个东西简单到爆,而且我的理解和猜想都有些无知. 但如果你 ...

  8. 安卓工作室 Android studio 或 Intellij IDEA 美化 修改 汉化 酷炫 装逼 Android studio or Intellij IDEA beautify modify Chinesization cool decoration

    安卓工作室 Android studio 或 Intellij IDEA 美化 修改 汉化 酷炫 装逼 Android studio or Intellij IDEA beautify modify ...

  9. WebApp简单制作(后端也可以装逼啦)

    前端越来越吃香的感觉 年后回来,跟之前和几个同事和朋友聊天,发现有两个.net的和一个php的朋友都转到了前端,真是出乎意料.自从之前的webapp兴起后,前端感觉比后端吃香很多,总结朋友们转的原因, ...

随机推荐

  1. ntp测试

    cmd下 w32tm /stripchart /computer:time1.aliyun.com linux ntpdate ntp1.aliyun.com

  2. ASP.NET C#根据HTML页面导出PDF

    在启明星采购系统里,新增了导出PDF功能.整个功能使用了第三方软件 wkhtmltopdf(下载) 官网 https://wkhtmltopdf.org/ 提供有更多版本下载 他可以把HTML页面转换 ...

  3. CentOS下httpd下php 连接mysql 本机可以,外网报错Could not connect: Can't connect to MySQL server on '127.0.0.1' (13)2003 原因解析

    php代码很简单: $server="127.0.0.1"; println("Begin"); $link = mysql_connect($server,& ...

  4. C++二维数组 取地址 复制给 二维指针

    本来应该是个简单的问题,但是我就不明白了,为什么会段错误了... #include<stdio.h> #define UINT32 unsigned int UINT32 NType1_X ...

  5. 迭代器模式(Iterator)

    @@@模式定义: 提供一种方法顺序访问一个聚合对象中的各个元素,而又不需暴露该对象的内部表示. @@@练习示例:  工资表数据的整合 @@@示例代码: \pattern\PayModel.java ~ ...

  6. go语言之进阶篇Read的使用

    1.read的使用(备注:读文件) 示例: package main import ( "fmt" "io" "os" ) func Wri ...

  7. linux驱动编写(电源管理驱动)

    对于嵌入式设备来说,合适的电源管理,不仅可以延长电池的寿命,而且可以省电,延长设备运行时间,在提高用户体验方面有很大的好处.所以,各个soc厂家在这方面花了很多的功夫.下面,我们可以看看linux是如 ...

  8. Limu:有关JavaScript的那些值得一看的书

    来源&作者:Limu 又好久没写东西了 ,写上一篇的时候还以为接下来的工作会轻松一些 ,结果未从我所愿呐 ,又是一阵忙碌.而这段时间穿插着做了很多12年淘宝校园招聘的前端面试 ,很多同学都有问 ...

  9. 最小二乘法多项式曲线拟合原理与实现 zz

    概念 最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(x)的近似曲线y= φ(x). 原理 [原理部分由个人根据互联网上的资料进行总结,希望对大家能有用] ...

  10. rqnoj-329-刘翔!加油!-二维背包

    注意排除干扰项. 因为价值不会相等,所以价值的多少与本题没有任何关系,. 所以价值为干扰项,所以不用考虑. 二维背包,简单求解. #include<stdio.h> #include< ...