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