标签: android-spinner

自定义微调器,带圆角,描边和选择器图标

我希望我Spinner的左边有白色文字的黑色渐变背景和右边的选择器图标(白色向下指向的三角形).我认为有两种方法可以解决这个问题:

  1. 如果我将背景设置为xml可绘制资源,我可以让我Spinner看起来很完美,但是我需要以某种方式在右边添加白色三角形,我不知道如何去做:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <gradient
                android:startColor="#343434"
                android:endColor="#171717"
                android:angle="270" />
            <stroke
                android:width="1dp"
                android:color="#ffffff" />
            <corners
                android:radius="4dp" />
            <padding
                android:left="3dp"
                android:top="3dp"
                android:right="3dp"
                android:bottom="3dp" />
        </shape>
    </item>
    </selector>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我创建了一个包含三角形的9补丁图像,然后使用xml来圆角并为图像添加笔划.我已经去了,但无法使它工作:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@drawable/spinnerblack" >
            <stroke
                android:width="1dp"
                android:color="#ffffff" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="3dp"
                android:top="3dp"
                android:right="3dp"
                android:bottom="3dp" />
        </item>
    </selector>
    
    Run Code Online (Sandbox Code Playgroud)

有人可以告诉我我可以为方法1做什么或者我在方法2中做错了什么?我不想在我的9补丁图像中添加笔划和圆角,因为我认为它看起来不那么好.此外,我更喜欢方法1到方法2.任何帮助非常感谢.

android android-xml android-spinner

9
推荐指数
1
解决办法
2万
查看次数

示例:如何以编程方式从MonoDroid/C中的数组填充Android Spinner

本周我开始在MonoDroid上摆弄.并不是说我不喜欢Java,但是我把大部分时间花在了Visual Studio/C#或Delphi上,而且我宁愿拉出我的指甲,也不愿学习另外的IDE和YET另一个编辑器来使用Eclipse.

我将此代码改编为Java中的C#,因为在C#代码中而不是在AXML中以编程方式填充我的微调器更容易.也许你们中的一些人可能会发现它很有用

在您的Activity的axml中创建一个通用的Spinner:

<Spinner
    android:id="@+id/spinner"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:prompt="@string/spinner_prompt"
/>
Run Code Online (Sandbox Code Playgroud)

在适当的地方构建你的字符串数组:

public static readonly string[] refresh_ratesS = {"10 seconds","20 seconds","30 seconds","60 seconds","5 minutes"}; 
Run Code Online (Sandbox Code Playgroud)

我更喜欢在Activity的公共类中实例化对象,这样我只需要识别它们一次:

public class ActivityChooseRefreshRate :Activity {
    Spinner         jb_spinner;
Run Code Online (Sandbox Code Playgroud)

在Activity的OnCreate函数中,将数组赋给微调器:

     //identify the spinner
jb_spinner      =   FindViewById<Spinner>(Resource.Id.spinner);
     //create the handler for when the user selects something
jb_spinner.ItemSelected += new EventHandler<ItemEventArgs> (jb_spinner_ItemSelected);
    //assign your array to an ArrayAdapter
ArrayAdapter<string>  spinnerArrayAdapter   =   new ArrayAdapter<string>(this,Android.Resource.Layout.SimpleSpinnerItem,refresh_ratesS);
      //Use the ArrayAdapter you've set up to populate your spinner
spinnerArrayAdapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerItem);
jb_spinner.Adapter      =   spinnerArrayAdapter;
   //optionally pre-set jb_spinner …
Run Code Online (Sandbox Code Playgroud)

c# xamarin.android android-spinner

9
推荐指数
0
解决办法
7935
查看次数

具有空默认选定项目的微调器

我正在尝试使用默认的空选定项创建一个微调器,但它显示了微调器选项中的第一个项.如果我将空值添加到我的字符串(这是spinner中的选择源),则在打开微调器后显示空行.我该怎么办?这是我正在使用的代码:

  String[] ch = {"Session1", "Session2", "Session3"};
  Spinner sp = (Spinner)findViewById(R.id.spinner1);
  TextView sess_name = findViewById(R.id.sessname);
  ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,ch);
  sp.setAdapter(adapter);

  adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

  sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener({
      @Override
      public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
          int index = arg0.getSelectedItemPosition();
          sess_name.setText(ch[index]);

          Toast.makeText(getBaseContext(), "You have selected item : " + ch[index], Toast.LENGTH_SHORT).show();
      }
Run Code Online (Sandbox Code Playgroud)

java android android-spinner

9
推荐指数
3
解决办法
3万
查看次数

Android:更改Spinner下拉视图

我的应用程序我想要下面类型的Spinner Dropdown视图.在此输入图像描述 对于这种类型的微调视图.我写了这段代码.

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
            R.array.spinner, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner_obj.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)

