ジェリービーンのネイティブルックに似たボタンスイッチを追加したいと思います。(ビューの上部にある青/灰色のスイッチ)
ドキュメントには、そこにメニューを作成する方法やアイコンを追加する方法が示されていますが、カスタム要素を追加する方法については説明されていません。例えば。スイッチ。 http://developer.android.com/guide/topics/ui/actionbar.html
ジェリービーンのネイティブルックに似たボタンスイッチを追加したいと思います。(ビューの上部にある青/灰色のスイッチ)
ドキュメントには、そこにメニューを作成する方法やアイコンを追加する方法が示されていますが、カスタム要素を追加する方法については説明されていません。例えば。スイッチ。 http://developer.android.com/guide/topics/ui/actionbar.html
最後に私の問題を理解しました:新しいAppCompatを使用している人は、スイッチレイアウトのandroid.support.v7.widget.SwitchCompat
代わりに使用する必要がありSwitch
ます...そうしないと、ActionBar
(AppCompat ActionBarも使用していると仮定して)上に表示されません。 actionLayout 属性は機能しません。コードで設定する必要があります。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/switchView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<android.support.v7.widget.SwitchCompat
android:id="@+id/switchForActionBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="" />
</RelativeLayout>
次に、コードでレイアウトを設定します。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
MenuItem item = menu.findItem(R.id.on_off_switch);
item.setActionView(R.layout.on_off_switch);
return true;
}
ウィジェットがアクション バーに表示されない場合は、おそらくアクション バーに appCompat を使用していることが原因です。このスイッチを解決するには、menu.xml の「showAsAction」と「actionLayout」の前で「android:」を「app:」に切り替えます。
android: の代わりに app: を使用して、xml に項目を追加します。
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/myswitch"
android:title=""
app:showAsAction="always"
app:actionLayout="@layout/switch_layout"
/>
</menu>
「app:actionLayout」
switch_layoutに使用しているレイアウトを作成します
<?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="match_parent"
android:orientation="horizontal" >
<Switch
android:id="@+id/switchAB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
/>
</RelativeLayout>
通常どおり、ActionBarActivity でメニューを膨らませます。
getMenuInflater().inflate(R.menu.mainmenu, menu);
return true;
これにより、スイッチが表示されていない場合は、アクションバーに表示されます。
Ezequiel によって提供されたソリューションは素晴らしく、機能します。別のアプローチを次に示します。
カスタム レイアウトを定義します。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" >
<Switch
android:id="@+id/actionbar_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
</RelativeLayout>
プログラムで膨らませます:
ActionBar actionBar = getSupportActionBar();
actionBar.setCustomView(R.layout.actionbar_top);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_CUSTOM);
...
Switch button = (Switch) findViewById(R.id.actionbar_switch);