Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用具有全息主题的夏洛克显示AlertDialog?_Android_Actionbarsherlock - Fatal编程技术网

Android 使用具有全息主题的夏洛克显示AlertDialog?

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

在Android 2.3.4上使用Sherlock: 我想显示一个
警报对话框
,其中包含:

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