55

ジェリービーンのネイティブルックに似たボタンスイッチを追加したいと思います。(ビューの上部にある青/灰色のスイッチ) ここに画像の説明を入力

ドキュメントには、そこにメニューを作成する方法やアイコンを追加する方法が示されていますが、カスタム要素を追加する方法については説明されていません。例えば。スイッチ。 http://developer.android.com/guide/topics/ui/actionbar.html

4

5 に答える 5

36

最後に私の問題を理解しました:新しい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;
}
于 2014-12-05T20:11:53.840 に答える
33

ウィジェットがアクション バーに表示されない場合は、おそらくアクション バーに 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;

これにより、スイッチが表示されていない場合は、アクションバーに表示されます。

于 2015-01-04T16:06:34.873 に答える
5

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);
于 2014-12-05T19:13:40.557 に答える