搜尋此網誌

2015年10月28日 星期三

Android 側邊滑入選單 NavigationView


這個選單功能方便的,可以一次收納很多工具在旁邊又不占空間。
首先要準備的材料有:

gradle 的部份
compile 'com.android.support:design:23.1.0'


版面配置會長這樣:
我們要在 res/layout/mainactivity.xml 裡面設定需要側邊選單然後分別載入側邊選單的上半部和下半部選單部分:

<android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_height="match_parent"
        android:layout_width="wrap_content"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer"
        />


新增 res/layout/nav_header_main.xml (其實沒有也沒差)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="@dimen/nav_header_height"
    android:background="@drawable/side_nav_bar"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:theme="@style/ThemeOverlay.AppCompat.Dark" android:orientation="vertical"
    android:gravity="bottom">

    <ImageView android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:src="@mipmap/ic_launcher"
        android:id="@+id/imageView" />

    <TextView android:layout_width="match_parent" android:layout_height="wrap_content"
        android:text="Android Studio"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:text="android.studio@android.com" android:id="@+id/textView" />

</LinearLayout>



新增  res/menu/activity_main_drawer.xml
這是每個功能的清單:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">
        <item android:id="@+id/nav_camara" android:icon="@android:drawable/ic_menu_camera"
            android:title="Import" />
        <item android:id="@+id/nav_gallery" android:icon="@android:drawable/ic_menu_gallery"
            android:title="Gallery" />
        <item android:id="@+id/nav_slideshow" android:icon="@android:drawable/ic_menu_slideshow"
            android:title="Slideshow" />
        <item android:id="@+id/nav_manage" android:icon="@android:drawable/ic_menu_manage"
            android:title="Tools" />
    </group>

    <item android:title="Communicate">
        <menu>
            <item android:id="@+id/nav_share" android:icon="@android:drawable/ic_menu_share"
                android:title="Share" />
            <item android:id="@+id/nav_send" android:icon="@android:drawable/ic_menu_send"
                android:title="Send" />
        </menu>
    </item>
</menu>


接下來就是 activity 的部份了
要呼叫出來只需要:
        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(MainActivity.this);

接著去設定點下去後的行為:
@Override
    public boolean onNavigationItemSelected(MenuItem item) {
        int id = item.getItemId();

        if (id == R.id.nav_camara) {
            // Handle the camera action
            Toast.makeText(MainActivity.this,"carara",Toast.LENGTH_SHORT).show();
        } else if (id == R.id.nav_gallery) {

        } else if (id == R.id.nav_slideshow) {

        } else if (id == R.id.nav_manage) {

        } else if (id == R.id.nav_share) {

        } else if (id == R.id.nav_send) {

        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drw_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

2015年10月27日 星期二

新增 android 上的浮動按鈕 FloatingActionButton ( Layout篇 )

有些功能我們很常會用到,如果每一個頁面都特別還去主選單裡面點選的話其實挺麻煩。
現在有一種 button 的形式叫做 FloatingActionButton 他可以讓你有個按鈕一直浮在上面
首先,在 gradle 的部份我們要加上

compile 'com.android.support:design:23.1.0'

然後到要加上的頁面 xml上加入:
 <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:src="@drawable/ic_note_add_white_24dp"
        style="@style/floating_action_button"
        app:elevation="6dp"
        app:pressedTranslationZ="12dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true" />

styles.xml 也加一下樣式好了:
 <style name="floating_action_button">
        <item name="android:layout_marginLeft">0dp</item>
        <item name="android:layout_marginTop">0dp</item>
        <item name="android:layout_marginRight">16dp</item>
        <item name="android:layout_marginBottom">16dp</item>
    </style>


google 有提供 Marerial icon 的圖檔下載
https://www.google.com/design/icons/

2015年10月23日 星期五

android 儲存使用者設定值 SharedPreferences

有一些簡單的設定資料我們會需要記在 app 的本地端,可是又不需要用到資料庫那麼麻煩。例如簡易的登入,系統環境設定,或是判斷是不是第一次進來之類的。
這時候我沒可以用 SharedPreferences 這個功能來搞定。

儲存
//建立SharedPreferences物件
        SharedPreferences.Editor sh = PreferenceManager.getDefaultSharedPreferences(this).edit();
        sh.putString("PValue", "Hello");
        sh.commit();


讀取
String GetPV = PreferenceManager.getDefaultSharedPreferences(this).getString("PValue","A");

清除記錄
//建立SharedPreferences物件
        SharedPreferences.Editor sh = PreferenceManager.getDefaultSharedPreferences(this).edit();
        sh.clear();
        sh.commit();

2015年10月22日 星期四

關閉 android 的系統通知列(全螢幕模式)

話說
早期的 android 軟體都會有兩個部分很礙眼
其中一個就是一直在最上面顯示時間和通知的系統列
只要加上一小段


getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN ,
                WindowManager.LayoutParams. FLAG_FULLSCREEN);

2015年10月14日 星期三

android 利用 android-query 取得外部API 的 JSON 內容

前端的程式如果需要接外部的資料庫,在 html 中我們通常會用  jQuery 的 ajax 功能來完成。
在 Android 中可以使用 GSON 來接,不過現在要介紹的是 android query 我們簡稱 AQ。

我們可以在這邊看到相關的資料
https://code.google.com/p/android-query/

https://github.com/androidquery/androidquery/releases/tag/0.26.8


AQuery aQuery;

aQuery  = new AQuery(this);
String api_url = "API路徑";
aQuery.ajax(api_url,null, JSONObject.class,new AjaxCallback(){
    @Override
    public void callback(String url, JSONObject object, AjaxStatus status) {
        super.callback(url, object, status);
        Log.e("---------",object.toString());
    }
});

有一件事情很重要,很容易忘記(我是說我)就是要把 Internet 的權限打開,不然什麼事情都不會發生也不會閃退。