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


     

    继《微博尾》之《玩转尾巴》好玩尾巴积分版传送门: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下载地址: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中,之后点击以下的“微博。走你“button。就可以到新浪微博发微博,所发的微博也即能显示你所点击的尾巴类型如” 来自 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次返回button退出时显示吐丝”再按一次退出程序“的做法,事实上也非常easy,仅仅需在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、关于菜单button(右上角三个点),可能是由于版本号问题,有些地方显示不了,可在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();  
            } 


    在菜单”关于“button显示相应的页面中,显示作者信息等等那一个页面,横竖屏切换遇到了以下的字看不到了,原因就是没有设置滚动栏,可在相应的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>

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

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

    <activity android:name="com.xiaoku.weibowei.ViewFlipperActivity" android:screenOrientation="nosensor">
    參数还有其它,大家能够研究研究~


    7、点击”微博,走你“button之后,跳到还有一个Activity。这里採用了WebView来訪问传过来的URL值,默认不做处理的话,訪问后会出现能够訪问新浪微博,可是点击不了里面的button之类的,返回也没有直接在浏览器返回(无论你点了多少个页面,一点返回直接跳回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);
    		
    		//点击后退button,让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多种。加入个性尾巴,分享功能提供下载地址)

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


    感谢您的阅读~!



  • 相关阅读:
    Linux ps命令
    SecureCRT注册机使用方法
    微信消息的处理和应答
    微信公众号开发--开发服务器接入微信服务器
    RESTful架构
    OAuth2.0详解
    HTTP头详解
    Cookie/Session机制详解
    学习tornado:安全
    python tornado框架实现CRUD
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7363413.html
Copyright © 2020-2023  润新知