我从http://developer.android.com/guide/topics/ui/controls/spinner.html得到了这个, 但我得到的是, 在此输入图像描述

请为我提供最好的方法....

android spinner android-layout android-spinner

9
推荐指数
3
解决办法
5万
查看次数

同时阅读3个选定项目

如何在同一时间阅读3个微调器选定的项目?我spinner1,2,3WorkDetails.java和他们的价值已经被插入SQLite.在我UpdatePage.java,我想要检索所选项目,所选项目应首先显示在微调器中project1,project2 and project3.

UpdatePage.java

public void RetrievePage(String name,String date, String id) {
    final String name2 = name;
    final String date2=date;
    final String id2 = id;
    final EditText name3 = (EditText) findViewById(R.id.editText9);
    final EditText date3 = (EditText) findViewById(R.id.editText12);
    name3.setText(name2);
    date3.setText(date2);

    database = dbHelper.getWritableDatabase();
    c = database.rawQuery(
        "SELECT i.Weather, i.Status,w.Subcontractors, w.NumberOfPerson,"+
        "w.NumberOfHours, wd.Project, wd.WorkDescription, wd.Per,"+
        "wd.TimeIn, wd.TimeOut FROM Information i LEFT JOIN WorkForce w "+
        "ON w.TInfo_id = i._id "+
        "LEFT JOIN …
Run Code Online (Sandbox Code Playgroud)

java sqlite android android-spinner

9
推荐指数
1
解决办法
376
查看次数

旋转器下拉从旋转器顶部开始

问题是Spinner下拉列表从Spinner的顶行开始,但它应该从底线开始Spinner

正常状态

在此输入图像描述

点击后

在此输入图像描述

Spinner xml代码

<Spinner
    android:id="@+id/spnSelectLanguage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="8dp"
    android:layout_marginTop="16dp"
    android:spinnerMode="dropdown"
    android:background="@drawable/spn_lang_dropdown_selector"
    android:gravity="center_vertical"
    android:popupBackground="#EAEAEA"
    android:textColor="#54a4db" />
Run Code Online (Sandbox Code Playgroud)

Spinner spnSelectLanguage = (Spinner)rootView.findViewById(R.id.spnSelectLanguage);
    ArrayAdapter<String> adapterLanguage= new ArrayAdapter<String> (context,R.layout.layout_lng_spinner_item,new String[]{"English","Arabic"});
    adapterLanguage.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spnSelectLanguage.setAdapter(adapterLanguage);
Run Code Online (Sandbox Code Playgroud)

Style.xml

<style name="SpinnerStyle" parent="android:style/Widget.ListView.DropDown">
    <item name="android:divider">@color/grey</item>
    <item name="android:dividerHeight">1dp</item>
</style>
Run Code Online (Sandbox Code Playgroud)

android spinner android-spinner

9
推荐指数
2
解决办法
8547
查看次数

Android Spinner下划线颜色

我可以使用旋转器添加下划线style="@style/Base.Widget.AppCompat.Spinner.Underlined".如何仅使用样式更改下划线的颜色?我不想使用任何可绘制的文件来改变它.

 <item name="colorControlHighlight">@color/colorAccent</item>
 <item name="colorControlNormal">@color/colorAccent</item>
Run Code Online (Sandbox Code Playgroud)

使用上面的样式,当用户点击它时,它只有下划线.它在正常状态下不会改变下划线的颜色.

android underline android-appcompat android-spinner

9
推荐指数
1
解决办法
1万
查看次数

具有多行项目的微调器与Froyo上的所选项目显示重叠

我正在尝试在所有版本的Android上创建与Froyo相同的Spinners.为此,我正在使用HoloEverywhere.一些微调项目文本是多行,我希望它包装.

使用默认布局,android.R.layout.simple_spinner_dropdown_item或者HoloEverywhere的直接替换,可以对文本进行椭圆化处理,而不是将其包裹起来.

将HoloEverywhere的布局作为自定义布局的起点,singleLine设置为false,ellipsize设置为none,并layout_height设置为wrap_content无效,文本仍然被切断.

可以将文本正确地包装在下拉列表TextViewLinearLayout,但是在Froyo设备上,这会弄乱所选项目的显示: 每次你不能得到制服回头看看froyo jake wharton流下了一滴眼泪.

此方法适用于较新的设备.所有设备上的下拉项目布局都很好.但是当我使用自定义下拉项目布局时,Froyo会将这个奇怪的文本重叠.每个选择都会堆积在最后一个选项之上.

这个问题: Spinner不会包装文本 - 这是一个Android错误吗?关于Spinners中的文本包装建议只有这样才能从头开始重新创建样式而不继承,但这听起来很疯狂并且容易出现问题.

my_simple_list_item_1.xml:

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="300dp"
  android:layout_height="wrap_content" >   

  <TextView
    android:id="@+id/android:text1"
    android:layout_width="wrap_content"
    android:layout_height="50dp"
    android:ellipsize="marquee"
    android:layout_gravity="center_vertical"
    android:singleLine="false"/>
</LinearLayout> 
Run Code Online (Sandbox Code Playgroud)

Java的:

    import org.holoeverywhere.widget.Spinner;

    spinner1.setAdapter(ArrayAdapter.createFromResource(this,
            R.array.array_of_strings, R.layout.my_simple_list_item_1));
Run Code Online (Sandbox Code Playgroud)

android styles android-layout android-spinner android-holo-everywhere

8
推荐指数
1
解决办法
1万
查看次数

屏幕旋转后多次调用Android微调器onItemSelected

我有三个微调器的布局.它们在下拉列表中显示的选项不同.
在我的onCreateView我不得不安装微调的方法.在这个方法里面我有这样的东西:

  mySpinner = (Spinner) view.findViewById(R.id.my_spinner);
  ArrayAdapter<String> mySpinner =
            new ArrayAdapter<String>(getActivity(), R.layout.background,
                    new ArrayList<String>(Arrays.asList(getResources().getStringArray(R.array.spinner_one_data))));
  mySpinner.setDropDownViewResource(R.layout.spinner_text);
  mySpinner.setAdapter(mySpinner);
  mySpinner.setOnItemSelectedListener(this);
Run Code Online (Sandbox Code Playgroud)

正如我所说,我的另外两个旋转器几乎相同,但有不同的选择.

我知道onItemSelected在"第一次设置"中为每个微调器调用一次,所以我有一个标志来防止这个问题.有了这个标志解决方案,我的微调器正在按预期工作.

问题是当我在每个微调器中选择一个选项然后旋转屏幕.现在,onItemSelected被称为6次而不是我期待的3次(我设置了一个标志来管理3次呼叫的这种情况).

它为什么会发生,我应该怎么处理?

android android-spinner

8
推荐指数
2
解决办法
5594
查看次数

浓咖啡动态微调试验

我正在尝试测试动态生成的Spinner.我能够点击微调器然后我需要从列表中选择一个显示给定文本的选项(我从hierarchyviewer中发现PopupWindow显示但是无法获得所需的文本,这是在屏幕外) .微调器使用自定义对象的ArrayAdapter(下面的代码),

public class MainActivity extends AppCompatActivity {

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

        Spinner mySpinner = (Spinner) findViewById(R.id.my_spinner);
        List<MyValue> list = Arrays.asList(
                new MyValue("One", "1"),
                new MyValue("Two", "2"),
                new MyValue("Three", "3"),
                new MyValue("Four", "4"),
                new MyValue("Five", "5"),
                new MyValue("Six", "6"),
                new MyValue("Seven", "7"),
                new MyValue("Eight", "8"),
                new MyValue("Nine", "9"),
                new MyValue("Ten", "10"),
                new MyValue("Eleven", "11"),
                new MyValue("Twelve", "12"),
                new MyValue("Thirteen", "13"),
                new MyValue("Fourteen", "14"),
                new MyValue("Fifteen", "15"),
                new MyValue("Sixteen", "16"),
                new MyValue("Seventeen", "17"),
                new MyValue("Eighteen", …
Run Code Online (Sandbox Code Playgroud)

android automated-tests ui-testing android-spinner android-espresso

8
推荐指数
1
解决办法
1554
查看次数