最近發現 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