安卓工作室微调器的外观问题



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

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

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

<?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>

主信息活动文件

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

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

我能找到的唯一有意义的区别在以下几行中:

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中那样使用它吗?

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


更新

我想添加更多关于我建议上述更改的原因的信息。

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

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

默认情况下,下拉视图会根据 {@link 上下文} 传递给适配器的构造函数。更多。。。。。。。

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

我打算要求更多的代码,但后来我在另一个对您有用的问题中找到了类似的解决方案: 微调器主题是黑暗的

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

最新更新