【问题标题】:Spinner does now show selected value in some screens- how should I design it?Spinner 现在确实在某些屏幕中显示选定的值 - 我应该如何设计它?
【发布时间】:2018-05-11 12:41:46
【问题描述】:

我正在开发一个 android 应用程序 - 我正在使用带有 textView 和微调器的 Horizo​​ntal LinearLayout。

在某些屏幕分辨率下,一切正常,但在其他一些屏幕上,它不显示我在微调器中选择的内容。

这是我设计的方式:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:weightSum="21"
        android:orientation="horizontal">

        <Spinner
            android:id="@+id/nightEndHoursSpinner"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="5dp"
            android:layout_weight="4"
            />

        <TextView
            android:id="@+id/nightEndSep"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.5"
            android:text=":"
            android:textSize="30sp" />

        <Spinner
            android:id="@+id/nightEndMinutesSpinner"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="4"
            />

        <TextView
            android:id="@+id/nightEndTextView"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:text="@string/to"
            android:textDirection="anyRtl"
            android:gravity="end"
            android:layout_marginEnd="5dp"
            android:layout_weight="2"
            />

        <Spinner
            android:id="@+id/nightStartHoursSpinner"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="5dp"
            android:textDirection="anyRtl"
            android:gravity="end"
            android:textAlignment="gravity"
            android:layout_weight="4"
            />

        <TextView
            android:id="@+id/nightStartSep"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.5"
            android:text=":"
            android:textSize="30sp" />

        <Spinner
            android:id="@+id/nightStartMinutesSpinner"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="4"
            />

        <TextView
            android:id="@+id/nightFromTextView"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:layout_marginEnd="5dp"
            android:text="@string/from"
            android:textDirection="anyRtl"
            android:gravity="end"
            android:textAlignment="gravity"
            android:layout_weight="2"
            />

    </LinearLayout>

图片显示问题: no text in spinners

Java 代码: 初始化微调器:

 private void initializeSpinners() {
    ArrayList<String> hoursList = range(0, 23);
    ArrayAdapter<String> hoursAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, hoursList);
    hoursAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    morningStartHoursSpinner.setAdapter(hoursAdapter);
    nightStartHoursSpinner.setAdapter(hoursAdapter);
    morningEndHoursSpinner.setAdapter(hoursAdapter);
    nightEndHoursSpinner.setAdapter(hoursAdapter);

    ArrayList<String> minutesList = range(0, 59);
    ArrayAdapter<String> minutesAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, minutesList);
    minutesAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    morningStartMinutesSpinner.setAdapter(minutesAdapter);
    nightStartMinutesSpinner.setAdapter(minutesAdapter);
    morningEndMinutesSpinner.setAdapter(minutesAdapter);
    nightEndMinutesSpinner.setAdapter(minutesAdapter);

    updateSpinners(hoursList, minutesList);
}

private void updateSpinners(ArrayList<String> hoursList, ArrayList<String> minutesList) {
    String startMorningTime = DatabaseMgr.getPreferences(getString(R.string.saved_morning_start_time), this);
    updateSpinner(morningStartHoursSpinner, morningStartMinutesSpinner, startMorningTime, hoursList, minutesList, 9);
    String endMorningTime = DatabaseMgr.getPreferences(getString(R.string.saved_morning_end_time), this);
    updateSpinner(morningEndHoursSpinner, morningEndMinutesSpinner, endMorningTime, hoursList, minutesList, 11);

    String startNightTime = DatabaseMgr.getPreferences(getString(R.string.saved_night_start_time), this);
    updateSpinner(nightStartHoursSpinner, nightStartMinutesSpinner, startNightTime, hoursList, minutesList, 19);
    String endNightTime = DatabaseMgr.getPreferences(getString(R.string.saved_night_end_time), this);
    updateSpinner(nightEndHoursSpinner, nightEndMinutesSpinner, endNightTime, hoursList, minutesList, 21);
}

private void updateSpinner(Spinner hoursSpinner, Spinner minsSpinner, String time, ArrayList<String> hoursList, ArrayList<String> minutesList, int defaultHoursIdx) {
    if (time == null || time.equals("")) {
        hoursSpinner.setSelection(defaultHoursIdx);
        return;
    }
    String hours = time.split(":")[0];
    int hoursIdx = hoursList.indexOf(hours);
    String mins = time.split(":")[1];
    int minsIdx = minutesList.indexOf(mins);

    hoursSpinner.setSelection(hoursIdx);
    minsSpinner.setSelection(minsIdx);
}

simple_spinner_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1"
    style="?android:attr/spinnerItemStyle"
    android:singleLine="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:textAlignment="inherit"/>

spinnerAdapater 是一个 ArrayList

我没有覆盖 java 中的任何微调器属性。

我的代码有什么问题? 我应该如何设计它?使其适用于所有屏幕分辨率

非常感谢!!

【问题讨论】:

  • 分享你的java类。
  • 您需要包括您的活动,可能还包括所涉及的适配器。
  • @HemantParmar 添加了
  • @Juan 我添加了初始化微调器的 java 代码
  • 另外请添加 updateSpinner(hoursList, minutesList);

标签: android android-layout android-linearlayout android-designer


【解决方案1】:

我已经在 string.xml 中设置了 spinner 的值。查看以下代码。

spinnerType = (Spinner) findViewById(R.id.spinnerType);
    leaveAdapter = ArrayAdapter.createFromResource(this, R.array.leave_arrays, android.R.layout.simple_selectable_list_item);
    leaveAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinnerType.setAdapter(leaveAdapter);
    spinnerType.setPrompt("-Choose-");
    spinnerType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            TextView tv = (TextView) spinnerType.getChildAt(position);
            if (position == 0) {

                if (tv != null) {
                    tv.setText("Select Leave Type");
                    tv.setTextColor(Color.GRAY);
                }

            }
        }
        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }});

【讨论】:

  • 谢谢,主要是设计问题,它在某些屏幕分辨率下完美运行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多