2017-05-26 15 views
0

私はカスタムListViewを持っています。カスタムリストビューのレイアウトの中に、私は(アクションバー上のメニューがどのように機能するかに類似)オーバーフローメニューとして動作するのImageButtonを持っています。活動のImageButtonはメニュー項目を表示しません。

レイアウト/ item_list.xml

<ImageButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_more_vert_black_24dp" 
     android:contentDescription="@string/descr_overflow_button" 
     android:id="@+id/overflowMenu" 
     android:layout_alignParentRight="true"/> 

、私もonCreateOptionsMenuでそれを膨らませ

overflowMenu = (ImageButton) findViewById(R.id.overflowMenu); 
    popupMenu = new PopupMenu(this, overflowMenu); 
    popupMenu.setOnMenuItemClickListener(this); 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = popupMenu.getMenuInflater(); 
    inflater.inflate(R.menu.popup_menu, popupMenu.getMenu()); 
    return true; 
} 
私はのonCreateメソッドでポップアップとしてこののImageButtonを設定します

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> 
    <item android:id="@+id/report" android:title="Report" 
      app:showAsAction="always"/> 
    <item android:id="@+id/share" android:title="Share" 
      app:showAsAction="always"/> 
</menu> 

をそして、私はこれを追加しました::

私は、メニュー/ popup_menu.xmlフォルダに以下のいる

@Override 
public boolean onMenuItemClick(MenuItem item) { 
    return true; 
} 

をしかし、私は電話でのImageButtonをクリックしようとすると、何も起こりません。メニュー項目は必要に応じて表示されません。私は何が欠けていますか?

答えて

0

この質問は重複しています。メニューを使用することはできませんカスタムレイアウトについては 、あなたはPopupWindow

Android MenuItem Custom Layout

PopupWindow popupwindow_obj = popupDisplay(); 
popupwindow_obj.showAsDropDown(clickbtn, -40, 18); // where u want show on view click event popupwindow.showAsDropDown(view, x, y); 

public PopupWindow popupDisplay() 
{ 

    final PopupWindow popupWindow = new PopupWindow(this); 

    // inflate your layout or dynamically add view 
    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

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

    Button item = (Button) view.findViewById(R.id.button1); 

    popupWindow.setFocusable(true); 
    popupWindow.setWidth(WindowManager.LayoutParams.WRAP_CONTENT); 
    popupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT); 
    popupWindow.setContentView(view); 

    return popupWindow; 
} 

//に使用する必要が私のlayout.xml

という名前のres /レイアウトフォルダに、このXMLファイルを作成します。
<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Window test" /> 
</LinearLayout> 
+0

これは本当ですか? PopupMenuの目的は何ですか? – Donato

+0

https://stackoverflow.com/questions/23538929/android-menuitem-custom-layout – redAllocator

+0

回答を読んでくださいこのサイト – redAllocator

0

最初にPopupMenuが必要です。 docs

からポップアップメニューは、メニューを呼び出されたビューに固定 をだ垂直リスト内の項目のリストが表示されます。特定のコンテンツに関連するアクションのオーバーフローを で提供するか、またはコマンドの後半部分に オプションを指定するとよいでしょう。

onCreateOptionsMenuonMenuItemClickはとても無意味ありオーバーフローメニューを膨らま活動のためのメニューを管理するためのものであるので、今すぐあなたの実装が動作しない理由はあります。

は何をする必要がある

imageButton = findViewById(R.id.overflow_menu); 
PopupMenu popup = new PopupMenu(this, imageButton); 
MenuInflater inflater = popup.getMenuInflater(); 
inflater.inflate(R.menu.popup_menu, popup.getMenu()); 
imageButton.setOnClickListener(new View.OnClickListener(){ 
    @Override 
    public void onClick(View v) { 
     popup.show(); 
    }  
}); 

あなたは例のために上記のリンクのドキュメントを見てすることができますonClickListenerあなたImageButtonに付着しPopupMenuを初期化し、あなたのListView/RecyclerViewアダプタ内show()を呼んで同じように。

関連する問題