我的第一个android应用——装逼神器《微博尾》

(本文android新手所做,有疑问或建议请回复~版本2.0将在9月份初上线,可在腾讯应用宝上搜索“微博尾”或直接联系新浪微博@请叫我小纯酷

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

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

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

微博尾1.0下载地址:http://android.myapp.com/myapp/detail.htm?apkName=com.xiaoku.weibowei  (可下载对照着功能看下面的讲解)

好了,开始了~~~

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手机产商界面。可在清单文件配置如下:

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

然后在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);
	}
</pre>这里的【 if (this.getFragmentManager().getBackStackEntryCount() == 0) {//最后一个fragment即主页~ 】   也比较关键,因为使用了fragment,不然在ListViewFragment(也就是选择具体某个手机型号的界面)里面点击返回也会执行这一个,不做这段处理的话,也会显示”再按一次退出程序“。<p></p><p></p><p>6、关于菜单按钮(右上角三个点),可能是由于版本问题,有些地方显示不了,可在MainActivity中的onCreate方法做以下处理:</p><p></p><pre name="code" class="java">//显示三个点菜单
        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包裹你要滚动的视图。

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scrollbars="vertical">

包裹要滚动的视图

</ScrollView>

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

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

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

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

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多种,添加个性尾巴,分享功能提供下载地址)

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

感谢您的阅读~!

时间: 2024-10-21 01:29:18

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

装逼神器shellinabox基于WEB远程终端模拟器

<--目录--> 1)shellinabox功能作用 2)shellinabox下载链接 2)安装shellinabox 3)WEB远程登陆 1.shellinabox功能作用 它是一个可以在WEB页面上模拟CRT远程服务器的一个软件,是装逼神器,简单易用高大上 2.shellinabox下载链接 http://pan.baidu.com/s/1pKV5b3H 3.安装shellinabox [[email protected] tmp]# tar xf shellinabox-2.14.ta

装逼神器vim的入门学习

命令vim可以启动vim编辑器 一般情况下我们通过vim 目标文件路径 的形式来使用vim 如果目标文件存在,则用vim打开该文件 如果目标文件不存在则新建并打开文件 vim拥有三种模式: 1.命令模式 ESC 2.插入模式 i 3.ex模式 : vim启动后,默认进入命令模式,任何的模式通过按Esc都可以回到命令模式.命令模式的常用命令如下: i 在光标前插入文本 o 在当前行下面插入新的一行 (转变成了插入模式) dd 删除整行 yy 将当前行的内容放入缓存区(复制) n + yy 将从该行

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

Android特效专辑(六)--仿QQ聊天撒花特效,无形装逼,最为致命 我的关于特效的专辑已经在CSDN上申请了一个专栏--http://blog.csdn.net/column/details/liuguilin.html 日后我所写的特效专辑也会以一添加在这个专栏上,今天写的这个特效,是关于聊天的,你肯定遇到过,就是你跟人家聊天的时候,比如发送应(么么哒),然后屏幕上全部就是表情了,今天我们就是做这个,撒花的特效,国际惯例,上图 截图 实现这样的效果,你要知道贝塞尔曲线,何谓贝塞尔曲线?其实

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

VopSdk一个高逼格微信公众号开发SDK(源码下载) VopSdk一个高逼格微信公众号开发SDK:自动化生产(装逼模式开启) 针对第一版,我们搞了第二版本,老规矩先定个目标. 一 我们的目标 a.移除PayExcute,统一执行入口,目前只保留一个入口Excute b.序列化特性统一,目前只用设置xml特性即可(反序列化时xml和json都可以直接用) c.支持文件上传,目前只有多客服管理上传头像接口用到过 d.使用T4模板自动生产所有Request.Response.以及所有测试Test(装

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

通过前两期的学习,我们可以正确搭建好Android Studio的开发环境,也创建了HelloWorld工程并成功运行,那么本期就带你一起来了解这款强大的IDE开发工具吧. 一.Android Studio主页面板 重新打开Android Studio会进入如下主页面,与第一次打开有略微差别. 从上图可以看到,一共有四大区域,接下来分别简单介绍: 区域1为最近新建或打开的Android Studio工程列表,便于快速进入对应项目.首次使用时该区域为空,列表内容也可以进行删除操作. 区域2为And

WP装逼研究:如何营造让人花钱的游戏

游戏是最好做也是最不好做的项目,游戏的好坏现在都是直接从数据来说话,Windows Phone的游戏应用同样不可能逃出这个行业准则,要说在市场里做的好,那就直接拿数据来说,几乎没人会去在乎游戏到底传达了什么,一刀切看收入,如果解决用户量的问题,下一步一定是收入问题,今天的装逼研究就是探讨如何营造让人花钱的游戏. <我叫MT>.<魔卡幻想>2013年爆出在Windows Phone平台中500万/月流水的消息,引得2014年一片抢滩争夺WP,单单从数据来说,这应该是Windows P

求职篇-带我装逼,带我飞

求职篇-带我装逼,带我飞 前言 又有一段时间没有发表博客,再不发表一篇我就要受不了,啊啊啊啊啊啊,躁动的心在呐喊,为了回馈广大博友的关注,我决定把自己近段时间的求职经历和收获分享一下,让准备踏上求职之路或者想换工作的朋友们有一个非一般的感觉,像撸...串一样.最近小巫老是装逼,以至于很多人都说,带我装逼,带我飞:好,这篇博文就好好带你们装装B,提升一下自己是逼格. 这里小巫列举接下来要详谈的装逼大计: 装逼第一计:妹子,能聊聊人生么 装逼第二计:写一份逼格满满的简历 装逼第三计:如何选择有逼格的

iOS学习之UiTableView仿个人中心页面,据说学会这个控件就能装逼了

苹果电脑真心不习惯啊,一边开发使windows一边是Mac 都不知道按键盘哪个键了.这UiTableView根android ListView一样重要,等学会这个以后我就出去装逼,但愿装逼不要被大神鄙视,哎,没办法,半路出家,谁让我大学学的机械专业,还这么笨的!如果人生能出来,我要当富二代!好了,不多说了,看贱:不对,看图: 卧槽,咋这么大,不管了,男人不都喜欢大吗? 看代码: .h文件里面没东西的我就不贴了: 这是主要代码: 得实现两个协议,根android里面的接口差不多: UITableV

指纹识别,刚需or装逼

提到指纹识别,大多数人第一想到的就是唯一性,提到手机指纹识别,大多数人想到的则是个人安全.自苹果iPhone5s推出指纹识别功能以来,指纹识别就被看成了手机高配标准之一.基于指纹识别高大上的行业意义,手机厂商们开始自觉在自家手机上集成指纹识别功能. 一.苹果是指纹识别技术的推动者 当前市场上的指纹识别手机,有高达6000多的苹果手机,还有中间3000多元的中高端智能手机,还有下到几百元的平民手机,价格可谓一个天上一个地下,这是什么原因呢?真正的原因在于指纹识别技术的方案,还有时间和指纹识别的规模