微博尾巴不加android,! android应用——装逼神器《微博尾》
(本文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应用——装逼神器《微博尾》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转载】转别人写的HTMLCSS 详细笔
- 下一篇: 好用博客收藏