我正在尝试设置一个FragmentDialog
pre 4.0,因此它显示为4.0后。
我正在使用ActionBarSherlock
,但我必须在冰淇淋三明治之前自己设计。
我希望看到以下内容:
但我得到了这个:
所以基本上我希望它不会填满整个屏幕。
我尝试了各种造型,但都没有成功,我已经达到了一定程度,我希望有一些专家可以帮助我或指导我朝着正确的方向前进
我的DialogFragment:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//TODO Style 2.3 to look like 4.0
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.HONEYCOMB) {
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.Pre_Honeycomb_Holo_Dialog);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = null;
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
view = inflater.inflate(R.layout.info_dialog_view, container);
} else {
view = inflater.inflate(R.layout.info_dialog_view_content, container);
this.getDialog().setTitle(R.string.info_dialog_title);
}
...
基本上我正在建立冰淇淋三明治之前的标题布局,但内容区域是相同的。
我的holo_dialog_style:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="Pre.Honeycomb.Holo.Dialog" parent="Theme.Sherlock.Light">
<item name="android:windowTitleStyle">@null</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowBackground">@drawable/panel_bg_holo_light</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
</style>
</resources>
答案 0 :(得分:5)
这是图书馆成为你朋友的众多案例之一!
我建议使用Styled Dialogs for Android。
它能够生成如下所示的对话框:
要使用它,您需要做的是首先将其添加到Maven(如果您正在使用它):
<dependency>
<groupId>eu.inmite.android.lib</groupId>
<artifactId>android-styled-dialogs</artifactId>
<version>1.0.1</version>
<type>apklib</type>
</dependency>
或者如果您使用的是Ant,那么您只想下载latest jar。
现在,您只需设置主题即可使用您想要的主题。将以下内容添加到您的应用程序主题:
<item name="sdlDialogStyle">@style/DialogStyleLight.Custom</item>
<item name="sdlDialogStyle">@style/DialogStyleDark.Custom</item>
您还可以添加以下样式,以便根据需要进行自定义:
<style name="DialogStyleLight.Custom">
<!-- anything can be left out: -->
<item name="titleTextColor">@color/dialog_title_text</item>
<item name="titleSeparatorColor">@color/dialog_title_separator</item>
<item name="messageTextColor">@color/dialog_message_text</item>
<item name="buttonTextColor">@color/dialog_button_text</item>
<item name="buttonSeparatorColor">@color/dialog_button_separator</item>
<item name="buttonBackgroundColorNormal">@color/dialog_button_normal</item>
<item name="buttonBackgroundColorPressed">@color/dialog_button_pressed</item>
<item name="buttonBackgroundColorFocused">@color/dialog_button_focused</item>
<item name="dialogBackground">@drawable/dialog_background</item>
</style>
一旦你拥有它,它很容易使用:
SimpleDialogFragment.createBuilder(this, getSupportFragmentManager()).setMessage(R.string.message).show();
SimpleDialogFragment.createBuilder(this, getSupportFragmentManager()).setTitle(R.string.title).setMessage(R.string.message).show();
SimpleDialogFragment.createBuilder(this, getSupportFragmentManager()).setTitle(R.string.title).setMessage(R.string.message).setPositiveButtonText(R.string.positive_button).setNegativeButtonText(R.string.negative_button).show();
对于其他示例,还有一些demos可用。
答案 1 :(得分:2)
为避免填满整个屏幕,您可以在DialogFragment的onStart方法上使用此代码:
@Override
public void onStart() {
super.onStart();
// safety check
if (getDialog() == null)
return;
getDialog().getWindow().setLayout(width, height);
}
以编程方式在 getDialog()。getWindow()。setLayout(width,height); 方法中设置所需的宽度和高度。
然后在你正在膨胀的xml布局文件中(R.layout.info_dialog_view)设置宽度和高度以匹配父级。