2011-05-03 81 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