以前,我有DialogFragment
,我没有明确指定其UI组件(Spinner,EditText)颜色。
<?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:paddingTop="10dp"
android:paddingBottom="10dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:orientation="vertical" >
<Spinner
android:id="@+id/country_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="200dp"
android:layout_marginBottom="10dp" />
<EditText
android:id="@+id/name_edit_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textNoSuggestions|textCapWords"
android:maxLength="50"
android:ems="10" >
<requestFocus />
</EditText>
</LinearLayout>
我正在使用
看起来如下
迁移到
后看起来如下
我想知道,我在迁移过程中做错了什么?是否真的需要明确地将DialogFragment
UI组件(Spinner,EditText)颜色的特定颜色?
有没有办法,让DialogFragment
看起来很好,没有手动为Spinner,EditText指定颜色......就像我们做的那样(我们让系统决定Spinner的最佳颜色, EditText,...)当我们使用SherlockActionBar时?
注意,我没有Activity
或DialogFragment
中的特定主题。我只在Application
中使用了特定主题,并且我希望我的Activity
或DialogFragment
将继承Application
。
<application
android:theme="@style/..." >
DialogFragment
的代码是
public class MyDialogFragment extends android.support.v4.app.DialogFragment {
public static MyDialogFragment newInstance() {
return new MyDialogFragment();
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Get the layout inflater
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.dialog_fragment_layout, null);
final Spinner countrySpinner = (Spinner)view.findViewById(R.id.country_spinner);
final EditText nameEditText = (EditText)view.findViewById(R.id.name_edit_text);
final CountryArrayAdapter countryArrayAdapter = new CountryArrayAdapter(this.getActivity());
countrySpinner.setAdapter(countryArrayAdapter);
nameEditText.setHint(R.string.new_watchlist_hint);
nameEditText.setText(org.yccheok.jstock.watchlist.Utils.getDefaultWatchlistName());
Utils.placeCursorAtEndOfText(nameEditText);
final AlertDialog dialog = new AlertDialog.Builder(this.getActivity())
.setTitle(R.string.new_watchlist_title)
.setView(view)
// Add action buttons
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
}
})
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
})
.create();
dialog.setCanceledOnTouchOutside(true);
// http://stackoverflow.com/questions/2620444/how-to-prevent-a-dialog-from-closing-when-a-button-is-clicked
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialogInterface) {
Button b = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
...
}
});
}
});
return dialog;
}
private void showMyDialogFragment() {
FragmentManager fm = this.getActivity().getSupportFragmentManager();
MyDialogFragment myDialogFragment = MyDialogFragment.newInstance();
myDialogFragment.setTargetFragment(this, 0);
myDialogFragment.show(fm, MY_DIALOG_FRAGMENT);
}
答案 0 :(得分:2)
在support.v7.app.AlertDialog中添加的AlertDialog支持库版本Android Support Library 22.1,为所有API7 +设备带来了一个材质样式对话框(以及其中的视图)。如果您使用的是AppCompat,则还应使用支持库AlertDialog
。
答案 1 :(得分:0)
主题Theme.Sherlock.Light
在技术上是Holo.Light of Holo家族的兼容版本。在appcompat库中,主题Theme.AppCompat.Light
是Material系列的兼容版本。因此,上述行为是可以预期的,因为像Spinner和EditText这样的小部件是styled,具有新的材料设计。
如果你想保留Holo外观,那么你必须从values-v21
开始指定你自己的样式,你后来在v14和v11中继承了这些样式。这篇文章展示了如何为微调器执行:Styling a Spinner, appcompat, material