web-dev-qa-db-ja.com

android

アクションメニュー項目にトグルボタンがあるアプリがありますが、アクションバーシャーロックを使用していますが、アクションメニュー項目にトグルボタンを配置する方法がわかりません。アクションバーにカスタムレイアウトとして配置したくないが、メニュー項目として配置したい。誰かが解決策を見つけたら、私を助けてください。

目的、トグルボタンの状態を変更すると、ALphabetsに基づいて人がソートされ、Date of Birthが再びソートされます。

前もって感謝します!

20

通常のメニューボタンのように追加し、ブール変数でその状態を確認します。並べ替えモードを変更するときにアイコンとタイトルを変更できます

boolean birthSort=false;
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_toggle:

        if(birthSort){
            //change your view and sort it by Alphabet
            item.setIcon(icon1)
            item.setTitle(title1)
            birthSort=false;
        }else{
            //change your view and sort it by Date of Birth
            item.setIcon(icon2)
            item.setTitle(title2)
            birthSort=true;
        }
        return true;



    }
    return super.onOptionsItemSelected(item);


}

他のメニューボタンと同様にxmlに追加し、オーバーフローまたは外部で表示する場合はAndroid:showAsActionを設定することを忘れないでください。

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">

<item Android:id="@+id/menu_toogle"
    Android:showAsAction="ifRoom"
    Android:title="Share"
     />
</menu>
36
Yalla T.

その他のアプローチは、ActionBarにカスタムレイアウトを使用することです。

基本的に、トグルを含むlayoutを定義します。

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
  Android:layout_width="fill_parent"
  Android:layout_height="wrap_content">
  <ToggleButton
    Android:id="@+id/actionbar_service_toggle"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:textOn="Logging On"
    Android:textOff="Logging Off" />
</RelativeLayout>

ALTERNATIVE 1:次に、Activityまたはあなたがするフラグメントコンテナ:

ActionBar actionBar = getSupportActionBar();
actionBar.setCustomView(R.layout.actionbar_top);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_CUSTOM);
...
ToggleButton button = (ToggleButton) findViewById(R.id.actionbar_service_toggle);

実際のToggleButtonがあり、それを実際のオブジェクトToggleButtonとしてコードで処理していることに注意してください。これは、独自のトグル(テーマ、信頼性、ビュー階層、ネイティブサポート...)を再実装するよりも多くの利点があります。 。

ソースコード ここ


ALTERNATIVE 2:これを行う別の方法は、カスタムビューを通常のメニュービューに埋め込むことです。

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <item
        Android:id="@+id/myswitch"
        Android:title=""
        Android:showAsAction="always"
        Android:actionLayout="@layout/actionbar_service_toggle" />   
</menu>
3
Fabricio PH

私のようにactionLayoutが機能しない場合は、app:actionLayout="@layout/actionbar_service_toggle"ではなくAndroid:actionLayout="@layout/actionbar_service_toggle"を試してください。また、app:showAsAction="always"ではなくAndroid:showAsAction="always"を試してください。これは、appCompatを使用すると、Android名前空間は使用されません。

これが最終版です。

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
  Android:layout_width="fill_parent"
  Android:layout_height="wrap_content">
  <ToggleButton
    Android:id="@+id/actionbar_service_toggle"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:textOn="Logging On"
    Android:textOff="Logging Off" />
</RelativeLayout>

そして

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto">
    <item
        Android:id="@+id/myswitch"
        Android:title=""
        app:showAsAction="always"
        app:actionLayout="@layout/actionbar_service_toggle" />   
</menu>
2
Francois Dermu

メニューにxmlファイルを作成します。

menu.xml

 <menu xmlns:Android="http://schemas.Android.com/apk/res/Android" xmlns:app="http://schemas.Android.com/apk/res-auto" xmlns:tools="http://schemas.Android.com/tools" tools:context="si.ziga.switchinsideab.MainActivity">
<item Android:id="@+id/switchId" Android:title="" Android:showasaction="always" Android:actionlayout="@layout/switch_layout">
   <item Android:id="@+id/action_settings" Android:orderincategory="100" Android:title="@string/action_settings" app:showasaction="never">
</item></item></menu>

次に、レイアウトフォルダーに移動して新しいxmlファイルを作成し、switch_layout.xmlという名前を付けます。コードは次のとおりです:switch_layout.xml

<!--?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">
</switch></relativelayout>

MainActivityクラスに次のコードをコピーして貼り付けます。
MainActivity.Java

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);

switchAB = (Switch)menu.findItem(R.id.switchId)
.getActionView().findViewById(R.id.switchAB);7

またはこれに従ってください リンク このものについて

1
dondondon