Android Spinner项目作为网格 [英] Android Spinner items as a grid

查看:169
本文介绍了Android Spinner项目作为网格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

默认情况下,单击微调框时,项目显示为列表。我想改变显示为网格的项目。
我该怎么做?
我只需要一些方向。

感谢
更新:
这是我的代码。我的控制器下拉显示为多排网格。我附上了这张照片的样子。我也无法选择这些值。



  package com.example.com.android.spinner; 

导入android.app.Activity;
导入android.content.Context;
导入android.os.Bundle;
导入android.view.LayoutInflater;
导入android.view.View;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.GridView;
导入android.widget.ImageView;
导入android.widget.Spinner;
导入android.widget.TextView;

public class AndroidCustomSpinner extends Activity {

String [] DayOfWeek = {Sunday,Monday,Tuesday,
Wednesday,Thursday , 星期五星期六};

/ **首次创建活动时调用。 * /
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Spinner mySpinner =(微调)findViewById(R.id.spinner);
mySpinner.setAdapter(new MyCustomAdapter(AndroidCustomSpinner.this,R.layout.row,DayOfWeek));
}

public class MyCustomAdapter extends ArrayAdapter< String> {

private context context;

public MyCustomAdapter(Context context,int textViewResourceId,
String [] objects){
super(context,textViewResourceId,objects);
this.context = context;

// TODO自动生成的构造函数存根
}
$ b @Override
public View getDropDownView(int position,View convertView,
ViewGroup父类){
// TODO自动生成方法存根
返回getCustomView(position,convertView,parent);
}

@Override
public View getView(int position,View convertView,ViewGroup parent){
// TODO自动生成的方法存根
TextView标记=(TextView的)convertView;

if(convertView == null){
convertView = new TextView(context);
label =(TextView)convertView;
}

label.setText(DayOfWeek [position]);

return(convertView);


$ b $ public View getCustomView(int position,View convertView,ViewGroup parent){
// TODO自动生成的方法存根
//返回super.getView(position,convertView,parent);

LayoutInflater inflater = getLayoutInflater();
View row = inflater.inflate(R.layout.row,parent,false);
GridView标签=(GridView)row.findViewById(R.id.gridView1);

ArrayAdapter< String> adapter = new ArrayAdapter< String>(AndroidCustomSpinner.this,android.R.layout.simple_list_item_1,DayOfWeek);
label.setAdapter(adapter);


返回行;




$ b $ main $

 <?xml version =1.0encoding =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
>
< TextView
android:layout_width =fill_parent
android:layout_height =wrap_content
android:text =@ string / hello
/>
< Spinner
android:id =@ + id / spinner
android:layout_width =fill_parent
android:layout_height =wrap_content
/> ;
< / LinearLayout>

row.xml

 <?xml version =1.0encoding =utf-8?> 
< LinearLayout xmlns:android =http://schemas.android.com/apk/res/android
android:layout_width =fill_parent
android:layout_height =wrap_content
android:orientation =horizo​​ntal>

< GridView
android:id =@ + id / gridView1
android:numColumns =auto_fit
android:gravity =center
android:columnWidth =50dp
android:stretchMode =columnWidth
android:layout_width =fill_parent
android:layout_height =fill_parent>

< / GridView>
< / LinearLayout>


解决方案

您需要覆盖 getDropDownView Spinner 的方法显示 GridView



为了从 Spinner 中选择数值,请在<$ code> OnItemClickListener c $ c> GridView 来获取回调。例如:

  label.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> parent ,View v,int pos,long id){
Toast.makeText(getContext(),+ pos,Toast.LENGTH_SHORT).show();
}
});


By default when Spinner is clicked, items are showed as list. I want to change the items showed as grid. How can I do that? I just need some direction.

Thanks UPDATE: This is my code. My spinner drop down is showing up as multiple rows of grid.I have attached a picture of how it looks like at this moment. I am also unable to select the values.

    package com.example.com.android.spinner;

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.ArrayAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;

public class AndroidCustomSpinner extends Activity {

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

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Spinner mySpinner = (Spinner)findViewById(R.id.spinner);
        mySpinner.setAdapter(new MyCustomAdapter(AndroidCustomSpinner.this, R.layout.row, DayOfWeek)); 
    }

    public class MyCustomAdapter extends ArrayAdapter<String>{

        private Context context;

        public MyCustomAdapter(Context context, int textViewResourceId,
                String[] objects) {
            super(context, textViewResourceId, objects);
            this.context=context;

            // TODO Auto-generated constructor stub
        }

        @Override
        public View getDropDownView(int position, View convertView,
                ViewGroup parent) {
            // TODO Auto-generated method stub
            return getCustomView(position, convertView, parent);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            TextView label=(TextView)convertView;

              if (convertView==null) {
                convertView=new TextView(context);
                label=(TextView)convertView;
              }

              label.setText(DayOfWeek[position]);

              return(convertView);

        }

        public View getCustomView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            //return super.getView(position, convertView, parent);

            LayoutInflater inflater=getLayoutInflater();
            View row=inflater.inflate(R.layout.row, parent, false);
            GridView label=(GridView)row.findViewById(R.id.gridView1);

            ArrayAdapter<String> adapter = new ArrayAdapter<String>(AndroidCustomSpinner.this,android.R.layout.simple_list_item_1,DayOfWeek);
            label.setAdapter(adapter);


             return row;
        }   
    }

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"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
<Spinner
    android:id="@+id/spinner"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
</LinearLayout>

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">

<GridView 
    android:id="@+id/gridView1"
    android:numColumns="auto_fit"
    android:gravity="center"
    android:columnWidth="50dp"
    android:stretchMode="columnWidth"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

</GridView>
</LinearLayout>

解决方案

You need to override getDropDownView method of your Spinner to show the GridView.

And in order to select values out from your Spinner, use OnItemClickListener on your GridView to get callbacks. for example:

label.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v, int pos, long id) {
        Toast.makeText(getContext(), "" + pos, Toast.LENGTH_SHORT).show();
    }
});

这篇关于Android Spinner项目作为网格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