【问题标题】:How to create a drop-down list in Android Studio?如何在 Android Studio 中创建下拉列表?
【发布时间】:2021-03-08 17:15:11
【问题描述】:

我正在尝试为 Android Studio 中的活动创建下拉列表。我尝试过使用 Spinner。

这是我的 xml 代码:

<Spinner
    android:id="@+id/spinner1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:drawable/btn_dropdown"
    android:spinnerMode="dropdown"/>

这是我的 Java 代码:

Spinner dropdown = findViewById(R.id.spinner1);
String[] items = new String[]{"1", "2", "3"};
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_dropdown_item, items);
dropdown.setAdapter(adapter);

这是它的截图:

如您所见,下拉列表显示为弹出窗口,但是,我希望下拉列表以不同的方式显示。请参阅下图作为我想要的示例:

有人对我如何做到这一点有任何想法吗?

【问题讨论】:

  • android 中没有内置任何东西可以做到这一点,它必须是自定义实现
  • 感谢您的回复。您对我如何实现这一点有任何想法吗?

标签: android android-layout drop-down-menu android-spinner


【解决方案1】:

实际上,Material 设计库似乎有一种方法,称为ExposedDropdownMenu

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/menu"
    style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox.ExposedDropdownMenu"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/label">

    <AutoCompleteTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="none"
    />

</com.google.android.material.textfield.TextInputLayout>

显然这是使用 TextInput 而不是微调器,因此如果您不想这样做,仍然会有一些自定义逻辑来防止输入

我个人没有尝试过,但它看起来像你想要的

【讨论】:

    【解决方案2】:

    一些想法:

    正如@tyczj 所说,这是显示的android默认布局,所以有一些替代方案:

    1. 创建自己的游览custom layout

    2. 使用像SearchableSpinner这样的外部库,它包含搜索功能,并且项目布局与您想要的相似。

    【讨论】:

      【解决方案3】:

      我在这里找到了一个有用的 Android 上的 ComboBox/Spinner 示例:

      https://abhiandroid.com/ui/spinner

      代码如下:

      https://github.com/abhisheksaini4/SpinnerExamples/blob/master/SpinnerExamples.7z

      主要代码包括MainActivity.java:

      package example.abhiandriod.spinnerexample;
      
      import android.support.v7.app.AppCompatActivity;
      import android.os.Bundle;
      import android.view.Menu;
      import android.view.MenuItem;
      import android.view.View;
      import android.widget.AdapterView;
      import android.widget.ArrayAdapter;
      import android.widget.Spinner;
      import android.widget.Toast;
      
      public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener{
      
          String[] bankNames={"BOI","SBI","HDFC","PNB","OBC"};
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              //Getting the instance of Spinner and applying OnItemSelectedListener on it
              Spinner spin = (Spinner) findViewById(R.id.simpleSpinner);
              spin.setOnItemSelectedListener(this);
      
              //Creating the ArrayAdapter instance having the bank name list
              ArrayAdapter aa = new ArrayAdapter(this,android.R.layout.simple_spinner_item,bankNames);
              aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
              //Setting the ArrayAdapter data on the Spinner
              spin.setAdapter(aa);
          }
      
      
          //Performing action onItemSelected and onNothing selected
          @Override
          public void onItemSelected(AdapterView<?> arg0, View arg1, int position,long id) {
              Toast.makeText(getApplicationContext(), bankNames[position], Toast.LENGTH_LONG).show();
          }
      
          @Override
          public void onNothingSelected(AdapterView<?> arg0) {
              // TODO Auto-generated method stub
          }
      
          @Override
          public boolean onCreateOptionsMenu(Menu menu) {
              // Inflate the menu; this adds items to the action bar if it is present.
              getMenuInflater().inflate(R.menu.menu_main, menu);
              return true;
          }
      
          @Override
          public boolean onOptionsItemSelected(MenuItem item) {
              // Handle action bar item clicks here. The action bar will
              // automatically handle clicks on the Home/Up button, so long
              // as you specify a parent activity in AndroidManifest.xml.
              int id = item.getItemId();
      
              //noinspection SimplifiableIfStatement
              if (id == R.id.action_settings) {
                  return true;
              }
      
              return super.onOptionsItemSelected(item);
          }
      }
      

      activity_main.xml:

      <RelativeLayout 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">
      
          <Spinner
              android:id="@+id/simpleSpinner"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_centerHorizontal="true"
              android:layout_marginTop="100dp" />
      
      </RelativeLayout>
      

      menu_main.xml:

      <menu xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
          <item android:id="@+id/action_settings" android:title="@string/action_settings"
              android:orderInCategory="100" app:showAsAction="never" />
      </menu>
      

      还有AndroidManifest.xml:

      <?xml version="1.0" encoding="utf-8"?>
      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="example.abhiandriod.spinnerexample" >
      
          <application
              android:allowBackup="true"
              android:icon="@mipmap/ic_launcher"
              android:label="@string/app_name"
              android:theme="@style/AppTheme" >
              <activity
                  android:name=".MainActivity"
                  android:label="@string/app_name" >
                  <intent-filter>
                      <action android:name="android.intent.action.MAIN" />
      
                      <category android:name="android.intent.category.LAUNCHER" />
                  </intent-filter>
              </activity>
          </application>
      
      </manifest>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-02
        • 2015-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多