【问题标题】:Two custom spinner layouts两个自定义微调器布局
【发布时间】:2013-01-09 06:19:18
【问题描述】:

我正在尝试使用两个带有自定义下拉菜单的微调器,只有底部的一个在下拉时显示自定义布局。我一直在尝试自己找出原因,但我做不到。

public class setup extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.setuplayout);
    Spinner spinner1 = (Spinner) findViewById(R.id.Spinner01);
    // Create an ArrayAdapter using the string array and a default spinner layout
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
            R.array.numberPlayers, R.layout.spinner_item);
    // Specify the layout to use when the list of choices appears
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    // Apply the adapter to the spinner
    spinner1.setAdapter(adapter);
    Spinner spinner2 = (Spinner) findViewById(R.id.Spinner02);
    // Create an ArrayAdapter using the string array and a default spinner layout
    ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(this,
            R.array.gameDifficulty, R.layout.spinner_item);
    // Specify the layout to use when the list of choices appears
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    // Apply the adapter to the spinner
    spinner2.setAdapter(adapter2);
            }
            }

这是上面提到的 spinner_item 的 xml 代码。

<?xml version="1.0" encoding="utf-8"?>
<TextView  
xmlns:android="http://schemas.android.com/apk/res/android"
android:textColor="#F9B12F"
android:layout_width="fill_parent" 
android:layout_height="wrap_content"
android:textSize="20sp"
android:gravity="left"  
android:padding="5dip"
android:popupBackground="#000000"
android:background="#000000"
/>

这是设置布局 xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
    <ImageView android:id="@+id/mainSetupImage"
        android:src="@drawable/setup"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </ImageView>
    <ImageView
        android:id="@+id/players"
        android:clickable="true"
        android:src="@drawable/players"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_centerVertical="true">
    </ImageView>  
    <Spinner
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:drawSelectorOnTop="true"
        android:id="@+id/Spinner01"
        android:textColor="#F9B12F"
        android:layout_toRightOf="@+id/players"
        android:layout_marginLeft="25dp"
        android:layout_centerVertical="true"
        android:background="@drawable/spinner"/>
    <Spinner 
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:drawSelectorOnTop="true" 
        android:id="@+id/Spinner02"
        android:textColor="#F9B12F"
        android:layout_below="@+id/Spinner01"
        android:layout_toRightOf="@+id/difficulty"
        android:layout_marginTop="25dp"
        android:background="@drawable/spinner"/>

    <ImageView
        android:id="@+id/difficulty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignTop="@+id/Spinner02"
        android:clickable="true"
        android:src="@drawable/difficulty" />       


    </RelativeLayout>

【问题讨论】:

  • 请也发布您的 xml ..
  • 添加了xml。我假设我在编写通用 java 类时出错了,因为其他两项引用了相同的内容。

标签: android android-layout spinner


【解决方案1】:

在第二个微调器中,你使用了适配器而不是适配器 2。所以使用adapter2并运行你的代码希望它会运行。 :)

【讨论】:

  • 我无法将“适配器”短语更改为相同。我收到有关重复局部变量的错误。
  • 兄弟在将适配器设置为 spinner2 时,您使用了“适配器”而不是“适配器 2”。所以在第二个微调器中用“adapter2”替换“adapter”。
【解决方案2】:

在您的帮助下,我想通了。我使用了覆盖我的自定义布局的代码“adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)”。感谢您强调两个代码的不同之处。这是一个巨大的帮助。我删除了引用的行,它现在可以工作了。

【讨论】:

    【解决方案3】:

    我想分享一个小代码,让所有人的代码在制作 ArrayAdapters 时更加简洁。

    只需在您喜欢的类(甚至 MainActivity...)中定义一个静态方法,即可为您提供 Array 适配器,而不会弄脏您的代码:

     public static ArrayAdapter<CharSequence> 
         getArrayAdapter( Context c,  int arrayId, int idLayout1, int idLayout2){
         ArrayAdapter<CharSequence> aa;
         aa = ArrayAdapter.createFromResource( c, arrayId , idLayout1);
         aa.setDropDownViewResource( idLayout2);
         return aa;     
    }
    

    然后在你的代码中你只需要这样做:

    myspinner.addAdapter(
          this, ThatClass.getArrayAdapter( 
                 R.array.myid, R.layout.id1, R.layout.id2 );
    myspinner.setOnItemSelectedListener(this);
    
    /* Remember that the default Android Spinner layout can be get passing these specific layout ids:
        android.R.layout.simple_spinner_item as layout1 
        android.R.layout.simple_spinner_dropdown_item as layout2
    */
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      相关资源
      最近更新 更多