個人技術部落格

wujunyi發表於2017-11-10

個人技術部落格

由於本人在“人月神教”小組只要負責Android前端UI的工作,所以最近這段時間也一直在學習相關內容,算是有些收穫,至少感覺做APP還是一件很有意思的事。

Java

很羞愧的說,在做這項作業之前,我只學過C和C++,由於Android開發是基於Java的,所以我花了三天時間看完了慕課網的Java相關基礎教程,總結出來Java其實和C++非常類似,都是偏於物件導向的語言,強調類與方法,繼承多型介面等概念比較重要。由於時間有限並沒有深入學習Java,只是大致瞭解了一下Java的基本語法格式,主要做到能看得懂,不拖以後Android開發的後腿。

Android

鄙人寫安卓用的開發工具是Android Studio,之所以用Android Studio,是因為覺得eclipse+ADT比較老了,谷歌已經在慢慢淡化對eclipse的支援,甚至下架了ADT的下載連結,而Android Studio畢竟是谷歌親生IDE,之後也會成為Android開發的主流IDE。其實就是覺得Android Studio更高大上。而且是團隊大佬們定的規矩。給大佬遞茶。
下面說一些我在做UI時遇到的一些問題:

用SharedPreferences實現首次登入顯示引導介面

很多優秀的軟體都有引導介面,來引導使用者更好地使用APP,於是我感覺初次登陸的引導介面十分的關鍵。最開始做的時候非常頭疼,因為什麼都不會,一直想著如何判斷是否是第一次登陸,終於查閱了多方教程找到了用SharedPreferences實現首次登入顯示引導介面的方法。
SharedPreferences類,它是一個輕量級的儲存類,特別適合用於儲存軟體配置引數,如儲存使用者密碼等資訊的時候就可以用到,當然也可以用來記錄是否是首次登入。
首先,新建一個SharedPreference類,用來返回或者修改儲存在本地的記錄資訊,我這裡的記錄資訊是isLogin,即是否初次登陸,下面是程式碼:

public class SharePreference {

        Context context;
        public SharePreference(Context context)
        {
            this.context = context;
        }
        /****設定狀態  false為安裝後第一次登入,true為已經登入過****/
        public void setState()
        {
            SharedPreferences sp = context.getSharedPreferences("save", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = sp.edit();
            editor.putBoolean("isLogin", true);
            editor.commit();
        }
        /***獲取狀態***/
        public boolean getState()
        {
            SharedPreferences sp = context.getSharedPreferences("save", Context.MODE_PRIVATE);
            boolean b = sp.getBoolean("isLogin", false);
            return b;
        }

}

接著,就可以在相應要呼叫讀取SharedPreferences資訊的地方使用了,比如我的是歡迎頁點選按鍵根據是否首次登入跳到不同的頁面,程式碼如下:

button1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                SharePreference sp=new SharePreference(FirstActivity.this);
                boolean isLogin = sp.getState();
                if(isLogin){
                    Intent intent=new Intent(FirstActivity.this,MainActivity.class);
                    startActivity(intent);
                }
                else {
                    sp.setState();  //將登陸狀態設定為true;
                    Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
                    startActivity(intent);
                }
            }
        });

用此種方法還可以實現記住密碼等儲存簡單使用者資料的功能。

給checkbox更換選中框樣式(PS:自帶的太醜)

  • 首先肯定要先找兩張令自己滿意的選中框樣式圖,一張是選中的,一張是沒選中的,命名select和noselect,調整到合適的解析度(這很重要,不然最後選中框會變得和文字不協調,我一般文字大小50sp的話,選中框樣式大概調成35*35解析度大小的,調整解析度的話,建議用PS),然後把它們放入drawable資料夾中(Android的圖片素材統一放在這個資料夾裡)
  • 接著右鍵res\drawable,新建drawable resourse file,然後在裡面新增
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_checked="true"
        android:drawable="@drawable/select"
        />
    <item
        android:state_checked="false"
        android:drawable="@drawable/noselect"
        />
</selector>
  • 在values資料夾下面的style.xml檔案裡增添如下程式碼,style name的名字可以隨便取,但是item name須為: android:button(會有程式碼提示),引用你定義的選擇器(有程式碼提示 Android Studio 程式碼提示快捷鍵為 "Ctrl+Alt+空格")
<style name="check_box">
        <item name="android:button">
            @drawable/checkbox
        </item>
    </style>
  • 在layout資料夾下的對應的xml引用你所定義的style,即在checkbox屬性中新增
style="@style/你的style name

完成,選的圖片如果好看的話,那不知道比自帶的高到哪裡去

Android Studio介面隱藏標題欄

  • APP執行時如果需要臨時隱藏狀態列,只需要在該動作前加入

getSupportActionBar().hide();

即可,不過只有執行的時候才能看到標題欄被隱藏了,在IDE裡編輯的時候還是會有標題欄

  • 無論何時都隱藏狀態列

    網上找的教程多是eclipse版的,不適用於Android Studio。原因是Android Studio的Activity類繼承的是AppCompatActivity,這個是屬於support v7附加包的類。而eclipse使用的則是v4包,繼承的是Activity類。所以兩者的方法不通用,這裡介紹下Android Studio隱藏狀態列的方式:
  • 修改AndroidMainfest.xml中的 theme為
 android:theme="@style/AppTheme"

即預設設定

  • 在values\style.xml中把
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

改為

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

待續....

相關文章