3

アクションバーに 3 つの項目があるアプリを作成しています。項目の 1 つをクリックすると、それが強調表示されます。

利用可能ないくつかの例を調べましたが、ActionBar Style Generator ツールを使用してスタイルを作成する必要があるという結論に達しました。

以下のリンクを参考にしましたが、満足できませんでした

選択時にメニュー項目を強調表示する方法は?

これが唯一の方法ですか?

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:actionBarItemBackground">@drawable/action_bar_item_selector</item>
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

セレクター.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item
    android:state_focused="true"
    android:drawable="@drawable/ic_action_blue" />
  <item android:state_pressed="true"
    android:drawable="@drawable/ic_action_green" />
  <item android:drawable="@android:color/transparent" />
</selector>

しかし、state_pressed と state_focused の場合のように、選択は停滞したままではありません。

ユーザーがそのアクティビティを開始するまで、アイテムを強調表示したままにします。

4

4 に答える 4

4

問題を処理するより洗練された方法は、両方の状態をチェックするブール値を持つことです。異なる状態の色で同じドローアブルを使用している場合は、colorFilter メソッドを使用してドローアブルに適用することをお勧めします。

 private boolean mSomeValue = true; 

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
      // determine the menu item you want to highlight when selected
      switch(item.getItemId) {
           case yourItem : {
                if (mSomeValue) {
                    item.getIcon().setColorFilter(YourColor, PorterDuff.Mode.MULTIPLY);
                    mSomeValue = false;
                } else {
                    mSomeValue = true;
                    item.getIcon().setColorFilter(Default, PorterDuff.Mode.MULTIPLY);
                }
            break; ...
           }
      }
      return super.onOptionsItemSelected(item);
 }
于 2014-09-13T21:08:50.157 に答える
1

テーマを定義し、必要なアクション バー テーマ (たとえばTheme.Sherlock.Light.DarkActionBar) を継承し、属性の値を設定して、継承android:actionBarItemBackgroundされたテーマのデフォルトの値をオーバーライドできます。

<style name="MyTheme" parent="Theme.Sherlock.Light.DarkActionBar">
    <item name="android:actionBarItemBackground">custom_selector</item>
</style>
于 2013-08-27T08:56:41.617 に答える
0

では、次の 2 つの異なるアイテムを作成することをお勧めしますmenu.xml

<item
    android:id="@+id/action_item1" 
   /> 


<item 
    android:id="@+id/action_item2"
    android:visible="false"
    />

次に、アイテムを強調表示するアクティビティで、 on をオーバーライドし、パラメーターをonPrepareOptionsMenu使用して、 を使用menuして目的のアイテムをキャッチしますmenu.findItem(R.id.your_item_id)。最後に、アイテムの表示を切り替えます。

refreshを使用して、アクションバーのアイテムを自動的に作成する必要がありますinvalidateOptionsMenu

それが役立つかどうか教えてください!

于 2013-08-27T09:35:57.237 に答える