在任何应用程序中,添加/编辑将相对较少的输入。我已经看到应用程序,尤其是日历,正在使用聪明的策略将这些显示为简单对话框,以便用户可能不会注意到设计表单中有空格
如下图所示
我的问题是,如何实现这一目标?
答案 0 :(得分:5)
我正在做的是扩展DialogFragment:
public class AboutFragment extends DialogFragment { ... }
我还有一个包含该片段的活动。当需要调用对话框/活动时,此方法决定如何显示它:
public static void showAbout(Activity parent) {
if (isTablet) {
AboutFragment aboutFragment = AboutFragment.newInstance();
aboutFragment.setStyle(DialogFragment.STYLE_NORMAL, R.style.DialogTheme);
DialogUtils.showDialog(parent, aboutFragment);
} else {
Intent aboutIntent = new Intent(parent, AboutActivity.class);
parent.startActivity(aboutIntent);
}
}
如何判断它是否是平板电脑,完全取决于你。
documentation中解释了这种技术。
答案 1 :(得分:4)
在我看来,这里最好的方法是使用
<!-- Theme for a window without an action bar that will be displayed either full-screen
on smaller screens (small, normal) or as a dialog on larger screens
(large, xlarge). -->
"android:Theme.Holo.Light.DialogWhenLarge.NoActionBar"
答案 2 :(得分:3)
我发现最好/最简单的解决方案是始终使用Activity,并根据屏幕大小(和版本)更改主题父级。
res / values / themes.xml中的
<style name="Detail.Theme" parent="@android:style/Theme.Holo.Light" >
...
</style>
并在res / values-large / themes.xml
中 <style name="Detail.Theme" parent="@android:style/Theme.Holo.Light.DialogWhenLarge" >
...
</style>
答案 3 :(得分:1)
使用Context.setTheme方法以程序方式设置它们。正如医生说的那样
应该在上下文中实例化任何视图之前调用它 (例如在致电之前。
因此,要在主题之间切换,需要在onCreate之前调用setTheme
public void onCreate(Bundle savedInstanceState) {
// check screen size
setTheme(dialogTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
答案 4 :(得分:0)
当@StinePike
回答时,以编程方式设置对话框主题并没有任何用处(对于 me ),因为它在对话框后面显示wierd black screen,而不是暗淡的背景(如问题所示)。这显然是bug。
我没有尝试以编程方式或在style.xml中设置它,而是除了 AndroidManifest.xml 以外的所有地方,我做了相反的操作,这对我有用。 (我从以上solution的奇妙issue中获取的解决方案
最简单的解决方案(有效)如下:
<activity
android:name="com.example.MyActivity"
android:label="@string/title_activity_mine"
android:theme="@android:style/Theme.DeviceDefault.Dialog">
...
</activity>
if (!(isTablet(this)) {
setTheme(defaultTheme);
}
super.onCreate(savedInstanceState);
...
注意:
style.xml
。价:
答案 5 :(得分:0)
使用DailogFragment,然后用setShowsDialog()
控制它的显示方式