Android微调器显示文本问题

时间:2018-07-06 16:15:58

标签: java android android-spinner

您好,我在活动中无法正确显示文字大小的问题,下拉菜单本身很大(底部图片),这是我想要的方式,但是当下拉菜单未打开时它的文字很小(顶部图片) )。这是微调器从中获取的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);

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:1)

在适配器中使用相同的布局文件。

BufferedLineIterator

仅当您的ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.simple_spinner_dropdown_item, machines); 上的TextView ID为text1时,此方法才有效

simple_spinner_dropdown_item.xml

答案 1 :(得分:1)

为此,让我们更详细地了解适配器的概念,该适配器将微调器的布局文件绑定到该微调器,并且将数据绑定到微调器中时会使用两个布局文件。一种是布局资源,您在ArrayAdapter初始化期间即

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, machines);

这是微调器处于未扩展状态时的布局资源,即显示了微调器项目。另一个是下拉资源,它是微调器的下拉项的布局,即,微调器中的每个项目在展开时的外观,其设置如下:

adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);

现在的问题是,您正在传递自定义dropdown resource,因此您将获得所需的下拉菜单,但是您正在传递视图的标准布局文件,即android.R.layout.simple_spinner_dropdown_item。因此,要解决此问题,您也可以为普通视图传递相同的下拉资源(如果您愿意),否则您可以创建具有所需属性的另一个布局,并按照以下代码进行传递: / p>

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);

最终处于未展开状态的微调器项目看起来像

Custom spinner item

答案 2 :(得分:0)

扩展 dr3k 的答案,我在源代码中发现了这一点:

http://androidxref.com/7.1.1_r6/xref/frameworks/base/core/res/res/values/attrs.xml

=SUMPRODUCT(($B$3:$B$15=B18)*($D$3:$D$15)*(SUMIFS(G:G,F:F,$C$3:$C$15)))