2011-05-03 42 views
1

我需要使用文本框和图标创建微调框。我该怎么做?我现在才如何把相同的图标,以微调的所有行..我需要把diferent图标,每行..带文本和图标的微调框

+0

#尝试这个 查看我最简单的方法[链接](https://stackoverflow.com/a/47390384/7584651) – Sunil 2017-11-20 11:00:29

回答

3

这是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> 

这是textandicon。 XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 
    <ImageView android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/icon"/> 
    <TextView android:id="@+id/textView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="ABC"/> 
</LinearLayout> 

这是活动: -

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Spinner; 

public class SpinnerPractice extends Activity { 
    Spinner spinner; 
    LayoutInflater inflator; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     spinner = (Spinner) findViewById(R.id.spinner); 
     spinner.setAdapter(new NewAdapter()); 
     inflator = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    class NewAdapter extends BaseAdapter { 

     @Override 
     public int getCount() { 
      return 26; 
     } 

     @Override 
     public Object getItem(int arg0) { 
      return null; 
     } 

     @Override 
     public long getItemId(int position) { 
      return 0; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      if (convertView == null) { 
       convertView = inflator.inflate(R.layout.textandicon, null); 
      } 
      return convertView; 
     } 

    } 
} 

希望这有助于。

+0

代替使用新的textandicon.xml布局,我只使用'android.R。 layout.simple_list_item_1' 并在扩展适配器中设置图标: TextView label =(TextView)row.findViewById(android.R.id.text1); label.setText(getItem(position));' label.setCompoundDrawablesWithIntrinsicBounds(image_res_id,0,0,0);' – Benoit 2016-10-19 08:14:34

-2

执行此操作的简单方法是使用使用this constructor创建的ArrayAdapter。第二个和第三个参数是每行布局的ID(您可以在XML文件中定义)以及可以代表您的项目的布局中的文本字段的ID。

例如,你可以有这样的(row.xml)定义的布局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 
     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/icon"/> 
     <TextView 
      android:id="@+id/weekofday" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"/> 
</LinearLayout> 

然后,你可以创建你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); 
    } 
} 

注意通话ArrayAdapter<String>(this, R.layout.row, R.id.weekofday, DayOfWeek);它定义了行布局为R.layout.row,显示数据R.id.weekofday的文本字段以及数据到数组DayOfWeek

唯一的缺点是你不能改变每个项目的图标......如果你想这样做,你想重写BaseAdapter.getView()来为每一行创建(或重新使用)一个视图Spinner的几乎与ListView相同。有几百个关于如何做到这一点的教程。

+0

太糟糕了,每行都没有不同的图标,因为我认为这是使用这种东西的要点。 – forsberg 2016-08-03 17:48:18

+0

代替使用新的row.xml布局,我只使用'android.R.layout.simple_list_item_1' ,并在扩展适配器中将图标设置为: 'label.setCompoundDrawablesWithIntrinsicBounds(image_res_id,0,0,0) ;' – Benoit 2016-10-19 08:11:09