Я пытаюсь использовать 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();
}
}
скриншот:
