我试图使用ListPopupWindow通过ArrayAdapter(最终将使用更复杂的定制适配器)显示字符串列表。以下是代码。如截图所示,结果的ListPopupWindow似乎表现得好像内容宽度为零。它显示了正确数量的项目,这些项目仍然可点击,并且点击成功产生Toast,因此至少这部分工作正常。
有趣的是:我可以向popup.setWidth(...)提供像素宽度,而不是ListPopupWindow.WRAP_CONTENT,它会显示一些内容,但这似乎非常死板。
我该如何使ListPopupWindow自动适应其内容?
测试活动:
public class MainActivity extends Activity {
private static final String[] STRINGS = {"Option1","Option2","Option3","Option4"};
private View anchorView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().setHomeButtonEnabled(true);
setContentView(R.layout.activity_main);
anchorView = findViewById(android.R.id.home);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
showPopup();
return true;
}
return super.onOptionsItemSelected(item);
}
private void showPopup() {
ListPopupWindow popup = new ListPopupWindow(this);
popup.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, STRINGS));
popup.setAnchorView(anchorView);
popup.setWidth(ListPopupWindow.WRAP_CONTENT);
popup.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this, "Clicked item " + position, Toast.LENGTH_SHORT).show();
}
});
popup.show();
}
}
截图:
WRAP_CONTENT
会导致弹出窗口的宽度等于锚视图的宽度,而在此示例中,锚视图是ActionBar上的主页图标。我可能最终需要使用显式宽度值... - Karakuri