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

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

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

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

好了,开始了~~~

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

2、搭建环境,由于现在的手机android版本都基本4.xx了,故而选择目标版本4.2.2,最小支持版本3.2。

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

先上张首页图效果如下:

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

这里采用了ListView布局,表面看只有一个TextView,里面其实还隐藏了另一个TextView,用于存放对应的app_src,当点击ListView的某个item时,对应的app_src将被添加到对应要发布微博的URL中,之后点击下面的“微博,走你“按钮,即可到新浪微博发微博,所发的微博也即能显示你所点击的尾巴类型如” 来自 iPhone5s “等~~

总体流程就是这样子。

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

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

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

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

看下面代码

Fragment selectPhoneFragment = new SelectPhoneFragment();

FragmentTransaction transaction = getFragmentManager().beginTransaction();

Bundle bundle = new Bundle();

bundle.putString("phoneName", PHONE_NAME[position]);

selectPhoneFragment.setArguments(bundle);

transaction.replace(R.id.main_fragment,selectPhoneFragment);

transaction.addToBackStack(null);

transaction.commitAllowingStateLoss();

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

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

package com.xiaoku.weibowei.util;

import java.io.IOException;

import java.io.InputStream;

import java.util.Properties;

/**

* 读取property文件

*/

@SuppressWarnings("serial")

public class FileUtil implements java.io.Serializable{

private Properties prop ;

private InputStream is ;

public FileUtil(String filename)

{

prop = new Properties() ;

is = getClass().getResourceAsStream("/assets/"+filename);

try {

prop.load(is);

if(is!=null)

is.close();

} catch (IOException e) {

System.out.print(e.getMessage()) ;

e.printStackTrace();

}

}

//取得属性

public String getProperties(String PropertyName)

{

return prop.getProperty(PropertyName);

}

}

从上面的代码可以看到,我存放的property文件是放在assets目录下的。

于是,我就可以在property文件中存放对应的手机以及对应微博尾键值对了。键为手机商,值为多个尾巴组合起来。如:华为=荣耀6的尾巴#荣耀6&荣耀3C的尾巴#荣耀3C

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

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

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

//横竖屏切换

@Override

public void onConfigurationChanged(Configuration newConfig) {

/*if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){

Toast.makeText(getApplicationContext(), "横屏", Toast.LENGTH_LONG).show();

}else{

Toast.makeText(getApplicationContext(), "竖屏", Toast.LENGTH_LONG).show();

}*/

super.onConfigurationChanged(newConfig);

}

5、关于2次返回按钮退出时显示吐丝”再按一次退出程序“的做法,其实也很简单,只需在MainActivity中重写一下onKeyDown,里面做一下判断

//2次返回退出应用

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK) {

if (this.getFragmentManager().getBackStackEntryCount() == 0) {//最后一个fragment即主页~

if ((System.currentTimeMillis() - mExitTime) > 2000) {

Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();

mExitTime = System.currentTimeMillis();

}else {

finish();

}

return true;

}

}

return super.onKeyDown(keyCode, event);

}

