私はSherlockライブラリを使用しており、自分でも実装しています。私の問題は、メニューに2つのアイテムを追加したことです。今度は、アクションバーの左側に1つのアイテム、アクションバーの右側に2番目のアイテムが必要です。どのようにそれをするのですか?
質問する
35268 次
2 に答える
27
このようなアクションバーを作成することはできますが、メニューを膨らませるよりも少し複雑です。メソッドで作成されたメニューは、onCreateOptionsMenu()
常に右揃えになるか、分割アクションバーに配置されるか、メニューキーの下に非表示になります。
アクションバーに2つのメニュー項目(1つは左端に、もう1つは右端に)だけを含める場合は、アクションバーにカスタムビューを作成する必要があります。
カスタムビューのレイアウトは次のようになります。
<?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="fill_parent">
<ImageButton android:src="@drawable/ic_menu_item1"
android:background="?attr/actionBarItemBackground"
android:layout_width="?attr/actionBarSize"
android:layout_height="match_parent"
android:scaleType="centerInside"
android:id="@+id/item1"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"/>
<ImageButton android:src="@drawable/ic_menu_item2"
android:background="?attr/actionBarItemBackground"
android:layout_width="?attr/actionBarSize"
android:layout_height="match_parent"
android:scaleType="centerInside"
android:id="@+id/item2"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"/>
</RelativeLayout>
カスタムビューを使用するテーマを定義します。テーマには次のものが含まれている必要があります。
<style name="MyTheme" parent="@style/Theme.Sherlock">
<item name="actionBarStyle">@style/MyActionBarStyle</item>
<item name="android:actionBarStyle">@style/MyActionBarStyle</item>
</style>
<style name="MyActionBarStyle" parent="@style/Widget.Sherlock.ActionBar">
<item name="displayOptions">showCustom</item>
<item name="android:displayOptions">showCustom</item>
</style>
アクティビティ(またはフラグメント)にカスタムビューを設定します。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar ab = getSherlock().getActionBar();
LayoutInflater li = LayoutInflater.from(this);
View customView = li.inflate(R.layout.my_custom_view, null);
ab.setCustomView(customView);
ImageButton ibItem1 = (ImageButton) customView.findViewById(R.id.item1);
ibItem1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// ...
}
});
ImageButton ibItem2 = (ImageButton) customView.findViewById(R.id.item2);
ibItem2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// ...
}
});
}
メニュー項目のクリックリスナーを追加する必要があります。この場合は使用できませんonOptionsItemSelected()
。
于 2013-01-08T09:15:41.310 に答える
7
トミックの答えに加えて。追加する必要があります
ab.setDisplayShowCustomEnabled(true);
onCreateメソッドでは、それ以外の場合、カスタムビューは表示されません(少なくとも私にとっては)。
于 2014-02-19T10:46:12.143 に答える