Android 带有文本和图标的微调器

Android 带有文本和图标的微调器,android,text,icons,spinner,Android,Text,Icons,Spinner,我需要制作一个带有文本和图标的微调器。。我该怎么做?我现在才知道如何将同一图标放置到微调器的所有行上。。我需要在每一行放置不同的图标。这是main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layo

我需要制作一个带有文本和图标的微调器。。我该怎么做?我现在才知道如何将同一图标放置到微调器的所有行上。。我需要在每一行放置不同的图标。

这是main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <Spinner android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>
希望这有帮助。

这是main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <Spinner android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

希望这有帮助。

实现这一点的简单方法是使用使用创建的ArrayAdapter。第二个和第三个参数是每行布局的ID(可以在XML文件中定义),以及该布局中可以表示项目的文本字段的ID

例如,您可以定义如下布局(row.xml):


然后您可以像这样创建ArrayAdapter:

package com.exercise.AndroidCustomSpinner;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class AndroidCustomSpinner extends Activity {

    String[] DayOfWeek = {"Sunday", "Monday", "Tuesday",
          "Wednesday", "Thursday", "Friday", "Saturday"};

    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      Spinner mySpinner = (Spinner)findViewById(R.id.spinner);
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        R.layout.row, R.id.weekofday, DayOfWeek);
      mySpinner.setAdapter(adapter);
    }
}
package com.exercise.AndroidCustomSpinner;
导入android.app.Activity;
导入android.os.Bundle;
导入android.widget.ArrayAdapter;
导入android.widget.Spinner;
公共类AndroidCustomSpinner扩展活动{
字符串[]DayOfWeek={“星期日”、“星期一”、“星期二”,
“星期三”、“星期四”、“星期五”、“星期六”};
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
微调器mySpinner=(微调器)findViewById(R.id.Spinner);
ArrayAdapter=新的ArrayAdapter(此,
R.layout.row,R.id.weekofday,DayOfWeek);
设置适配器(适配器);
}
}
注意调用
ArrayAdapter(此,
R.layout.row,R.id.weekofday,DayOfWeek)
将行布局定义为
R.layout.row
,文本字段显示数据
R.id.weekofday
,以及数组
DayOfWeek
中的数据


唯一的缺点是,您无法更改每个项目的图标。。。如果要这样做,您需要覆盖BaseAdapter.getView(),以便为微调器的每一行创建(或重用)一个视图,方法与ListView几乎相同。关于如何做到这一点,有上百个教程。

简单的方法是使用使用创建的ArrayAdapter。第二个和第三个参数是每行布局的ID(可以在XML文件中定义),以及该布局中可以表示项目的文本字段的ID

例如,您可以定义如下布局(row.xml):


然后您可以像这样创建ArrayAdapter:

package com.exercise.AndroidCustomSpinner;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class AndroidCustomSpinner extends Activity {

    String[] DayOfWeek = {"Sunday", "Monday", "Tuesday",
          "Wednesday", "Thursday", "Friday", "Saturday"};

    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      Spinner mySpinner = (Spinner)findViewById(R.id.spinner);
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        R.layout.row, R.id.weekofday, DayOfWeek);
      mySpinner.setAdapter(adapter);
    }
}
package com.exercise.AndroidCustomSpinner;
导入android.app.Activity;
导入android.os.Bundle;
导入android.widget.ArrayAdapter;
导入android.widget.Spinner;
公共类AndroidCustomSpinner扩展活动{
字符串[]DayOfWeek={“星期日”、“星期一”、“星期二”,
“星期三”、“星期四”、“星期五”、“星期六”};
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
微调器mySpinner=(微调器)findViewById(R.id.Spinner);
ArrayAdapter=新的ArrayAdapter(此,
R.layout.row,R.id.weekofday,DayOfWeek);
设置适配器(适配器);
}
}
注意调用
ArrayAdapter(此,
R.layout.row,R.id.weekofday,DayOfWeek)
将行布局定义为
R.layout.row
,文本字段显示数据
R.id.weekofday
,以及数组
DayOfWeek
中的数据


唯一的缺点是,您无法更改每个项目的图标。。。如果要这样做,您需要覆盖BaseAdapter.getView(),以便为微调器的每一行创建(或重用)一个视图,方法与ListView几乎相同。关于如何做到这一点,有上百个教程。

可惜每行没有不同的图标,因为我认为这是使用这种东西的要点。代替使用新的row.xml布局,我只需使用android.R.layout.simple_list_item_1,并在扩展适配器中设置图标:
label.setCompoundDrawablesWithIntrinsicBounds(image_res_id,0,0,0)
太糟糕了,每一行没有不同的图标,因为我认为这是使用这种东西的要点。在使用新的row.xml布局的地方,我只使用了
android.R.layout.simple\u list\u item\u 1
并在扩展适配器中设置图标:
label.setcompoundDrawableswithintrisicbounds(image\u res\u id,0,0)
代替使用新的textandicon.xml布局,我只使用了
android.R.layout.simple\u list\u item\u 1
,并在扩展适配器中设置图标:TextView label=(TextView)row.findViewById(android.R.id.text1);label.setText(getItem(position));`label.setCompoundDrawablesWithIntrinsicBounds(图像分辨率id,0,0,0)`代替使用新的textandicon.xml布局,我只使用了
android.R.layout.simple\u list\u item\u 1
,并在扩展适配器中设置图标:TextView label=(TextView)row.findViewById(android.R.id.text1);label.setText(getItem(position));`label.setCompoundDrawablesWithIntrinsicBounds(图像分辨率id,0,0,0)`#试试看我最简单的方法
package com.exercise.AndroidCustomSpinner;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class AndroidCustomSpinner extends Activity {

    String[] DayOfWeek = {"Sunday", "Monday", "Tuesday",
          "Wednesday", "Thursday", "Friday", "Saturday"};

    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      Spinner mySpinner = (Spinner)findViewById(R.id.spinner);
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        R.layout.row, R.id.weekofday, DayOfWeek);
      mySpinner.setAdapter(adapter);
    }
}