如何在Android中使Spinner中的文本居中显示

4

我在我的LinearLayout中有一个Spinner。

我正试图将文本居中在Spinner中:

enter image description here

这是该元素的XML代码:

 <Spinner
    android:id="@+id/project_Spinner"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginRight="50dp"
    android:layout_marginLeft="50dp"
    android:padding="1dip"


    android:prompt="@string/spinner_title"
/>

在Activity中声明spinner的方法:
// Creating adapter for spinner
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, NomProjets);

    // Drop down layout style - list view with radio button
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    // attaching data adapter to spinner
    spinner.setAdapter(dataAdapter);

感谢您的来信。

1
尝试使用android:gravity="center_horizontal" - TheModularMind
将 android:gravity="center" 添加到您的 Spinner 元素中。 - hakkikonu
2个回答

10

实际上创建 Spinner 的项目的组件是适配器。因此,您应该自定义适配器(通过覆盖 getView() 方法),以返回居中的 TextView 小部件。

在您的情况下,用以下代码替换 new ArrayAdapter<String> ... 初始化:

ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, NomProjets)
{
    @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 = (TextView)view.findViewById(android.R.id.text1);
        textView.setGravity(Gravity.CENTER);
        return view;
    }
};

3
Matiash的回答可行。这里有另一种方法:
实际上,spinner中的文本是包含在TextView中的,因此我们可以覆盖android.R.layout.simple_spinner_item.xml(位于sdk\platforms\android-xx\data\res\layout),在/layout文件夹中创建一个新的xml,并添加一个属性:android:gravity="center",使TextView中的文本居中。
类似于这样:(点击查看图片)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接