WeChat_Demo:類微信移動開發
小白的第一次移動程序開發
PS:這是一位開發小白的第一篇blog
之前沒有過安卓開發經驗,本學期選了移動互聯網開發課程,希望可以給自己帶來一些開發經驗,真正的鍛鍊一下自己的開發能力,因爲是第一次寫blog,寫的不好請見諒🎉
附上git上的項目鏈接🎈
- 鏈接: Git上發佈的項目WeChat_Demo.
- 鏈接: Gitee上發佈的項目
背景介紹
類微信界面開發,是本學期在移動互聯網開發課程中做的第一小項目,規模不大,但還是學到了不少東西😏:
- 開發工具 :Android Studio;
- 後臺語言 :Java;
- 基本功能 :點擊按鈕,實現主界面的切換。
前期準備
- 下載、安裝Android Studio :
小女子用的是Android Studio(後簡稱AS),用過AS的直接忽略,沒用過的可參考:
下載:https://developer.android.com/studio
安裝流程:https://www.cnblogs.com/xiadewang/p/7820377.html; - gradle同步問題 :
可參考:https://jingyan.baidu.com/article/597a06430710ca312b52430b.html; - SDK配置 :
在安裝AS時,先不要下載SDK,進入AS之後,
點擊SDK Manager後,進入以下界面,選擇你需要的SDK版本:
- AVD配置 :
進入AS之後,在Tools下選擇AVD Manager,點擊選擇自己想要的模擬器。
項目結構
- project :
選擇project可以查看項目的完整結構:
- Android :
選擇android可以查看項目的主幹結構(個人比較習慣選擇這種目錄模式,比較簡潔):
Git/Gitee上管理項目
- github上註冊賬號 ;
- 下載git工具 :
官網下載:https://git-scm.com/downloads - 上傳本地項目 :
教程參考:https://www.jianshu.com/p/c5f3979acecf
項目運行效果截圖
-
微信界面 :
-
朋友界面 :
-
通訊界面 :
-
設置界面 :
我Git上的項目🎈
鏈接: Git上發佈的項目WeChat_Demo.
鏈接: Gitee上發佈的項目
項目核心代碼🔑
- 初始化組件:
private void initFragment(){
fm=getFragmentManager();
FragmentTransaction transaction=fm.beginTransaction();
transaction.add(R.id.id_content,mTab01);//第一個參數爲int型
transaction.add(R.id.id_content,mTab02);
transaction.add(R.id.id_content,mTab03);
transaction.add(R.id.id_content,mTab04);
transaction.commit();
}
- 中間主要頁面的切換函數:
private void selectfragment(int i){
FragmentTransaction transaction=fm.beginTransaction();
hidefragment(transaction);
switch (i){
case 0:
transaction.show(mTab01);
mImgWeixin.setImageResource(R.drawable.tab_weixin_pressed);
break;
case 1:
transaction.show(mTab02);
mImgFrd.setImageResource(R.drawable.tab_find_frd_pressed);
break;
case 2:
transaction.show(mTab03);
mImgAddress.setImageResource(R.drawable.tab_address_pressed);
break;
case 3:
transaction.show(mTab04);
mImgSettings.setImageResource(R.drawable.tab_settings_pressed);
break;
default:
break;
}
transaction.commit();
}
- 按鈕點擊事件:
public void onClick(View v){//點擊響應
resetimg();
switch (v.getId()){
case R.id.id_tab_weixin:
selectfragment(0);
break;
case R.id.id_tab_friend:
selectfragment(1);
break;
case R.id.id_tab_contact:
selectfragment(2);
break;
case R.id.id_tab_settings:
selectfragment(3);
break;
default:
break;
}
}
- 其他fragment事件:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.tab01, container, false);
}
遇到的問題及解決方法❗
- Android和Androidx:Androidx是向下兼容安卓版本的時候產生的支持庫。我新建項目AS默認選中了AndroidX,但是Androidx與項目中很多依賴發生了衝突。
如何去掉默認選中AndroidX的方法:Go to the SDK manager in android studio and uncheck android Q ( 29 );或者修改當前項目gradle.properties:
android.useAndroidX=true
android.enableJetifier=true
- 關於引入的class:將MainActivity.java文件中import的Androidx.* class文件修改成Android.* class後,出現瞭如下圖所示問題:
原因:由於在MainActivity.java文件中用了其他Java文件中的變量,而其他Java文件中引入了Androidx.* class;
解決方法:將所有java文件中的Androidx.* class刪掉之後就解決了問題。 - Xml文件的圖標問題:刪除Androidx.* class後,xml文件在顯示時,圖片的引入會出現如下問題(圖標引入失敗):
解決方法:將srcCompat改成android:src
- 按鈕的點擊屬性:
屬性設置:設置按鈕的clickable屬性才能實現點擊
android:clickable="false"
項目總結✔
- 第一次做移動開發的項目,項目規模不大,但是通過本次項目的練習,對AS的使用熟悉了不少;
- 我們分了兩節課完成這個小Demo,第一節課完成界面的基本UI設計,這一階段基本使用的是拖拽+屬性設置完成,沒有什麼邏輯上的難點,值得注意的是,在設計UI時,要注意把一個大的界面分成多個小的組件,再在整個界面中利用FrameLayout引用每個小的部分;
- 在後臺開發過程中,有一個Androidx的問題,需要在今後的開發過程引起注意!📝