यह एक छोटे से देर हो चुकी है, लेकिन मुझे उम्मीद है कि इस मदद करता है किसी को MyPopupMenu लागू होते हैं।
मैं PopupMenu
के साथ जो कर रहा था वह करने की कोशिश कर रहा था, लेकिन जब तक मैंने ListPopupWindow
के बारे में सीखा, तब तक मेरे लिए कुछ भी काम नहीं कर रहा था। यह एक बेहतर विकल्प है। मेरी राय में अधिक लचीलापन और आप जिस मार्जिन-स्पेसिंग के बारे में पूछ रहे थे उसे प्राप्त कर सकते हैं।
public class MainActivity extends AppCompatActivity
{
private ImageButton mMoreOptionsButton;
private ArrayAdapter<String> mPopupAdapter;
private ArrayList<String> mOptionsArray =
new ArrayList<>(Arrays.asList("Option1", "Option2", "Option3"));
private ListPopupWindow mPopupWindow;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMoreOptionsButton = (ImageButton) view.findViewById(R.id.more_options_button);
setupPopupWindow();
}
private void setupPopupWindow()
{
mPopupAdapter = new ArrayAdapter<>(MainActivity.this, android.R.layout.simple_spinner_dropdown_item, mOptionsArray);
mPopupWindow = new ListPopupWindow(MainActivity.this);
mPopupWindow.setAdapter(mPopupAdapter);
mPopupWindow.setAnchorView(mMoreOptionsButton);
mPopupWindow.setWidth(500);
mPopupWindow.setHorizontalOffset(-380); //<--this provides the margin you need
//if you need a custom background color for the popup window, use this line:
mPopupWindow.setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(MainActivity.this, R.color.gray)));
mPopupWindow.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
//do something with item by referring to it using the "position" parameter
}
});
mMoreOptionsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
mPopupWindow.show();
}
});
}
}
महत्वपूर्ण हिस्सा mPopupWindow.setHorizontalOffset()
बुला रहा है:
कोड यह रहा। ध्यान रखें कि यह विधि मुश्किल है। mPopupWindow.setWidth()
में सेट किए गए मान के आधार पर आपको तदनुसार setHorizontalOffset()
में मान समायोजित करना होगा। ऐसा ही हुआ कि मेरे ऐप के लिए, -380
अंत से आवश्यक मार्जिन की सही मात्रा थी। तो आपको इस मूल्य के साथ थोड़ा सा खेलना पड़ सकता है।
मुझे विश्वास है कि setHeight()
और setVerticalOffset()
का उपयोग करने के लिए कहा जा सकता है यदि आप अपनी पॉपअप विंडो के शीर्ष पर कुछ मार्जिन चाहते हैं।
आशा इस मदद करता है:]
स्रोत
2016-05-29 08:13:45
असल में, यह स्क्रीन करने के लिए सही करने के लिए स्थिर नहीं बनी रहती है, लेकिन यह आप लंगर के रूप में निर्माता में सेट लंगर देखें करने के लिए लाठी। मुझे नहीं पता कि कैसे यूट्यूब पॉपअपमेनस प्रस्तुत करता है, लेकिन आप एक अलग एंकर का उपयोग करने का प्रयास कर सकते हैं, i.E. अपने पॉपअपमेनू को जोड़ने के उद्देश्य के लिए केवल एक अदृश्य दृश्य स्थापित करना। –
मैंने कोशिश की। लेकिन फिर भी यह दाईं ओर चिपक जाता है। मैंने फर्जी एंकर व्यू बनाने की कोशिश की है लेकिन फिर भी व्यवहार समान है। –
ओह, आप सही हैं, मैंने अभी पुष्टि की है। सुनिश्चित नहीं है कि यूट्यूब ऐसा करता है, लेकिन मैं 'पॉपअपमेनू' के बजाय 'पॉपअपविंडो' का उपयोग करने का प्रयास करने का सुझाव दूंगा। 'पॉपअपविंडो' को देखने के लिए और अधिक अच्छी तरह से लगाया गया है, लेकिन आपको इसे अपने आप से बाहर रखना होगा –