我正在使用支持lib v21的android spinner和edittext。我想将文本对齐,就像edittext一样,如图所示。但是,狡猾的旋转器包括间距或填充。所以,我想删除它以将文本对齐到左边。请帮助如何删除它。
答案 0 :(得分:18)
在SpinnerAdapter中:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
view.setPadding(0, view.getPaddingTop(), view.getPaddingRight(), view.getPaddingBottom());
return view;
}
答案 1 :(得分:3)
请尝试使用以下代码。将微调器列表项布局中的样式属性更改为textViewStyle,如下所示
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="?android:attr/textViewStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="false"
android:textAlignment="inherit"
android:textAppearance="?android:attr/textAppearanceMedium" />
答案 2 :(得分:2)
此数组适配器会删除Android Spinner中的左边距。
Kotlin版本:
open class NoPaddingArrayAdapter<T>(context: Context, layoutId: Int, items: List<T>?) : ArrayAdapter<T>(context, layoutId, items) {
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View? {
val view = super.getView(position, convertView, parent)
view.setPadding(0,view.paddingTop,view.paddingRight,view.paddingBottom)
return view
}
}
答案 3 :(得分:1)
试试这个,
为微调器行创建自定义布局(根据需要)。
会使布局膨胀。
答案 4 :(得分:1)
TextView
中显示的Spinner
布局来自SpinnerAdapter
,提供了2种方法:
getView(position, convertView, parent)
:返回折叠状态的视图,您可以覆盖此视图以返回不同选定项目的不同布局getDropdownView(position, convertView, parent)
:返回展开状态下每个下拉项目的视图(点击Spinner打开弹出窗口/对话框以供选择)在您的情况下,您应该覆盖SpinnerAdapter.getView(position, convertView, parent)
并使用您选择的填充/间距来扩充布局。
例如:
spinner.setAdapter(new MyAdapter());
<强> MyAdapter.java 强>
class MyAdapter implements SpinnerAdapter {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.spinner_item, parent, false);
}
// bind your data here
return convertView;
}
// other implementation
}
<强> RES /布局/ spinner_item.xml 强>
<!-- set padding margin whatever here -->
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
您还可以方便地使用SpinnerAdapter
indirect subclasses(ArrayAdapter<T>, BaseAdapter, CursorAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, ThemedSpinnerAdapter
)提供的框架之一,只需确保提供getView()
方法将使用的正确布局。
答案 5 :(得分:1)
如果您不想弄乱Java代码并将其置于样式
搜索此文件(Cmd + Shift + O)
abc_spinner_textfield_background_material.xml
并复制到您的项目。从根元素中删除所有插入值,并将该文件作为微调器的背景参考。
就我而言,它看起来像这样(drawable/spinner_background.xml
)
<inset xmlns:android="http://schemas.android.com/apk/res/android">
<selector>
<item
android:state_checked="false"
android:state_pressed="false">
<layer-list>
<item android:drawable="@drawable/abc_textfield_default_mtrl_alpha" />
<item android:drawable="@drawable/abc_spinner_mtrl_am_alpha" />
</layer-list>
</item>
<item>
<layer-list>
<item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha" />
<item android:drawable="@drawable/abc_spinner_mtrl_am_alpha" />
</layer-list>
</item>
</selector>
</inset>
在我的styles.xml中我用这种方式
<style name="DxSpinner" parent="@style/Widget.AppCompat.Spinner.Underlined">
<item name="android:background">@drawable/spinner_background</item>
</style>
答案 6 :(得分:1)
您还可以在xml
中删除微调器的填充只需要将填充设置为0dp。
<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:padding="0dp"
android:id="@+id/my_spinner">
答案 7 :(得分:0)
我也遇到了这个问题。我能够通过实际调整边距而不是填充来解决它,所以将android:marginStart =“0dp”设置为微调项目。
答案 8 :(得分:0)
也许这是最简单的方法,而且也可以正常工作。要减少Spinner
的左填充,可以将set padding left设置为负,这样它将向左移动。例如,android:layout_marginLeft="-8dp"
并不是最佳实践,只是一个简单的技巧。这是一个代码示例:
<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:layout_marginLeft="-8dp"
android:entries="@array/arr_tipe_kendaraan"
android:gravity="left"
android:paddingTop="14dp"
android:paddingBottom="8dp"
android:prompt="@string/action_sign_in"
android:spinnerMode="dialog" />
希望这会有所帮助。
答案 9 :(得分:0)
此Kotlin代码比另一个答案中的getView
替代要简洁一些。
这使它在更少的行中更清楚一点,即它主要是执行super的操作,不同之处在于它还覆盖了setPadding
的左值。
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
return super.getView(position, convertView, parent).apply {
setPadding(0, paddingTop, paddingRight, paddingBottom)
}
}
这是我的完整片段代码,它使用数据绑定对象进行完整的微调器阵列适配器覆盖,它还会在getDropDownView
中执行选定项和交替的背景色:
binding.editSpinner.apply {
this.context ?: return@apply
this.adapter = object : ArrayAdapter<Any>(
requireContext(),
android.R.layout.simple_spinner_dropdown_item,
SpinnerTypeValues.values().map { it.text }
) {
override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View {
return super.getDropDownView(position, convertView, parent).also {
when {
position == this@apply.selectedItemPosition -> it.setBackgroundColor( Color.rgb(245, 212, 119) )
position % 2 == 0 -> it.setBackgroundColor(Color.rgb(240, 240, 240))
else -> it.setBackgroundColor(Color.rgb(214, 235, 189))
}
}
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
return super.getView(position, convertView, parent).apply {
setPadding(0, paddingTop, paddingRight, paddingBottom)
}
}
}
this.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onNothingSelected(parent: AdapterView<*>?) {}
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
viewModel.saveSpinnerSelection(position)
}
}
}
答案 10 :(得分:0)
创建文本视图布局view_spinner_text_view.xml:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
通过提供以上布局来创建适配器:
ArrayAdapter.createFromResource(
context,
R.array.my_values,
R.layout.view_spinner_text_view // <-- this is for the spinner itself
).also { adapter ->
adapter.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item // <-- this is for the dropped-down items (you can customize this one as well)
)
spinner.adapter = adapter
}
答案 11 :(得分:0)
用新的spinner_item布局替换代码中的android.R.layout.simple_spinner_item布局
spinner_item的代码:
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/primaryText"
android:textColor="@color/black"
android:textStyle="bold"/>
这将删除多余的边距,您可以根据需要对其进行样式设置。谢谢。
答案 12 :(得分:-1)
这项工作对我来说
Spinner spn = (Spinner) findViewById(R.id.spn);
spn.setPadding(0, spn.getPaddingTop(), spn.getPaddingRight(), spn.getPaddingBottom());