顯示具有 appcompat 標籤的文章。 顯示所有文章
顯示具有 appcompat 標籤的文章。 顯示所有文章

2013/08/14

Example of using AppCompat

Actionbar 是 android 3.0 以後才有的, 所以之前都是使用 actionbarsherlock 來往前相容.
最近發現 google 也推出 actionbar compat 的版本, 所以就改使用 google.
以下是使用範例 :

要使用 actionbar, 首先在 menu layout 就必須做一些修正.
以下是使用的 layout, 可以看到在 showAsAction 的部份的不同. myapp 可以自訂成自己所要使用的字串
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:myapp="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/action_settings"
        android:title="@string/action_settings"
        android:orderInCategory="100"
        android:icon="@android:drawable/ic_menu_preferences"
        myapp:showAsAction="ifRoom" />
</menu>

以下是測試的 layout.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              tools:context=".MainActivity"
              android:orientation="vertical">

    <ListView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
</LinearLayout>

而要使用 AppCompat 的話, activity 必須繼承 ActionBarActivty
package tw.clotai.appcompatexample;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends ActionBarActivity {

    final String[] data = {"1", "2", "3", "4", "5", "6"};

    ListView mList = null;

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

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                this, android.R.layout.simple_list_item_1, data);

        mList = (ListView)findViewById(R.id.list);
        mList.setAdapter(adapter);

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    
}


特別注意的是在 AndroidManifest.xml 裡面的 theme 必須使用以下幾種, 否則就會有問題.
Theme.AppCompat
Theme.AppCompat.Light
Theme.AppCompat.Light.DarkActionBar