数日間の調査の結果、これを実装する最良の方法は、listView を含むカスタム テーマでカスタム ダイアログ ボックスを使用することであることがわかりました。ユーザーがボタンをクリックすると、ボタンのすぐ下にダイアログが表示されます。これは優れたユーザー エクスペリエンスを提供し、この機能に対応するために基本的なレイアウト構造を完全に変更する必要がないことも意味します。(これは基本的に、ActionBar Sherlocke が後方互換性メニューに使用するのと同じアプローチです)
これは、私が説明しているもののコード スニペットです (これは Android 用の Mono を使用して C# で記述されていますが、Java に変換するのは簡単なはずです)。
Dialog dlgHome = new Dialog(this, Resource.Style.ActionBarMenu);
dlgHome.SetCanceledOnTouchOutside(true);
dlgHome.SetContentView(Resource.Layout.ActionBarMenu);
ListView lsvHome = (ListView)dlgHome.FindViewById(Resource.Id.lsvHome);
lsvHome.Adapter = new ArrayAdapter<string>(this, Resource.Layout.ActionBarMenuItem, new string[] { "Add Activity", "Edit Log", "Program Details" });
Rect r = new Rect();
btnHome.GetLocalVisibleRect(r);
int x = r.Left + (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, 5, Resources.DisplayMetrics);
int y = r.Bottom;
WindowManagerLayoutParams param = dlgHome.Window.Attributes;
param.Gravity = (int)(GravityFlags.Top | GravityFlags.Left);
param.X = x;
param.Y = y;
dlgHome.Window.Attributes = param;
また、ここにスタイル xml があります (style.xml に含まれます)。
<style name="ActionBarMenu" parent="android:Theme.Dialog">
<item name="android:windowBackground">@color/actionbar_menu_bg</item>
<item name="android:windowNoTitle">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>