Android 微调器显示文本问题
Android Spinner Display Text Issue
您好,我有一个问题,我的 activity 上的文本大小无法正确显示,下拉菜单本身很大(下图),这正是我想要的,但是当下拉菜单未打开时有小文字(上图)。这是微调器从
中提取的 xml 布局
simple_spinner_dropdown_item.xml
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="50sp"
android:gravity="left"
android:textColor="#000000"
android:padding="5dip"
android:textStyle="bold"/>
这里是 xml 显示微调器的菜单
main_menu.xml
<Spinner
android:id="@+id/spinnerMainMenu"
android:layout_width="784dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.072"
tools:layout_editor_absoluteX="8dp" />
最后是显示代码
MainMenu.java
final Spinner mainMenuDrpDwn = findViewById(R.id.spinnerMainMenu);
String[] machines = new String[]{"215 DT", "420 DT", "215 CANNAGIN"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, machines);
adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);
mainMenuDrpDwn.setAdapter(adapter);
在您的适配器中使用相同的布局文件。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.simple_spinner_dropdown_item, machines);
仅当您的 TextView
ID 为 text1
时才会有效 simple_spinner_dropdown_item.xml
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="50sp"
android:gravity="left"
android:textColor="#000000"
android:padding="5dip"
android:textStyle="bold"/>
扩展 dr3k 的回答,我在源代码中找到了这个:
http://androidxref.com/7.1.1_r6/xref/frameworks/base/core/res/res/values/attrs.xml
4742 <declare-styleable name="Spinner">
...
4763 <!-- Reference to a layout to use for displaying a prompt in the dropdown for
4764 spinnerMode="dropdown". This layout must contain a TextView with the id
4765 {@code @android:id/text1} to be populated with the prompt text. -->
4766 <attr name="popupPromptView" format="reference" />
...
4772 </declare-styleable>
为此,让我们更详细地了解适配器的概念,将微调器的布局文件和数据绑定到微调器的适配器采用两个布局文件。一个是 layout 资源,它是您在 ArrayAdapter
初始化期间传入的,即
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, machines);
这是微调器处于未展开状态时的布局资源,即显示微调器项目。另一个是 dropdown 资源,它是微调器下拉项目的布局,即微调器中的每个项目在展开时的外观,设置如下:
adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);
现在的问题是您传递的是自定义 dropdown resource
,因此您可以让下拉菜单看起来如您所愿,但您传递的是视图的标准布局文件,即 android.R.layout.simple_spinner_dropdown_item
。因此,如果你想解决这个问题,你也可以为普通视图传递相同的下拉资源(如果你愿意的话),否则你可以创建另一个具有所需属性的布局并传递它,如下面的代码所示:
custom_drop_down_spinner_item
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text1"
style="?android:attr/spinnerDropDownItemStyle"
android:singleLine="false"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:ellipsize="marquee"
android:textSize="25sp"
android:background="@android:color/white"
android:textColor="@color/colorAccent"
android:fontFamily="sans-serif-smallcaps"/>
custom_spinner_item
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text2"
style="?android:attr/spinnerItemStyle"
android:background="@android:color/holo_blue_light"
android:singleLine="false"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:textAlignment="inherit"
android:gravity="center"
android:textSize="50sp"
android:textColor="@color/colorPrimary"/>
将其设置为微调器:
ArrayAdapter<CharSequence> arrayAdapter = ArrayAdapter.createFromResource(this,
R.array.educational_qualification_orig_array, R.layout.custom_spinner_item);
arrayAdapter.setDropDownViewResource(R.layout.custom_drop_down_spinner_item);
spinner.setAdapter(arrayAdapter);
未展开状态下生成的微调项看起来像
您好,我有一个问题,我的 activity 上的文本大小无法正确显示,下拉菜单本身很大(下图),这正是我想要的,但是当下拉菜单未打开时有小文字(上图)。这是微调器从
中提取的 xml 布局simple_spinner_dropdown_item.xml
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="50sp"
android:gravity="left"
android:textColor="#000000"
android:padding="5dip"
android:textStyle="bold"/>
这里是 xml 显示微调器的菜单
main_menu.xml
<Spinner
android:id="@+id/spinnerMainMenu"
android:layout_width="784dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.072"
tools:layout_editor_absoluteX="8dp" />
最后是显示代码
MainMenu.java
final Spinner mainMenuDrpDwn = findViewById(R.id.spinnerMainMenu);
String[] machines = new String[]{"215 DT", "420 DT", "215 CANNAGIN"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, machines);
adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);
mainMenuDrpDwn.setAdapter(adapter);
在您的适配器中使用相同的布局文件。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.simple_spinner_dropdown_item, machines);
仅当您的 TextView
ID 为 text1
时才会有效 simple_spinner_dropdown_item.xml
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="50sp"
android:gravity="left"
android:textColor="#000000"
android:padding="5dip"
android:textStyle="bold"/>
扩展 dr3k 的回答,我在源代码中找到了这个:
http://androidxref.com/7.1.1_r6/xref/frameworks/base/core/res/res/values/attrs.xml
4742 <declare-styleable name="Spinner">
...
4763 <!-- Reference to a layout to use for displaying a prompt in the dropdown for
4764 spinnerMode="dropdown". This layout must contain a TextView with the id
4765 {@code @android:id/text1} to be populated with the prompt text. -->
4766 <attr name="popupPromptView" format="reference" />
...
4772 </declare-styleable>
为此,让我们更详细地了解适配器的概念,将微调器的布局文件和数据绑定到微调器的适配器采用两个布局文件。一个是 layout 资源,它是您在 ArrayAdapter
初始化期间传入的,即
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, machines);
这是微调器处于未展开状态时的布局资源,即显示微调器项目。另一个是 dropdown 资源,它是微调器下拉项目的布局,即微调器中的每个项目在展开时的外观,设置如下:
adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);
现在的问题是您传递的是自定义 dropdown resource
,因此您可以让下拉菜单看起来如您所愿,但您传递的是视图的标准布局文件,即 android.R.layout.simple_spinner_dropdown_item
。因此,如果你想解决这个问题,你也可以为普通视图传递相同的下拉资源(如果你愿意的话),否则你可以创建另一个具有所需属性的布局并传递它,如下面的代码所示:
custom_drop_down_spinner_item
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text1"
style="?android:attr/spinnerDropDownItemStyle"
android:singleLine="false"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:ellipsize="marquee"
android:textSize="25sp"
android:background="@android:color/white"
android:textColor="@color/colorAccent"
android:fontFamily="sans-serif-smallcaps"/>
custom_spinner_item
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text2"
style="?android:attr/spinnerItemStyle"
android:background="@android:color/holo_blue_light"
android:singleLine="false"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:textAlignment="inherit"
android:gravity="center"
android:textSize="50sp"
android:textColor="@color/colorPrimary"/>
将其设置为微调器:
ArrayAdapter<CharSequence> arrayAdapter = ArrayAdapter.createFromResource(this,
R.array.educational_qualification_orig_array, R.layout.custom_spinner_item);
arrayAdapter.setDropDownViewResource(R.layout.custom_drop_down_spinner_item);
spinner.setAdapter(arrayAdapter);
未展开状态下生成的微调项看起来像