16

タブレット用のAndroidアプリを書いています。アイコンを作成するためにアクションバーを使用しました。ただし、メニュー項目の1つがクリックされたときに、カスタムビューを開く必要があります。

カスタムアクションバーが必要ありません-[サブジェクトの参照]アクションバーアイテムがクリックされたときにカスタムビューを膨らませる必要があります。このビューはドロップダウンのように表示する必要がありますが、ナビゲーションには使用されないため、独自のカスタムレイアウトを使用しています。

ドロップダウンメニュー

これが私のmenu.xmlです

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_browse"
        android:title="Browse Subjects"
        android:showAsAction="always"
        android:actionLayout="@layout/action_layout_browse"
        android:actionProviderClass="au.com.pearson.f12catalogue.action_providers.BrowseProvider"
            />
    <item android:id="@+id/menu_settings"
        android:title="Settings"
        android:orderInCategory="100"
        android:showAsAction="never" />
</menu>

ActionProviderClassを使用すると、アクションバーの項目がクリックされたときにカスタムビューをインスタンス化できると思いましたが、方法がわかりません。おそらく、間違ったパスをたどっています。

これに関するどんな助けも大いに感謝されるでしょう!ありがとう!

更新:アクションバーのスタイル設定へのリンクをありがとうございますが、ドロップダウンのスタイルを設定したくありません。カスタムビューを膨らませたい。ビューはDBクエリなども実行します。

4

1 に答える 1

13

わかりました、私は自分で解決策を考え出しました。基本的に、actionProviderClassは、actionBarでactionViewをインスタンス化するために使用されます。このクラスでは、膨らませたビューにonClickリスナーをアタッチできます。このリスナーを使用して、クリックしたときにメインフレームのドロップダウンビューを膨らませました。

例えば

public class BaseProvider extends ActionProvider {

    protected final Context context;
    protected final int layout;
    protected final BaseProvider self;
    protected View view;
    protected int positionLeft = 0;
    protected Dropdown dropdown;

    public BaseProvider(Context context, int layout, Dropdown dropdown) {
        super(context);
        this.layout = layout;
        this.context = context;
        this.self = this;
        this.dropdown = dropdown;
    }

    @Override
    public View onCreateActionView() {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );

        View view = inflater.inflate(this.layout, null);

        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                self.onItemClick();
            }
        });
        this.view = view;
        return view;
    }

    public boolean onItemClick(){
        toggleDropdown();
        return true;
    }

    protected void toggleDropdown(){
        this.positionLeft = getRelativeLeft(view);
        DropdownInflater.getInstance().toggleDropdown(this.dropdown,this.positionLeft);
    }

    protected int getRelativeLeft(View view) {
        int[] loc = new int[2];
        view.getLocationOnScreen(loc);
        return loc[0];
    }
}
于 2013-02-18T03:24:14.303 に答える