精华内容
下载资源
问答
  • spinner

    2017-01-05 16:17:56
    spinner

    一般用法:

    布局XML文件:

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

    资源文件:res.values.arrays.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="languages">
            <item>c语言</item>
            <item>java </item>
            <item>php</item>
            <item>xml</item>
            <item>html</item>
        </string-array>
    </resources>

    Java代码:

      Spinner spinner = (Spinner) findViewById(R.id.spinner1);
            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view,
                                           int pos, long id) {
                    String[] languages = getResources().getStringArray(R.array.languages);
                    Toast.makeText(Act4.this, "你点击的是:"+languages[pos], Toast.LENGTH_LONG).show();
                }
                @Override
                public void onNothingSelected(AdapterView<?> parent) {
                    // Another interface callback
                }
            });

    效果:
    spinner

    spinner的样式会根据app的主题变化,在android:Theme.Holo.Light主题下的效果很好,同样的代码如果在android:Theme.Light下面就会变得很丑。 也许这就是很多人不想使用Spinner的原因了吧。如果想兼容2.3,则只能忍受这样的效果。

    spinner继承关系:

    public class Spinner extends AbsSpinner 
    implements OnClickListener {...}
    
    public abstract class AbsSpinner extends 
    AdapterView<SpinnerAdapter> {...}
    
    public abstract class AdapterView<T extends 
    Adapter> extends ViewGroup {...}

    上面使用Spinner数据源于xml数组,其实用的最多的还是通过adapter来跟Spinner绑定数据。

    spinner使用适配器

    // 建立Adapter并且绑定数据源
            //这两行代码可以决定Spinner的外观,第二个参数是Spinner未展开菜单时Spinner的默认样式,
            // android.R.layout.simple_spinner_item是系统自带的内置布局。
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                            android.R.layout.simple_spinner_item, mItems);
            //设置的是展开的时候下拉菜单的样式(注意和上面区别),
            // 同理android.R.layout.simple_spinner_dropdown_item也是内置布局。
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            //绑定 Adapter到控件
            spinner.setAdapter(adapter);
    
            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view,
                                           int pos, long id) {
    
                    String[] languages = getResources().getStringArray(R.array.languages);
                    Toast.makeText(Act4.this, "你点击的是:" + languages[pos], Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void onNothingSelected(AdapterView<?> parent) {
                    // Another interface callback
                }
            });

    没有adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item):

    没有dropdown

    有setDropDownViewResource:定义下拉菜单要显示的样式

    有dropdown

    使用自定义的BaseAdapter

    这种情况适用于spinner比较复杂的情况,比如带有图标。和listview,GridView使用一样。

    Spinner的xml属性

    1 entries: 直接在xml布局文件中绑定数据源(可以不设置,即可以在Activity中动态绑定)

    2 spinnerMode: Spinner的显示形式

    3 prompt:在Spinner弹出选择对话框的时候对话框的标题.
    为对话框设置标题.
    可在XMl文件中通过“android:prompt”设置
    Java代码中:spinner.setPrompt(“你来自哪个省”);

    属性名称

    android:dropDownHorizontalOffset

    对应方法:

    setDropDownHorizontalOffset(int)
    spinnerMode=”dropdown”时,下拉的项目选择窗口在水平方向相对于Spinner窗口的偏移量。

    它必须是一个带有单位的浮点型尺寸值,如:”14.5sp”。有效的单位包括:px(像素)、dp(密度无关的像素)、sp(基于引用字体的尺寸来缩放的像素)、in(英寸)、mm(毫米)。

    这个属性还可以引用一个资源(格式:@[package:]type:name)或者是包含这种类型值的主题属性(格式:?[package][type:]name)。

    这个属性对应全局属性资源符号dropDownHorizontalOffset。

    android:dropDownSelector

    用于设定spinnerMode=”dropdown”时列表选择器的显示效果。

    它可以用”@[+][package]:type:name”格式来引用另外的资源,或者是用”?[package:][type:]name”的格式来 应用主题属性,还可以是”#rgb”、”#argb”、”#rrggbb”、”aarrggbb”格式的颜色值。

    它对应的全局属性资源符号是dropDownSelector。

    android:dropDownVerticalOffset

    对应方法:

    setDropDownVerticalOffset(int)
    spinnerMode=”dropdown”时,下拉的项目选择窗口在垂直方向相对于Spinner窗口的偏移量。

    这个属性它必须是一个带有单位的浮点型尺寸值,如:”14.5sp”。有效的单位包括:px(像素)、dp(密度无关的像素)、sp(基于引用字体的尺寸来缩放的像素)、in(英寸)、mm(毫米)。

    还可以引用一个资源(格式:@[package:]type:name)或者是包含这种类型值的主题属性(格式:?[package][type:]name)。

    这个属性对应全局属性资源符号dropDownVerticalOffset。

    android:dropDownWidth

    对应方法:

    setDropDownWidth(int)
    在spinnerMode=”dropdown”时,设定下拉框的宽度。

    这个属性可以是带有单位的浮点型的尺寸值,如:14.5sp。有效的单位包括:px(像素)、dp(密度无关的像素)、sp(基于引用字体的尺寸来缩放的像素)、in(英寸)、mm(毫米)。

    还可以引用一个资源(格式:@[package:]type:name)或者是包含这种类型值的主题属性(格式:?[package][type:]name)。

    还可以是下列常量之一:

    fill_parent = -1,下拉框的宽度应该使用屏幕的宽度来设定。这个常量从API Level 8开始被废弃了,并且使用mach_parent常量来代替。

    mach_parent = -1,下拉框的宽度应该使用屏幕的宽度来设定。在API Level 8中被引入。

    wrap_content = -2,下拉框的宽度应该跟它的内容相适应。

    它对应的全局资源符号是dropDownWidth。

    android:gravity

    对应方法:

    setGravity(int)
    这个属性用于设置当前选择的项目的对齐方式。

    它必须是以下常量值之一或组合(用”|”符号分离)。

    top = 0x30:把选择的对象放到它的容器的顶部,不改变它的尺寸。

    bottom = 0x50:把选择的对象放到它的容器的底部,不改变它的尺寸。

    left = 0x03:把选择的对象放到它的容器的左边,不改变它的尺寸。

    right = 0x05:把选择的对象放到它的容器的右边,不改变它的尺寸。

    center_vertical = 0x10:把选择的对象放到它的容器的垂直中心,不改变它的尺寸。

    fill_vertical = 0x70:为了完全的填充它的容器,系统会根据需要来增加选择对象的垂直尺寸。

    center_horizontal = 0x01:把选择的对象放到它的容器的水平中心,不改变它的尺寸。

    fill_horizontal = 0x07:为了完全的填充它的容器,系统会根据需要来增加选择对象的水平尺寸。

    center = 0x11:把选择的对象放到它的容器的垂直和水平中心,不改变它的尺寸。

    fill = 0x77:为了完全的填充它的容器,系统会根据需要来增加选择对象的水平和垂直尺寸。

    clip_vertical = 0x80:附加的可选设置,它可以设置容器内子对象的上下边缘裁剪它的容器边框。裁剪会基于垂直对齐的方式:顶部对齐的会裁剪底部边缘,底部对齐的会裁剪顶部边缘,不会上下边缘都裁剪。

    clip_horizontal = 0x08:附加的可选设置,它可以设置容器内子对象的左右边缘裁剪它的容器边框。裁剪会基于水平对齐的方式:左对齐的会裁剪右边缘,右对齐的会裁剪左边缘,不会左右边缘都裁剪。

    start = 0x00800003:把对象放到它的容器的开始位置,不改变它的尺寸。

    end = 0x00800005:把对象放到它的容器的结束位置,不改变它的尺寸。

    对应的全局属性资源符号是gravity。

    注:Spinner对象是一个视窗对象容器,设置它的gravity属性时,只会改变容器内部子视窗对象的对齐方式,并不会改变子视窗内部内容的对齐方式。

    android:popupBackground

    对应方法:

    setPopupBackgroundResource(int)
    在spinner=”dropdown”时,使用这个属性来设置下拉列表的背景。

    可以使用”@[+][package:]type:name”格式来引用另外的资源,或者使用”?[package:][type:]name”格式来应 用主题属性,也可以使用”#rgb”、”#argb”、”#rrggbb”、”#aarrggbb”格式的颜色值。

    对应的全局属性资源符号是popupBackground

    参考:

    android Spinner控件详解

    展开全文
  • Spinner

    2016-07-14 01:56:45
    Spinner

    Spinner

    展开全文
  • SPinner

    2019-10-04 20:15:39
    public class MainActivity extends Activity { private static final String[] bloodType = {"O型","A型","B型","AB型","其他",}; private TextView ... private Spinner spinner; private ArrayAdapter ada...

    public class MainActivity extends Activity {

    private static final String[] bloodType = {"O型","A型","B型","AB型","其他",};
    private TextView textView;
    private Spinner spinner;
    private ArrayAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textView = (TextView) findViewById(R.id.text);
    spinner = (Spinner) findViewById(R.id.spinner);
    //將可選內容和ArrayAdapter連接
    adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item,bloodType);
    //將adapter添加到spinner中
    spinner.setAdapter(adapter);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setOnItemSelectedListener(new OnItemSelectedListener(){

    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1,
    int arg2, long arg3) {
    textView.setText("您的血型是"+bloodType[arg2]);
    arg0.setVisibility(View.VISIBLE);
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
    //沒有選中
    }

    });
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
    }

     

    XML文件:

     

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
    android:id="@+id/text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />

    <Spinner
    android:id="@+id/spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"/>
    </LinearLayout>


    }

    转载于:https://www.cnblogs.com/Smart-Du/p/4302009.html

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,048
精华内容 4,819
关键字:

spinner