2012-12-21 16 views
0

我想在用戶觸摸按鈕時打開「上下文菜單」。沒有自動對焦的上下文菜單

我已經搜索沒有成功的解決方案,有沒有自動對焦的默認Android上下文菜單。對我來說,默認的自動對焦是脖子上的痛苦,因爲它會迫使用戶(在菜單窗口外)額外敲擊以在主窗口上選擇另一個項目。

我的活動提供與項目G1G2,...和上下文菜單將顯示文字區域T1T2列表的gridview的...這是我所需要的:

  1. 當用戶點擊G1,菜單在屏幕底部顯示出來(我需要能夠自定義基本菜單佈局)
  2. 當用戶點擊g1,窗口的其餘部分不會消失,即他應該仍然能夠正常查看主窗口,除了底部菜單佔用的空間外,當用戶點擊g1時,他不會鬆動如果他拿出G2的菜單已打開後的當前窗口即G2重點,通常會採取行動,而不需要額外的水龍頭
  3. 假設用戶點擊G1,然後輕敲G2:當前的上下文菜單應關閉和一個新的打開,刷新b2
  4. 我需要爲應用程序做到這一點從minsdkversion = 8開始(似乎我不能使用「動作欄」)

希望這是有道理的,讓我知道如果它不。

我想這將是太麻煩,以破解默認的上下文菜單來定製它這種方式?創建我自己的完全沒問題。但我不知道從哪裏開始。 那麼你能指點我實現我想要的方向嗎?

感謝您的時間

回答

0

兩個建議如何做到這一點與自定義的上下文菜單。

方案A:也許這是一個選項,你只要用戶點擊G1包住當前佈局爲RelativeLayout,並添加LinearLayout(包含您的自定義上下文菜單)到RelativeLayout。當單擊g2時,刪除舊的LinearLayout並添加一個新的relativeLayout.addView(contextMenuLayout)。爲了讓您的LinearLayout放置在底部,請確保使用contextMenuLayout.setLayoutParams(...)並傳遞RelativeLayout.LayoutParams的實例,並設置Align Parent Bottom和Center Horizo​​ntal。由於您的contextMenuLayoutRelativeLayout的最後一個元素,因此它將顯示在上面。焦點將按照你的意願行事。

備選案文B:將垂直方向的當前佈局包裝成LinearLayout。第一個單元格包含您當前的佈局。第二個單元格可能包含您自定義的上下文菜單,您可以像變體A中那樣添加和刪除它們。兩個優點:首先,您的原始佈局未被上下文視圖覆蓋,並且這樣一切都始終可見。其次,您可以將'LinearLayout'設置爲「animateLayoutChanges」,這使得上下文菜單能夠與Android API11 +平滑地淡入淡出(在早期版本中被忽略)。

方案A和B作爲僞代碼(包括工作類似):

class YourActivity extends Activity implements OnItemClickListener { 

    View contextMenu = null; 

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

     // this could be RelativeLayout (Variant A) or LinearLayout (Variant B) which in turn contains your Layout 
     Layout rootLayout = (Layout)findViewById(R.id.root_layout); 

     // in case there is a context menu open, remove it 
     if(contextMenu!=null) 
      rootLayout.removeView(contextMenu); 

     // add new self-defined context menu 
     contextMenu = getContextMenuView(); 
     rootLayout.addView(contextMenu); 
    } 

    private View getContextMenuView() { 
     Layout contextMenuView = new LinearLayout(...); 
     .... add contents ... 
     return contextMenuView; 
    } 

    .... 
} 

注意你需要投rootLayout要麼LinearLayoutRelativeLayout,因爲Layout本身沒有addView(...)方法。

+0

謝謝你的回答,請給我更多的細節如何調用addView?比方說,我想打開onItemClick內傳遞View v作爲參數的上下文菜單。 v.addView似乎不起作用 – Don

+0

我向答案添加了一個僞代碼。 – sulai

+0

謝謝,我試圖在我的代碼中正確使用它。 getContextMenuView()應該是什麼,它應該返回什麼?另外是菜單佈局應該已經在root_layout或在一個單獨的XML文件?對不起,如果問題是跛腳我不是專家:) – Don