这里的【 if (this.getFragmentManager().getBackStackEntryCount() == 0) {//最后一个fragment即主页~ 】   也比较关键,因为使用了fragment,不然在ListViewFragment(也就是选择具体某个手机型号的界面)里面点击返回也会执行这一个,不做这段处理的话,也会显示”再按一次退出程序“。

6、关于菜单按钮(右上角三个点),可能是由于版本问题,有些地方显示不了,可在MainActivity中的onCreate方法做以下处理:

//显示三个点菜单

try {

ViewConfiguration config = ViewConfiguration.get(this);

Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");

if(menuKeyField != null) {

menuKeyField.setAccessible(true);

menuKeyField.setBoolean(config, false);

}

} catch (Exception e) {

e.printStackTrace();

}

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

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:scrollbars="vertical">

包裹要滚动的视图

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

里面又涉及到横竖屏切换问题,一横屏,显示的图片不是很好看,故而应该设置只允许竖屏显示,可在清单文件配置对应的Activity:

参数还有其他,大家可以研究研究~

7、点击”微博,走你“按钮之后,跳到另一个Activity,这里采用了WebView来访问传过来的URL值,默认不做处理的话,访问后会出现可以访问新浪微博,但是点击不了里面的按钮之类的,返回也没有直接在浏览器返回(不管你点了多少个页面,一点返回直接跳回ListViewFragment页面),故需要做一下处理如下:

@SuppressLint({ "SetJavaScriptEnabled", "SdCardPath" })

@Override

public void onViewCreated(View view, Bundle savedInstanceState) {

super.onViewCreated(view, savedInstanceState);

String url = (String) getArguments().get("url");//接收传过来的URL

webView = (WebView) getActivity().findViewById(R.id.webview);

//点击后退按钮,让WebView后退一页(也可以覆写Activity的onKeyDown方法)

webView.setOnKeyListener(new View.OnKeyListener() {

@Override

public boolean onKey(View v, int keyCode, KeyEvent event) {

if (event.getAction() == KeyEvent.ACTION_DOWN) {

if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {

webView.goBack();   //后退

//webview.goForward();//前进

return true;    //已处理

}

}

return false;

}

});

//设置浏览器可用

WebSettings s = webView.getSettings();

s.setBuiltInZoomControls(true);

s.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);

s.setUseWideViewPort(true);

s.setLoadWithOverviewMode(true);

s.setSavePassword(true);

s.setSaveFormData(true);

s.setJavaScriptEnabled(true);

// enable navigator.geolocation

s.setGeolocationEnabled(true);

s.setGeolocationDatabasePath("/data/data/com.xiaoku.weibowei/databases/");

// enable Web Storage: localStorage, sessionStorage

s.setDomStorageEnabled(true);

webView.requestFocus();

webView.setScrollBarStyle(0);

webView.setWebViewClient(new WebViewClient(){

@Override

public boolean shouldOverrideUrlLoading(WebView view,

String url) {

view.loadUrl(url);

return true;

}

});//自定义浏览器

webView.loadUrl(url);

Toast.makeText(getActivity(), "加载网页,请稍等...", Toast.LENGTH_LONG).show();

}

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

对于源码目前暂不提供,有问题可回帖交流!

微博尾2.0版本已完工,9月份初上线。(版本预告:尾巴达90多种,添加个性尾巴,分享功能提供下载地址)

感谢您的阅读~!

