在Android工作室的微调器中出现问题

时间:2018-04-19 20:36:25

标签: android spinner android-spinner android-theme appearance

我在同一活动中放了两个微调器,一个用于城市,另一个用于城镇。当用户选择城市时,城镇微调器应根据所选城市填充项目。

我的问题是,背景和文本的颜色总是与第一个不同,但它们具有相同的样式和属性。我找不到任何合理的解决方案,我在网上找不到任何建议。

您对原因或解决方案有任何了解吗?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <Button
            android:id="@+id/button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dp"
            android:layout_marginTop="20dp"
            android:onClick="pickDate"
            android:text="Select date" />

        <TextView
            android:id="@+id/viewDate"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Distribution date"
            android:textAlignment="center" />

        <TextView
            android:id="@+id/textView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dp"
            android:text="The governorate"
            android:textAlignment="center" />

        <Spinner
            android:id="@+id/static_spinner"
            style="@style/Widget.AppCompat.Light.Spinner.DropDown.ActionBar"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="20dp" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="The district"
            android:textAlignment="center" />

        <Spinner
            android:id="@+id/district_spinner"
            style="@style/Widget.AppCompat.Light.Spinner.DropDown.ActionBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/textView15"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAlignment="center"
            android:text="Place ID" />

        <EditText
            android:id="@+id/plcID"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="" />

        <Button
            android:id="@+id/button5"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="150dp"
            android:onClick="next"
            android:text="Next" />

    </LinearLayout>
</LinearLayout>

MainInfoActivity文件

public class MainInfoActivity extends Activity {
    TextView textView, plcID;
    Spinner staticSpinner;
    Spinner dynamicSpinner;
    Spinner districtSpinner;
    CharSequence[] arrayDistrict;
    ArrayAdapter<CharSequence> districtAdapter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_info_activity);

        textView = (TextView) findViewById(R.id.viewDate);
        plcID = (TextView) findViewById(R.id.plcID);

        //Drop down lists

        staticSpinner = (Spinner) findViewById(R.id.static_spinner);

        // Create an ArrayAdapter using the string array and a default spinner
        final ArrayAdapter<CharSequence> staticAdapter = ArrayAdapter.createFromResource(
                this, R.array.governorate_array, android.R.layout.simple_spinner_item);

        // Specify the layout to use when the list of choices appears
        staticAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        // Apply the adapter to the spinner
        staticSpinner.setAdapter(staticAdapter);

        districtSpinner = (Spinner) findViewById(R.id.district_spinner) ;

        districtAdapter = ArrayAdapter.createFromResource(getApplicationContext(),
                R.array.Anbar, android.R.layout.simple_spinner_item);

        districtAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        staticSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view1, int i, long l) {

                districtAdapter = ArrayAdapter.createFromResource(getApplicationContext(),
                        R.array.Anbar, android.R.layout.simple_spinner_item);

                districtAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

                // Apply the adapter to the spinner
                districtSpinner.setAdapter(districtAdapter);
            }

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

2 个答案:

答案 0 :(得分:0)

我打算要求更多代码,但后来我在另一个对您有用的问题中找到了类似的解决方案: Spinner Theme is Dark

基本上是为上部微调器和底部微调器创建自己的主题。检查这是否接近或与您的问题相关。如果不上传添加了微调器的活动,则重新创建情况。

答案 1 :(得分:0)

我重新创建了你的代码,它对我来说很好。

我能找到的唯一区别在于以下几行:

ArrayAdapter<CharSequence> staticAdapter = ArrayAdapter
            .createFromResource(this, R.array.governorate_array,
                    android.R.layout.simple_spinner_item);

districtAdapter = ArrayAdapter
            .createFromResource(getApplicationContext(),
                    R.array.Anbar,
                    android.R.layout.simple_spinner_item);

而不是使用 getApplicationContext(),您可以像在staticAdapter中一样尝试使用 this 吗?

我曾经遇到类似的情况,我的应用程序的主题与我的活动不同,而且小部件看起来也略有不同。

<强>更新

我想补充一些关于我之所以建议上述更改的原因。

  

使用正确的上下文与另一个行为相关联。虽然框架不会抱怨并且将从使用应用程序上下文创建的LayoutInflater返回完美的视图层次结构,但是在此过程中将不会考虑应用程序中的主题和样式。这是因为Activity是实际附加清单中定义的主题的唯一上下文。任何其他实例都将使用系统默认主题来扩展您的视图,从而导致您可能没有预料到的显示输出。

通过此链接引用https://possiblemobile.com/2013/06/context/

  

默认情况下,下拉视图会根据主题夸大        {@link Context}传递给适配器的构造函数。更.......

ArrayAdapter源代码: https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/widget/ArrayAdapter.java#461