Android Studio中如何实现simple_spinner_dropdown_item文本居中
问题原因
android.R.layout.simple_spinner_item的布局内部嵌套了id为android.R.id.text1的TextView,所以之前的findViewById逻辑可以正常找到目标控件android.R.layout.simple_spinner_dropdown_item的根布局本身就是TextView,没有嵌套子TextView,所以findViewById(android.R.id.text1)会返回空,后续的居中和字号设置都不生效
解决方案
只需要修改setCentered方法的逻辑,兼容两种布局结构即可,原有其他代码基本不需要改动:
private void addCountriesToSpinner(){ DatabaseHelper dhHelp = new DatabaseHelper(this); _countryNames = dhHelp.getAllCountryNames(); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, _countryNames){ @Override public View getView(int position, View convertView, ViewGroup parent){ return setCentered(super.getView(position, convertView, parent)); } @Override public View getDropDownView(int position, View convertView, ViewGroup parent){ return setCentered(super.getDropDownView(position, convertView, parent)); } private View setCentered(View view){ TextView textView; // 优先判断根View是否为TextView,适配simple_spinner_dropdown_item if (view instanceof TextView) { textView = (TextView) view; } else { // 否则查找子控件,适配simple_spinner_item textView = view.findViewById(android.R.id.text1); } if (textView != null) { textView.setGravity(Gravity.CENTER); textView.setTextSize(18); // 如果需要调整下拉选项间距,可以额外加上下padding // textView.setPadding(0, 12, 0, 12); } return view; } }; // 单独设置下拉列表使用的布局,保证选项间距符合预期 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // 此处替换为你自己的Spinner实例 yourSpinner.setAdapter(adapter); }
如果后续需要更灵活的样式调整,也可以自行创建两个自定义布局文件,直接在XML中把TextView的gravity设为center,不需要重写Adapter的方法,稳定性更高。
内容的提问来源于stack exchange,提问作者cinemandre
相关产品推荐
相关产品推荐

