【问题标题】:How can i make a spinner prompt multiline?如何制作微调器提示多行?
【发布时间】:2018-05-23 14:25:52
【问题描述】:

我有一个微调器,它允许我不显示列表中的第一项,但我可以设置我的自定义提示。但是,只要提示文本跨越多行,它就会在视图边界处被截断。如何使微调器提示扩展以容纳更多文本?

我尝试将传递给适配器的视图修改为多行,并在末尾设置为椭圆,但没有任何效果。

为了清晰起见图片: 一行文字,

有几行,

这是我的代码:

  languagesSpinner.setAdapter(new ArrayAdapter<>(EditProfileNationalityActivity.this, R.layout.no_default_spinner_item, new String[] {""}));

if(data.length>0) {
  String countries = spokenLanguages.toString().substring(0, spokenLanguages.toString().length() - 2);
        languagesSpinner.setPrompt(countries);
} else {

        Log.e("setting prompt to default");
        languagesSpinner.setPrompt("Please select languages");
}

这是xml文件:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:layout_gravity="center_vertical"
android:textColor="@android:color/black"
android:textSize="18sp"
android:ellipsize="end"
android:lines="2"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="1dp"
android:paddingRight="1dp"
android:background="?android:attr/activatedBackgroundIndicator" />

每个请求,spinner的xml定义如下:

  <com.package.views.NoDefaultSpinner
            android:id="@+id/registration_stage_4_country_languages"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:clickable="false" />

NoDefaultSpinner.java 可以在这里找到:https://github.com/geftimov/android-components/blob/master/components/src/main/java/com/eftimoff/components/views/spinners/nodefault/NoDefaultSpinner.java

我已将其修改为在 SpinnerProxy 中有一个自定义 getView() 方法,如下所示:

 if (position < 0) {
            if (layoutResource == -1) {
                layoutResource = R.layout.no_default_spinner_item;
            }
            final TextView v =
                    (TextView) ((LayoutInflater) getContext().getSystemService(
                            Context.LAYOUT_INFLATER_SERVICE)).inflate(
                            layoutResource, parent, false);
            v.setText(getPrompt());
            v.setPadding(0, 5, 0, 5);

            return v;
        }
        return obj.getView(position, convertView, parent);
    }

【问题讨论】:

    标签: android spinner prompt multiline


    【解决方案1】:

    我编辑了你的源代码:

    adapter = new ArrayAdapter<>(EditProfileNationalityActivity.this, R.layout.no_default_spinner_item, new String[] {""});
    adapter.setDropDownViewResource(R.layout.no_default_spinner_item);
    languagesSpinner.setAdapter(adapter);
    

    【讨论】:

    • 嗨@jantursky 那条额外的线什么都不做,因为我覆盖了微调器上的触摸然后显示其他东西(不要问,UX 噩梦哈哈)所以我需要提示来显示多行文本,比如在图片中,我刚刚更新了问题。
    • 好的,我知道了。因此,请在您定义微调器的位置发布 xml,并检查它是否具有高度属性的 wrap_content。
    • 用更多信息更新了问题,微调器本身确实设置为 wrap_content
    • 嗯,它仍然取决于根布局,甚至取决于您拥有布局的整个布局的整个 xml 结构。例如,我怀疑那个 marginTop 属性。
    • 但是 marginTop 是相对于父布局而言的,与微调器内部的值无关,因为正如您在图像中看到的那样,当只有一行文本时它可以正常工作。如果边距是问题,它也会在一行文本中显示不正确,你不觉得吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多