我正在寻找一种方法来隐藏Android微调框小部件中的一个项目.这将允许您模拟没有选择项目的微调器,并确保始终为所选的每个项目调用onItemSelected()回调(如果隐藏项目是"当前"项目).通常,微调器中总有一个项不会生成回调,即当前的回调.
stackoverflow上有一些关于如何禁用(灰显)项目的代码,而不是如何完全隐藏项目,就好像它们不存在一样.
经过多次实验,我想出了一个适用于各种新旧Android平台的黑客解决方案.它有一些小的化妆品缺点,很难注意到.我仍然希望听到一个更正式的解决方案,除了"不要用旋转器做那个".
这总是隐藏微调器中的第一个项目,但可以相当容易地扩展以隐藏任意项目或多个项目.在微调器项列表的开头添加一个包含空字符串的虚拟项.您可能希望在微调器对话框打开之前将当前微调器选择设置为项目0,这将模拟未选择的微调器.
使用ArrayAdapter方法的Spinner设置示例覆盖:
List<String> list = new ArrayList<String>();
list.add(""); // Initial dummy entry
list.add("string1");
list.add("string2");
list.add("string3");
// Populate the spinner using a customized ArrayAdapter that hides the first (dummy) entry
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list) {
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent)
{
View v = null;
// If this is the initial dummy entry, make it hidden
if (position == 0) {
TextView tv = new TextView(getContext());
tv.setHeight(0);
tv.setVisibility(View.GONE);
v = tv; …Run Code Online (Sandbox Code Playgroud) 我试图让Spinner加载没有选定的值.一旦用户选择了一个值,它就会将它们带到另一个页面.
这被证明是一个问题,因为目前,页面只是在用户选择之前立即加载.
我的微调器类的设置方式与Google的相同:http://developer.android.com/resources/tutorials/views/hello-spinner.html
所以基本上,是否有可能有一个微调器加载没有选择,因为目前,它加载我的字符串数组中的第一个项目.
当用户点击菜单项以允许用户选择项目时,我想调出微调器对话框.
我是否需要单独的对话框,还是可以直接使用Spinner?我看到这个链接,提到了一个MODE_DIALOG选项,但它似乎不再被定义了.AlertDialog可能没问题,但所有选项都说"单击列表中的项目不会忽略对话框"这就是我想要的.有什么建议吗?
理想情况下,代码类似于在屏幕上显示微调器的情况:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(activity,
android.R.layout.simple_spinner_item, items);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
myspinner.setAdapter(adapter);
// myspinner.showAsDialog() <-- what i want
Run Code Online (Sandbox Code Playgroud) 是否有提示类似于为编辑文本字段提供的提示的微调器.我知道您可以使用一个提示标题栏的提示,但仍然将初始微调器字段留空,直到您单击进入微调器.我目前有一种粗略的方法是将一个虚拟字段设置为微调器数组的第一部分,这是问题,然后在末尾检查以确保微调器不等于问题字符串.有没有更干净/更好的方法呢?
谢谢!
我试图在微调框小部件中添加一个提示,因为没有提示的选项EditText,我希望将性别显示为提示,单击时它必须只显示男性和女性而不是提示.
如何使用XML完成它
微调器的XML代码.
<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/spinner1"
android:entries="@array/gender"
android:layout_marginTop="10dp"
android:layout_marginLeft="25dp"
android:layout_marginRight="25dp"
android:layout_gravity="center_horizontal" />
Run Code Online (Sandbox Code Playgroud)
String微调器的数组
<string-array name="gender">
<item>Male</item>
<item>Female</item>
</string-array>
Run Code Online (Sandbox Code Playgroud) 我想显示性别选择的下拉列表.我传递了一个字符串数组
String arr[]=new String[]{"male","female"};
Run Code Online (Sandbox Code Playgroud)
但问题是显示默认选择的值为,"male"我想显示"Gender"为默认值.如果我在位置0的数组中传递"Gender",那么它也会在下拉列表中显示.我只想要"性别"作为提示,但不能在下拉列表中显示.
任何人都可以告诉我如何做到这一点.提前致谢.
我有,spinner但只有可选择的项目显示为默认标题..
是否有任何方式我可以设置标题,当旋转器展开时不会出现...
我有一个Spinnerin spinnerMode="dropdown"模式.而不是预先选择的第一项,我想向用户显示提示,以便没有默认选择(例如»请选择项目«)
这是我得到的用户界面:

这是我想要的UI:

我认为EditText小部件有一个android:hint属性,但不是Spinner小部件和设置它没有带给我我想要的UI.这是一个仅限Android 4.x的应用程序,因此我不必为任何4.0之前的兼容性问题而烦恼.
显示数据数组的第一年而不是我的微调器中的提示文本.我尝试在XML中添加提示,但我也试过代码.此外,在添加spinnerSelector属性时,它为我提供了"资源未找到错误".
<Spinner
android:id="@+id/spinnerYear"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:drawSelectorOnTop="true"
android:padding="5dip"
android:prompt="@string/spinner_header"
android:background="@drawable/selector_yearspinnerback"
android:layout_below="@+id/linearLayout_gender_btns"
android:layout_centerHorizontal="true"></Spinner>
-- android:spinnerSelector="@drawable/category_arrow"
Run Code Online (Sandbox Code Playgroud)
ArrayList<String> yearList = new ArrayList<String>();
int now = new Date().getYear() + 1900;
for (int i = now; i > now - 110; i--) {
yearList.add(i + "");
}
Spinner spinner = (Spinner) findViewById(R.id.spinnerYear);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, yearList);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud) 我android:prompt对旋转器有问题.我在XML文件中使用了这段代码,但它不起作用:
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="120dp"
android:prompt="@string/club_type">
</Spinner>
Run Code Online (Sandbox Code Playgroud)
我也尝试在我的主要活动中使用此代码,但这也不起作用:
spinner.setPrompt("Select club");
Run Code Online (Sandbox Code Playgroud)
当我使用第二种情况时,我没有使用android:prompt; 换句话说,我是单独尝试过的.有人能帮助我吗?