使用带有Holo主题的Sherlock显示AlertDialog?

时间:2013-03-17 16:36:41

标签: android actionbarsherlock

在Android 2.3.4上使用Sherlock: 我想展示一个AlertDialog包含:

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>

P.S:我显示了ActionBar,除了AlertDialog的主题外,一切正常。我希望它看起来像这样:

enter image description here

而不喜欢这个:

enter image description here

3 个答案:

答案 0 :(得分:4)

创建样式:

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

在你的SherlockFragmentActivity中:

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

R.style.MyFragment 是样式。

R.style.custom_layout 是AlertDialog的自定义布局。

答案 1 :(得分:4)

这个库看起来很适合holo风格的android对话框 https://github.com/inmite/android-styled-dialogs

android styled dialogs

答案 2 :(得分:1)

我已经这样做了,我不记得我采取的确切步骤,但一般方法是:

从以下位置复制XML alert_dialog_holo(我认为这是名称):
 android sdk文件夹\ platforms \ android-version使用holo \ data \ res \ layout
到你的项目。

我认为你必须做一些改变才能使它正常工作(我不知道我做了什么,但我相信你必须记住你必须从某些样式定义中删除“android:”前缀,然后他们将被ABS认可。

也许你还需要从这个tool生成的样式,但我不知道它们是否暗示它能够起作用。

另请查看此question相应的答案将引导您如何在对话框中夸大自己的XML