微博尾巴不加android,! android应用——装逼神器《微博尾》相关推荐

  1. Eclipse 主题(Theme) 设置之程序员大牛必备的装逼神器

    < 程序员大牛必备的装逼神器 > 一个牛逼的程序员,除了有牛逼的技术,还要有高逼格的风格,说白了,就和人一样,单是内在美还不行,必须外表也要美,就好比,一个乞丐,他内在美,但是全身臭气熏天 ...

  2. 利用Python制作微信跳一跳外挂,微信好友装逼神器!

    导语 前几天在GitHub上看到有人利用Python玩一款名为"跳一跳"的微信小程序,于是打算自己也来试一试,进群:711944363 获取微信跳一跳源码! 演示工具 电脑系统:W ...

  3. 小程序源码:王者荣耀装逼神器助手-多玩法安装简单

    这是一款以王者荣耀为主的一款装逼生成工具 支持王者营地战绩DIY生成(支持新旧两种营地版本) 支持王者荣耀游戏首页DIY制作生成 支持王者荣耀个人主页界面DIY制作生成 支持天梯界面DIY制作生成 另 ...

  4. 几款黑客Geek装逼神器,打开乱按键盘就行

    我们常常会在一些好莱坞电影大片里看到超级黑客高手,在电脑前轻松"黑"进别人的安全系统的场景.那纯熟自如地输入一大堆复杂的代码,不一下子就入侵/破解完成,是不是很羡慕? 其实咱们也可 ...

  5. 微信小程序:最牛王者荣耀装逼神器助手微信小程序

    这是一款以王者荣耀为主的一款装逼生成工具 支持王者营地战绩DIY生成(支持新旧两种营地版本) 支持王者荣耀游戏首页DIY制作生成 支持王者荣耀个人主页界面DIY制作生成 支持天梯界面DIY制作生成 另 ...

  6. 最牛王者荣耀装逼神器助手微信小程序源码下载支持多种流量主模式

    这是一款以王者荣耀为主的一款装逼生成工具 支持王者营地战绩DIY生成(支持新旧两种营地版本) 支持王者荣耀游戏首页DIY制作生成 支持王者荣耀个人主页界面DIY制作生成 支持天梯界面DIY制作生成 另 ...

  7. 强大新UI装逼神器微信小程序源码下载用不完的模板支持多种流量主模式

    大家好这是一款装逼制作的一款微信小程序源码 标题为什么说用不完的模板呢,因为小编原本想数一下有多少个模板 但是小编一直翻呀翻,翻了多久都忘记了,都还没到底 所以说可以想象模板有多少,另外呢里面的模板还 ...

  8. 小程序源码:强大新UI装逼神器微信小程序源码下载

    大家好这是一款装逼制作的一款微信小程序源码 标题为什么说用不完的模板呢,因为小编原本想数一下有多少个模板 但是小编一直翻呀翻,翻了多久都忘记了,都还没到底 所以说可以想象模板有多少,另外呢里面的模板还 ...

  9. 这几个Python装逼神器一定要收藏好

    大家在写技术分享型文章,写技术分享PPT,或者做技术视频的时候,经常需要贴代码.比较简单的做法是直接复制代码,然后粘贴成文档,稍微美观一点就是直接对开发编辑器界面截图. 这两种做法都不够美观,不能区别 ...

  10. 微信小程序:强大新UI装逼神器

    大家好这是一款装逼制作的一款微信小程序源码 标题为什么说用不完的模板呢,因为小编原本想数一下有多少个模板 但是小编一直翻呀翻,翻了多久都忘记了,都还没到底 所以说可以想象模板有多少,另外呢里面的模板还 ...

最新文章

  1. 使用mysql_fetch_row()以数组的形式返回查询结果
  2. 说说JSON和JSONP,也许你会豁然开朗
  3. PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to fi
  4. 离线安装Ubuntu虚拟机和GNURadio
  5. 用python重复下载文件_python 爬虫 重复下载 二次请求
  6. router3 BGP1 基础部分
  7. 图像基本群运算--滤波
  8. android--在命令行中生成Android的数字证书keystore文件
  9. excel导入linux乱码怎么解决方法,,请大家都来看下,Excel导入有乱码?原因出在哪里?应该怎么解决?...
  10. 实现多线程Callable接口
  11. bzoj 3714: [PA2014]Kuglarz
  12. 约瑟夫环数学公式求解
  13. python如何打开excel表格_python怎么读取excel表格
  14. c语言程序设计 滴水视频,编程达人滴水中级班视频教程
  15. 极速办公(PPT)插入的图像如何铺满页面
  16. plc串口通讯 qt_Qt 编写串口调试助手
  17. 优化手机的实用指南 - 图形方法
  18. 技术分析中的五种常见指标
  19. Linux下笔记本禁用触摸板
  20. Cocos2d-x3.8.1制作愤怒的小鸟

热门文章

  1. 跨界教授林宙辰:从北大来,回北大去
  2. 第五章 区块链应用的全球进展
  3. 如何包含鼠标指针(箭头)截图或者录屏?
  4. Flutter学习(一)
  5. mk突变点检测_mk突变检测
  6. 手工玫瑰花_立体折纸玫瑰花的手工玫瑰花折纸大全教程
  7. 还在舔屏KO?全球身价最高黑客Jeff Moss更酷
  8. 计算机上的字体太小怎么办,Win7电脑网页字体变小了怎么办?
  9. 李敖之子李戡:《严正声明─我对韩…
  10. 鱼那么信任水, 水却煮了鱼!