alignment选定的微调项目

我正在微调所选项目在微调器中的位置。 不是下拉列表项目,因为我已经在我的适配器中有一个自定义的视图,但具体的选定的项目。

正如你在截图中看到的,“Any”是当前select的项目。 但它在容器内奇怪地alignment,因为它必须容纳下拉中最长的string,即“深紫色被烧的Sienna”(或其他)。 我想将选定的文本alignment到右侧,以便“下一个”下拉指示符“,而不是在中间的出路。

我试图对自定义的微调项目视图进行调整,但是它对选定的项目没有任何影响。

我也试图在Spinner本身上设置重力和文本alignment,但是没有效果。

这是图像和XML:

在这里输入图像说明

<RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/default_black" android:layout_centerVertical="true" android:text="Color" /> <Spinner android:id="@+id/spn_color" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true"/> </RelativeLayout> 

编辑:这是我的适配器:

 public class ColorsAdapter<T> implements SpinnerAdapter { ArrayList<String> mColors; ArrayList<Integer> mValues; Context mContext; public ColorsAdapter(ArrayList<String> colors, ArrayList<Integer> values, Context context) { mContext = context; mColors = colors; mValues = values; } @Override public int getCount() { return mColors.size(); } @Override public Object getItem(int position) { return mColors.get(position); } @Override public long getItemId(int position) { return position; } @Override public int getItemViewType(int position) { return R.layout.list_item_color; } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView v = new TextView(mContext); v.setText(mColors.get(position)); return v; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); View row = inflater.inflate(getItemViewType(position), parent, false); TextView tvName = (TextView)row.findViewById(R.id.tv_name); tvName.setText(mColors.get(position)); row.setTag(mValues.get(position)); return row; } @Override public int getViewTypeCount() { return 1; } @Override public boolean hasStableIds() { return false; } @Override public boolean isEmpty() { return false; } } 

这里是列表项的XML:

 <TextView android:id="@+id/tv_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:gravity="right"/> 

Solutions Collecting From Web of "alignment选定的微调项目"

您可以调整getView(int position, View convertView, ViewGroup parent)方法中所选项目的设置。 如果你只是想设置重力和文本alignment方式,你应该把它设置为方法中的TextView

 @Override public View getView(int position, View convertView, ViewGroup parent) { TextView v = new TextView(mContext); v.setText(mColors.get(position)); v.setGravity(Gravity.END); // OR v.setGravity(Gravity.RIGHT); return v; } 

或者,如果你想进一步定制,你可以简单地膨胀自定义布局:

 @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService( Context.LAYOUT_INFLATER_SERVICE); View row = null; if (inflater != null) { row = inflater.inflate(R.layout.list_item_view_color, parent, false); TextView textView = row.findViewById(R.id.textview); textView .setText(mColors.get(position)); } return row; } 

其中list_item_view_color.xml是您所选值的布局文件。
(注意:如果你想使用像autoSizeTextType这样的选项,你可以在xml文件中使用AppCompatTextView app前缀)

简单的解决scheme是为微调器TextView布局构build另一个Custom view ,并为其指定TextViewgravity 。 就像是 :

 <!--spinner_layout.xml (in layout/)--> <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="right" /> 

在初始化你的微调器ArrayAdapter中使用它:

 ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, android.R.layout.spinner_layout, spinnerArray); 

UI输出:

在这里输入图像说明

你可以编程的方式为getView方法创buildTextView,所以没有设置任何alignment的属性,简单的做法就是像在getDropdownView上一样操作,或者直接在你实例化的视图中设置合适的重力。

 @Override public View getView(int position, View convertView, ViewGroup parent) { TextView v = new TextView(mContext); v.setText(mColors.get(position)); v.setGravity(Gravity.RIGHT); return v; } 

你可以试试这个

  android:autoSizeTextType="uniform" 

填料,边距和排列变得混乱,当涉及到纺纱厂。 我遇到了类似的问题。 但对我来说,我没有使用自定义视图和适配器,所以我设法使用样式来解决这个问题。 因为您已经在使用自定义视图和适配器,所以可以使微调框的背景为空 ,以便下拉箭头不可见。

 android:background="@null" 

然后在TextView中 ,可以指定drawableRight作为下拉箭头。

 android:drawableRight="@drawable/ic_spinner_drop_arrow_white_24dp" 

该图标可以是一个可拖动的下拉vector。 另外要指定箭头和文本之间的特定边距,您应该可以使用drawablePadding

希望这可以帮助。

我可以给你一个可行的方法。

在XML中

1)添加一个名为the_current_color文本视图的新文本视图

2)将这个文本视图在微调器上方和箭头图标的开头或者你想要的地方放在一起。

在你的代码中

1)当您从微调器上听(选中的项目)时,只需获取当前文本并将其设置在(the_current_color)文本视图中。

2)并尝试通过将颜色更改为透明来隐藏微调器中的文本。

希望它的作品

编辑

我也可能会build议一些可能会改变的东西

可以说我们有一个微调器使用这个string资源文件来填充它的适配器

 <string-array name="my_adapter"> <item>Blue </item> <item>Red</item> </string-array> 

直到现在我们还有一个微调,在微调箭头图标的最左边显示(红色项目)和(蓝色项目)。

现在创build另一个string资源

 <string-array name="my_adapter_two"> <item> Blue </item> <item> Red</item> </string-array> 

正如你现在所看到的,增加的空间会给人一种错觉,就是string在箭头图标旁边

您可以添加适合您需要的空间,也可以在单击某个项目后切换文件,然后将其切换回来。

您可以尝试以下自定义视图。

 <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/textView1" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:gravity="right" android:padding="15dp" android:textAlignment="gravity" android:textColor="@color/black" android:textSize="10dp" />