避免在Spinner中显示所选文本

时间:2017-01-13 17:57:10

标签: android spinner android-spinner android-xml

android微调器的默认行为是最初显示微调器下拉部分顶部的第一个项目。当用户在下拉列表中选择其他项目/文本时,它将使用所选项目更新顶部的文本。

我不希望在微调器的顶部显示任何文本。 没有空头刺作为第一项,因为这留下了空白。有谁知道这是怎么做到的吗?这就是我到目前为止所拥有的


styles.xml

<resources>
    <style parent="@android:style/Widget.TextView.PopupMenu" name="SpinnerAsEditText">
        <item name="android:background">@drawable/filter_arrow</item>
    </style>
</resources>


这是我的布局:main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:background="@color/colorAccent"
    android:layout_height="match_parent">

    <Spinner
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:entries="@array/list"
        style="@style/SpinnerAsEditText"/>
 </RelativeLayout>


这是我的问题的直观表示 - 如果你点击这个图像/ gif,它应该为我的问题设置动画。

enter image description here

3 个答案:

答案 0 :(得分:1)

您可以使用popUpWindow显示dropDownList。

<ImageView
    android:id="+@id/spinnerImage"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="showSpinner" />

在java中

findViewById(R.id.spinnerImage).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
             mSortPopupWindow = popupWindow(spinnerItemList);
                    mSortPopupWindow.showAsDropDown(v, -5, 0); // This is impotent to where to show drop down   
            }
        });

 public PopupWindow popupWindow(String[] stringArray) {
        PopupWindow popupWindow = new PopupWindow(mContext);
        ListView listView = new ListView(mContext);

        listView.setAdapter(dropDownAdapter(stringArray));

        listView.setOnItemClickListener( AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Toast.makeText(mContext, "Selected" + stringArray[position], Toast.LENGTH_SHORT).show();
            popupWindow.dismiss();
        }

    });

        popupWindow.setFocusable(true);
        popupWindow.setWidth(250);//Or you can set wrap_content
        popupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);

        popupWindow.setContentView(listView);

        return popupWindow;
    }

答案 1 :(得分:0)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:background="@color/colorAccent"
    android:layout_height="match_parent">

    <Spinner
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:entries="@array/list"
        style="@style/SpinnerAsEditText"/>
 </RelativeLayout>


<?xml version="1.0" encoding="utf-8"?>  
    <resources>  
     <array name="list">  
    <item></item>  
    <item>second</item>  
    <item>third</item>  
    <item>fourth</item>  
    <item>fifth</item>  
     </array>
    </resources>

答案 2 :(得分:0)

您可以使用单击时显示微调器的图像。最初,微调器将被隐藏。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="@color/colorAccent"
android:layout_height="match_parent">
<ImageView
    android:id="+@id/spinnerImage"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:onClick="showSpinner" />
<Spinner
    android:id="+@id/spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:entries="@array/list"
    style="@style/SpinnerAsEditText"
    android:visibility="hidden"/>

和Java:

void showSpinner() {
   findViewById(R.id.spinnerImage).setVisibility(View.GONE);
   findViewById(R.id.spinner).setVisibility(View.VISIBLE);
}