Android 使用具有全息主题的夏洛克显示AlertDialog?
在Android 2.3.4上使用Sherlock: 我想显示一个Android 使用具有全息主题的夏洛克显示AlertDialog?,android,actionbarsherlock,Android,Actionbarsherlock,在Android 2.3.4上使用Sherlock: 我想显示一个警报对话框,其中包含: 1) 头衔 2) 内容 3) 2个按钮 我正在使用下面的类: public class MyAlertDialog extends SherlockDialogFragment{ @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the Builder class
警报对话框
,其中包含:
1) 头衔
2) 内容
3) 2个按钮
我正在使用下面的类:
public class MyAlertDialog extends SherlockDialogFragment{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getSherlockActivity());
builder.setMessage("Title")
.setPositiveButton("Fire!", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// FIRE ZE MISSILES!
}
})
.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
// Create the AlertDialog object and return it
return builder.create();
}
}
在我的活动中我正在呼叫:MyAlertDialog m = new MyAlertDialog();
m.show(getSupportFragmentManager(), "hey");
它显示的是AlertDialog,但使用的是旧主题(记住我使用的是Android 2.3.4)
如果您愿意,以下是我的整个主要活动课程:
public class MainActivity extends SherlockFragmentActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar ab;
ab = getSupportActionBar();
ab.setTitle("Testing Sherlock");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
getSupportMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch(item.getItemId())
{
case R.id.action_one:
MyAlertDialog m = new MyAlertDialog();
m.show(getSupportFragmentManager(), "hey");
break;
}
return super.onOptionsItemSelected(item);
}
}
我正在为我的应用程序设置的样式是:
<resources>
<style name="AppBaseTheme" parent="@style/Theme.Sherlock.Light">
</resources>
附言:我已经显示了操作栏
,除了警报对话框
的主题外,一切都正常我希望它看起来像这样: 而不是像这个:
我已经这样做了,我不记得我采取的确切步骤,但一般做法是: 从以下位置复制XML警报对话框(我想这就是名称):
使用holo\data\res\layout的android sdk文件夹\platforms\android版本
你的项目 我认为您必须进行一些更改以使其正常工作(我不知道我到底做了什么,但我相信要记住,您必须从一些样式定义中删除“android:”前缀,然后ABS将识别它们 也许你也需要从中生成样式,但我不知道它们是否暗示了它的作用 另外,请看一看,相应的答案将引导您如何在对话框中扩展自己的XML创建样式:
<resources>
<style name="MyFragment">
<item name="android:windowFrame">@null</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowTitleStyle">@null</item>
<item name="android:colorBackground">#ffffff</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:textColor">#FF0000</item>
</style>
</resources>
R.style.MyFragment是样式
R.style.custom\u布局是AlertDialog的自定义布局。此库适合holo风格的android对话框
您需要对复制的XML进行一些更改,以便它能够正常工作,然后您应该能够在对话框Fragments中膨胀XML,这将是我的另一个选择,因为我希望它只与Sherlock一起工作。我不想创建我自己的新“Sherlock”类..哈哈,你不需要自定义类,只需使用AlertDialog类,膨胀自定义布局而不是androids标准布局。看到我答案的最后一句,我已经更新了它,链接会提示你如何膨胀布局。你也添加了
HoloEverywhere
库了吗?不……我应该添加吗?这很简单在所有API版本上获得整个Holo主题的方法。我是否应该将其包含在sherlock中?您用于构建器的CTOR仅在API11中提供。此外,即使您使用AlertDialog.builder(新ContextThemeWrapper(这个,R.style.MyFragment));也无法工作。在galaxy s2上使用android 2.3.5进行测试。
public class MyDialogFragment extends SherlockDialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.MyFragment);
// Get the layout inflater
LayoutInflater inflater = getActivity().getLayoutInflater();
final View view = inflater.inflate(R.layout.custom_layout, null);
....
}
}