搜尋此網誌

2015年11月26日 星期四

Android RecyclerView 簡單教學範例

RecycleView是一種進化版的 ListView 詳細的特點因為介紹很多我就先跳過了,我們來實作吧

要準備的材料有:

RecyclerView 範例檔 github 下載

Java檔案

  • MainActivity.java
  • MyAdapter.java
  • ItemData.java

View檔案

  • activity_main.xml
  • item_layout.xml

Gradle

  • compile 'com.android.support:recyclerview-v7:23.1.1'



遊戲開始: 

Layout


activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    tools:context="com.hmkcode.android.recyclerview.MainActivity" >
 
    <android.support.v7.widget.RecyclerView
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity"
    />
</RelativeLayout>


item_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="80dp"
    android:background="@drawable/border"
    >
   <TextView
         android:id="@+id/item_title"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
          />
</RelativeLayout>


JAVA

MainActivity.java
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //  宣告 recyclerView
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        
        // 設定要給 Adapter 的陣列為 itemsData
        ItemData itemsData[] = {
                new ItemData("hello1"),
                new ItemData("hello2"),
                new ItemData("hello3"),
        };
        
        MyAdapter mAdapter = new MyAdapter(itemsData);

        // 將 mAdapter 交給 recyclerView 顯示
recyclerView.setAdapter(mAdapter); recyclerView.setItemAnimator(new DefaultItemAnimator()); }

這邊我們可以發現我們需要用到兩個 class ,分別是 ItemData 和 MyAdapter

ItemData.java
public class ItemData {
    private final String title;

    public ItemData(String title) {
        this.title = title;
    }
    public String getTitle(){
        return title;
    }
}
在上一個動作中,我們將陣列傳進去給 ItemData 。就是在 public ItemData(String title) 這邊去做接取的動作。如果每一個 ItemData 有兩個欄位的話就會是要做成 public ItemData(String key的名稱,String 第二個key的名稱)


MyAdapter.java
public class MyAdapter extends RecyclerView.Adapter {
    private ItemData[] itemsData;
    public MyAdapter(ItemData[] ItemData){ //這邊是接 MainActivity 傳進來的值
        this.itemsData = ItemData;
    }



    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, null);
        ViewHolder viewHolder = new ViewHolder(itemLayoutView);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) {
            // 設定 textView 的文字由 itemsData 取出,而 itemsData 的內容已經在 ItemData.java 設定好了
            holder.textView.setText(itemsData[position].getTitle());

    }

    @Override
    public int getItemCount() {
        // 顯示的數量
        return itemsData.length;
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        public TextView textView;
        public ViewHolder(View itemView) {
            super(itemView);
        // 設定 textView 為 item_title 這個 layout 物件
textView = (TextView) itemView.findViewById(R.id.item_title); } } }

大功告成!


下一篇我們將會讓這個 RecyclerView 的清單可以執行點擊動作

2015年11月6日 星期五

Android 讀秒後自動執行換頁

這個功能通常我們會用在首頁做歡迎的動作


final android.os.Handler handler = new android.os.Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                startActivity(new Intent(Welcome.this, MainActivity.class));
            }
        },1000);

這個功能包含了使用 Handler 的 postDelayed 執行等待一段時間後進行動作,以及轉頁。
轉頁這個功能就請參閱
http://wolf-android.blogspot.tw/2012/11/android-intent.html


2015年11月5日 星期四

Android 實現 google 登入 (1) 準備 & 版面

官方技術文件網址如下
https://developers.google.com/identity/sign-in/android/

要實現這個功能之前要準備的有:
載入 play-services 

設定 AndroidManifest.xml

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />





向 google 申請使用權限
https://developers.google.com/mobile/add


我們這次要使用的就是 google Sign-in 這個功能。
原則上就是一步一步走下去即可
到最後他會需要你將自己的 keysotre 中取得sha1的金鑰 ,這個有很多教學就不贅述了。
可以參考下面的連結:
http://nosyandroid.blogspot.tw/2015/10/android-get-keytool-sha1.html

最後面他會請你下載一個  json 的設定檔,我實驗了一下其實沒啥用(沒去管他也可以運作)。

我們這一篇先討論一下版面 要把 google 登入的 icon 放進來

只需要再 layout 裡面放上
<com.google.android.gms.common.SignInButton
        android:id="@+id/sign_in_button"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"/>


就可以長出登入按鈕,順便我們在補個登出的按鈕吧

<Button
        android:id="@+id/sign_out_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_below="@+id/sign_in_button"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignRight="@+id/sign_in_button"
        android:layout_alignEnd="@+id/sign_in_button"
        android:text="sign out btn" />