從零開始寫安卓APP 實戰記錄 第一周

2021-10-06 16:36:30 字數 2969 閱讀 5203

今晚要檢查進度,趕在下午把前後端合併完成。後端兩位同志很給力地接好了資料庫,並且寫好了登入註冊和檢索題目三個功能。我慢一點,寫好了登入和註冊的介面,已經對接完畢。

效果大概如下:

登入介面

註冊介面1

註冊介面2

註冊介面2 滾動選擇器效果

這個滾動選擇器是借用的大佬的**,大家看這裡:

滾動選擇器

我改動了一點點,包括各個控制項的高度和位置,但是現在確定鍵還有一點點擋,後續還需要微調。然後外層button的內容沒有設預設值,在改動後會設定成為當前選擇值。

這裡後端朋友說資料傳後台的時候編碼有點問題,用中文會亂碼,但因為時間比較趕,就先全英文了,後面再改。

下面說幾個遇到的問題和解決方法。

可以看到現在的幾個標題欄都是隱藏了的,這個地方需要在androidmanifest.xml下進行設定

android:name

=".register"

android:launchmode

="singletask"

android:theme

=>

activity

>

android:name

=".register"

android:theme

="@android:style/theme.notitlebar"

>

activity

>

我是從零開始憑空寫的,自然是新建了乙個空白的工程,而android studio的全新版本自然是預設用的androidx。但是我的後端小夥伴們是硬擼的,他們從別人那裡搞了乙份開源**在復用,因此一開始就是在別人的工程基礎上改的,而那個工程是android.support的老版。

因此在第一次合的時候,我的所有androidx的東西都不能跑。選擇哪個版本呢?自然是選擇google公司有在維護的新東西。於是後端小夥伴們新建了乙個工程,把**粘進去(因為**量還不大),有問題的地方改掉,才合成功。

androidx對sdk好像有版本要求。雖然配環境的時候大家應該都是裝的我發群裡的乙個檔案,但不知道為什麼有位小朋友跑偏了,下了三個sdk,最後裝上了乙個最老版本,不支援androidx。同時請確保工程裡的gradle版本在3.4以上。

首先記住一點,在android的xml中,都是先靜態新增乙個控制項,剩下的控制項通過addview動態新增。那麼如果有控制項覆蓋的情況,先加入的控制項就會被後加入得控制項覆蓋。

而button本身挺煩的,這似乎是安卓的乙個小bug。因為它有個按下之後的陰影還是什麼問題,它會永遠在最上層,不能被覆蓋。大家可以看到我的最後效果裡,滾動選擇器應該在最上層,擋住下方的註冊按鈕。這裡我比較推薦的方法是在button控制項裡加一句:

android:statelistanimator="@null"
bringtofront並不能阻止button在最上層。當然我也可以在調出滾動選擇器的時候加一句隱藏按鈕,那就比較麻煩了。

也有人建議在button外面裹一層layout,不知道為什麼對我不適用。

乙個比較全的總結見這裡:

android button 總是在最上層的問題

看到空指標自然是很慌的,回想起資料結構的時候被空指標支配的恐懼……

看一下它指向的物件是啥:

pickerscrlllview.

setonselectlistener

(pickerlistener)

;

哦,是pickerscrlllview。可以確認的是,外面名字沒有寫錯,那就是賦值這一步出錯了:

pickerscrlllview =

(pickerscrollview)

findviewbyid

(r.id.pickerscrlllview)

;

事實證明,包含有id為pickerscrlllview的那個xml檔案沒有被引用。後端小夥伴在合的時候複製了兩行然而並沒有include layout.xml,自然後續就報錯了。

如果你的程式報錯android.view.inflateexception: binary xml file line #16: binary xml file line #16: error inflating

那麼大概率是你粘了別人的**,然而改路徑沒有改完。我自個兒用滾動選擇器的時候就跟這個error鬥爭過了。不幸的是,我和後端小夥伴們的路徑也不一樣,他們也沒改乾淨,因此在這裡卡了很久。

不要以為沒有紅色就是改完了!看一眼xml檔案,它不會紅,但是它可能有問題:

android:id

="@+id/pickerscrlllview"

android:layout_width

="match_parent"

android:layout_height

="200dp"

android:background

="#ffffff"

/>

你看,這裡也需要路徑,但是如果你的路徑是錯的,它不會提示你(攤手)。

其它的都是些小問題啦,基本上搜一搜就出來了,就不記錄了。

下週可能要趕一下計算機系統安全和計算機體系結構的實驗,不知道這邊能做多少,加油吧。

如何從零開始寫shell指令碼

如何從零開始寫shell指令碼 一 前言 為什麼我們需要使用shell 指令碼?難道我們之前學習的c c 不能夠完成shell指令碼語言的功能嗎,為什麼我們還需要學習shell指令碼?學習shell指令碼最大的好處是能夠輕易處理檔案與目錄之類的物件,如果同樣此類任務,利用c 或者c,則編寫程式很麻煩...

從零開始寫rest的demo (c )

c 啊,本人是空白,突然安排個任務,c 做個demo,用來與rest伺服器進行通訊。艱鉅的任務,每一步進行記錄,供來者借用。1.新建win32控制台專案,vs2013 2.安裝boost類庫 boost是乙個和stl類似的標準庫,但它擴充了stl使得泛型的優點發揮到最佳。因此現在boost比stl更...

從零開始寫STL 容器 vector

vector又稱為動態陣列,那麼動態體現在 vector和一般的陣列又有什麼區別?vector中各個函式的實現原理是怎樣的,我們怎樣使用會更高效?在容器類的最前面我們會看到許多的typedef 常見的如下 public typedef t value type typedef value type ...