4

アクションバーシャーロックのオーバーフローメニューに何かをするのは本当に難しいです。

スクリーンショット

理想的には、TextViewアイテムごとにカスタムを使用して、アイテムに異なるフォントを設定し、pressed状態の色を変更したいと思います。

私は試しました(すべて成功しませんでした):

アクションバーオーバーフローのスタイルの変更アクション
バースタイルのオーバーフローメニュー項目
リストビューをシャーロックアクションバーのアクションオーバーフローとして
https://groups.google.com/forum/#!msg/actionbarsherlock/5lHOKNlXn_4/f9XicMXbFFAJ

私のアプリにはさまざまなフラグメントがあり、すべてBaseFragmentオーバーフローメニューのさまざまな項目で拡張されます。v4サポートパッケージも使用しています。私は次のようにメニューを作成しています:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.activity_borrow, menu);
}

activity_borrow.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_filter"
        android:title="test"
        android:orderInCategory="100"
        android:showAsAction="never"
/>
</menu>

私のアプリはから継承するテーマを使用していTheme.Sherlockます。

そのメニュー内でカスタムビューを使用するにはどうすればよいですか?または、少なくとも、デフォルトの青いpressed状態を変更するにはどうすればよいですか?

4

1 に答える 1

4

オーバーフロー リスト アイテムの色を変更するには、アプリケーション テーマに 2 つのアイテムを追加します。このテーマは通常 で定義されres/values/styles.xmlます。

<item name="android:dropDownListViewStyle">@style/DropDownListView</item>
<item name="dropDownListViewStyle">@style/DropDownListView</item>

その同じファイルに、割り当てたばかりのスタイルを追加します。

<style name="DropDownListView" parent="@style/Widget.Sherlock.ListView.DropDown">
  <item name="android:listSelector">@drawable/selectable_background</item>
</style>

selectable_background.xml最後に、以下を含む drawable フォルダーにセレクター drawable を作成します。

<selector xmlns:android="http://schemas.android.com/apk/res/android"
        android:exitFadeDuration="@android:integer/config_mediumAnimTime" >
    <item android:state_pressed="false" android:state_focused="true" android:drawable="@color/focussed_color" />
    <item android:state_pressed="true" android:drawable="@color/pressed_color" />
    <item android:drawable="@android:color/transparent" />
</selector>

最後に、通常 に配置される色を定義しますcolors.xml

<resources>
    <color name="pressed_color">#FF8E4067</color> <!-- your purple tone already ;) -->
    <color name="focussed_color">#DD8E4067</color>
</resources>

私のアプリでは、baboo が提案したように「ActionBar Style Generator」を使用しました。これは、すべてを便利に処理します。この回答では、オーバーフロー メニューのスタイルを構成していると思われる部分を抽出して単純化しました。

3 つの異なるアイテムをスタイリングすることの効果については、いくつかの謎があると思います。

  • 私の理解でandroid:dropDownListViewStyleは、ActionBar の「3 つのドット」の後ろに隠れるオーバーフロー メニューが含まれています。
  • と混同しないでください android:actionDropDownStyle。これは、使用した場合にアプリのナビゲーション ドロップダウンのスタイルに使用されます。actionBar.setNavigationMode(NAVIGATION_MODE_LIST)
  • ただし、ハードウェア メニュー ボタンを備えた一部の Android デバイス (Nexus S や Galaxy S3 Mini など) では、「3 つのドット」は表示されず、ハードウェア メニュー ボタンをクリックすると画面の下部からスライドして表示されるオーバーレイ メニューが表示されます。android:popupMenuStyleこれをスタイルするための正しい属性です。

繰り返しますが、これは私自身のアプリ開発から覚えている限りです。

また、他のスタイル ファイル (構成修飾子を含むフォルダーなど) が、定義したばかりのスタイルを上書きしないことを確認してください。

全体として、これはリスト項目の背景色のみを変更することを理解しています。そこで完全にカスタム ビューを使用するには、カスタム スピナー ビューを作成し、「3 つのドット」アイコンのダミー ボタンを ActionBar に追加して、クリック時にスピナーを開くことができます。

于 2013-03-14T19:42:35.323 に答える