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();
}
}
スクリーンショット: