避免在 Spinner 中显示选定的文本
Avoid showing selected text in Spinner
android 微调器的默认行为是最初在微调器下拉部分的顶部显示第一项。当用户在下拉列表中选择其他 items/text 时,它将使用所选项目更新顶部的文本。
我根本不想在微调器的顶部显示任何文本。 没有将空字符串作为第一项,因为这样会留下空白。有谁知道这是怎么做到的吗?这是我目前所拥有的
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>
这是我的问题的直观表示 - 如果您单击此 image/gif,它应该会激活我的问题。
<?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>
您可以使用一张图片,点击该图片会显示微调器。最初微调器将被隐藏。
<?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);
}
您可以使用 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;
}
android 微调器的默认行为是最初在微调器下拉部分的顶部显示第一项。当用户在下拉列表中选择其他 items/text 时,它将使用所选项目更新顶部的文本。
我根本不想在微调器的顶部显示任何文本。 没有将空字符串作为第一项,因为这样会留下空白。有谁知道这是怎么做到的吗?这是我目前所拥有的
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>
这是我的问题的直观表示 - 如果您单击此 image/gif,它应该会激活我的问题。
<?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>
您可以使用一张图片,点击该图片会显示微调器。最初微调器将被隐藏。
<?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);
}
您可以使用 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;
}