我正在使用android spinner和来自支持lib v21的edittext。我想将文本对齐,就像edittext一样,如图所示。但是,狡猾的旋转器包括间距或填充。所以,我想删除它以将文本对齐到左边。请帮助如何删除它。
在你的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;
}
也许这是最简单的方式,也只是工作。要减少Spinner
的左边距,你可以使用set padding left to minus,这样它就会向左移动。例如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" />
希望这可以帮助。
这对我有用
Spinner spn = (Spinner) findViewById(R.id.spn);
spn.setPadding(0, spn.getPaddingTop(), spn.getPaddingRight(), spn.getPaddingBottom());
请尝试以下代码。将微调器列表项布局中的样式属性更改为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" />
此数组适配器删除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
}
}
试试这个,
TextView
中显示的Spinner
布局来自你的SpinnerAdapter
,它提供了两种方法:
getView(position, convertView, parent)
:返回折叠状态的视图,您可以覆盖它以返回不同选定项目的不同布局getDropdownView(position, convertView, parent)
:返回展开状态下每个下拉项的视图(单击Spinner打开弹出/对话框以供选择)在您的情况下,您应该覆盖您的SpinnerAdapter.getView(position, convertView, parent)
并使用您选择的填充/间距来扩充布局。
例如:
spinner.setAdapter(new MyAdapter());
my adapter.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()
方法使用的正确布局。
如果你不想搞乱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>
您还可以在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">
我刚刚也遇到了这个问题。我能够通过实际调整边距而不是填充来解决它,因此将android:marginStart =“0dp”设置为微调项目。
在你的onViewCreated()
spinner.post { spinner.setPadding(0,0,0,0) }