0

我有一个 Spinner,但提示消息被忽略。我找不到原因。

我的布局:

<Spinner
       android:id="@+id/spinner"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:layout_marginBottom="15dp"
       android:prompt="@string/age"
       android:drawSelectorOnTop="true"
       android:background="@drawable/spinner_bg" />

我的代码:

spinner = (Spinner) findViewById(R.id.spinner);
    SpinnerAdapter adapter = new SpinnerAdapter(this, R.layout.spinner_item, getApplicationContext().getResources().getStringArray(R.array.spinnerArray));
    spinner.setAdapter(adapter);
    adapter.setDropDownViewResource(R.layout.spinner_item);

微调器适配器:

public class SpinnerAdapter extends ArrayAdapter<String>{

public SpinnerAdapter(Context context, int textViewResourceId,
        String[] objects) {
    super(context, textViewResourceId, objects);
}


public View getView(int position, View convertView, ViewGroup parent) {
    View v = super.getView(position, convertView, parent);

    Typeface externalFont=Typeface.createFromAsset(getContext().getAssets(), "fonts/PermanentMarker.ttf");
    ((TextView) v).setTypeface(externalFont);

    return v;
}


public View getDropDownView(int position,  View convertView,  ViewGroup parent) {
    View v =super.getDropDownView(position, convertView, parent);

    Typeface externalFont=Typeface.createFromAsset(getContext().getAssets(), "fonts/PermanentMarker.ttf");
    ((TextView) v).setTypeface(externalFont);

    return v;
}

}

spinner_item 的布局:

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="fill_parent"
android:layout_height="38dp"
android:ellipsize="marquee"
android:gravity="center_vertical|left"
android:minHeight="38dp"
android:paddingLeft="5dp"
android:singleLine="true"
android:textSize="18sp" />

你有什么主意吗 ?

4

1 回答 1

3

认为您误解了 android:prompt 的作用......它没有在关闭的微调器中设置文本,它设置了打开的微调器的标题/标题。

Closed spinner:     Spinner Item 1

Open Spinner:       Android Spinner Prompt
                    ----------------------
                    Spinner Item 1
                    Spinner Item 2

有几种方法可以将提示放在关闭的微调器显示中。一种方法是在第一个位置插入将加载到您的微调器的虚拟数据,然后让您的听众忽略它(如果它被选中)(我不喜欢这样,因为它会将垃圾放入您的数据存储中)。

另一种选择是创建一个自定义微调器适配器,以将提示作为微调器的第一个条目插入(我喜欢这个,因为它在代码中保留了提示,并使您的数据保持应有的状态......数据)。

希望这可以帮助!祝你好运!

于 2012-05-07T06:53:19.507 回答