【问题标题】:Android Spinner - How to remove radio buttons?Android Spinner - 如何删除单选按钮?
【发布时间】:2009-12-12 00:58:14
【问题描述】:

在 Android 1.6 中,点击微调器(下拉菜单)后,单选按钮会出现在微调器选项旁边。如何删除这些单选按钮,只保留选项文本?

【问题讨论】:

    标签: java android android-widget spinner


    【解决方案1】:

    只需删除单选按钮,您不需要自己的适配器类。

    在布局中创建一个 dropdown_item.xml

    <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
        android:id="@android:id/text1"
        style="?android:attr/spinnerDropDownItemStyle"
        android:singleLine="true"
        android:layout_width="fill_parent"
        android:layout_height="?android:attr/listPreferredItemHeight"
        android:ellipsize="marquee" />
    

    然后在代码中进行以下调用。

    arrayAdapter.setDropDownViewResource(R.layout.dropdown_item);
    

    默认的微调器下拉项是带有单选按钮的 CheckedTextView。在这里,您将其替换为 TextView。

    【讨论】:

    • android:id="@android:id/text1" 是可选的吗?
    【解决方案2】:

    你可以使用android布局

    android.R.layout.simple_spinner_item 
    

    而不是

    android.R.layout.simple_spinner_dropdown_item
    

    但我推荐@kimkunjj 回答,它会给你布局的控制权。

    【讨论】:

      【解决方案3】:

      如果您想摆脱微调器列表中的单选按钮,您必须为行提供自己的布局。
      看看下面的例子:

      
      package com.ramps;
      
      import android.app.Activity;
      import android.content.Context;
      import android.os.Bundle;
      import android.widget.ArrayAdapter;
      import android.widget.Spinner;
      import android.widget.SpinnerAdapter;
      
      public class MySpinner extends Activity {
          //data that will be used as a spinner options
          private static String data[] = {"one", "two", "three"};
      
          /** Called when the activity is first created. */
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              //main.xml file contains spinner
              setContentView(R.layout.main);
              Spinner spinner = (Spinner) findViewById(R.id.spinner);
              //create your own adapter
              MySpinnerAdapter adapter = new MySpinnerAdapter(this,R.layout.custom_spinner_row,R.id.text, data );
              //set your custom adapter 
              spinner.setAdapter( adapter );
          }
      
      
          private class MySpinnerAdapter extends ArrayAdapter{
      
              public MySpinnerAdapter(Context context, int resource,
                      int textViewResourceId, String[] objects) {
                  super(context, resource, textViewResourceId, objects);          
              }   
      
          }
      }
      


      微调行的自定义布局只是一个简单的 LinearLayout,其中包含一个 id 为“text”的 TextView 元素(android:id="@+id/text")

      这只是一个简单的例子。如果您需要比 TextView 更花哨的布局,您可能必须重写 MySpinnerAdapter 的 getView() 方法。

      【讨论】:

        【解决方案4】:

        "android.R.layout.simple_spinner_item" 完成这项工作,

        以编程方式是:

        modeSpinner=new Spinner(layout.getContext());
        ArrayAdapter<String> arrayAdapter=new ArrayAdapter<String>(layout.getContext(),     
            android.R.layout.simple_spinner_item, Arrays.asList(modes));
        arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
        

        【讨论】:

          【解决方案5】:

          如果您在项目中包含了 android 支持库版本 18 或更高版本,则可以将资源 id simple_spinner_dropdown_item 替换为 support_simple_spinner_dropdown_item。这将删除单选按钮。

          【讨论】:

            【解决方案6】:

            使用simple_dropdown_item_1line

            【讨论】:

              【解决方案7】:

              执行此操作的“最干净”的方法(只需删除复选标记并且 触摸其他任何内容,包括文本样式、项目大小等)是创建自定义适配器(如上面的答案) :

              public class SimpleSpinnerArrayAdapter extends ArrayAdapter<String> {
              
                  public SimpleSpinnerArrayAdapter(Context context, String[] data) {
                      super(context, android.R.layout.simple_spinner_item, data);
                      this.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                  }
              
                  public SimpleSpinnerArrayAdapter(Context context, List<String> data) {
                      super(context, android.R.layout.simple_spinner_item, data);
                      this.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                  }
              
                  /**
                   * Returns default dropdown view with removed checkbox
                   */
                  public View getDropDownView(int position, View convertView, ViewGroup parent) {
                      View view = super.getDropDownView(position, convertView, parent);
                      if (view != null && view instanceof CheckedTextView) {
                          ((CheckedTextView) view).setCheckMarkDrawable(null);
                      }
                      return view;
                  }
              }
              

              请注意getDropDownView() 方法返回下拉列表项的视图。您可以在此处使用任何自定义视图,但如果您想坚持使用默认视图,您可能应该使用上面的代码。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-11-07
                • 1970-01-01
                • 2018-07-14
                • 1970-01-01
                • 2021-12-06
                相关资源
                最近更新 更多