我正在处理我的第一个Android应用程序,现在我有点迷失了。
我有一个ListView,当用户点击此列表中的一个元素时,应显示详细视图。我不会有任何麻烦,但我的应用程序将在平板电脑和手机上运行,我想在平板电脑上正常显示此详细视图(通常在电话上使用fragmentManager.beginTransaction()。add(...))。 / p>
我知道如何创建一个DialogFragment(事实上,我在应用程序的其他地方使用了一个),但我不确定DialogFragment是否可以用于普通事务。
我不知道如何区分我的应用程序是在手机还是平板电脑上运行(除了在layout-sw600dp文件夹中创建布局)
修改
好吧,多亏了玛格丽塔的回答,我找到了解决方案(不是唯一的解决方案,而是一种可能性)。
1)将B定义为DialogFragment
2)使用此代码
在res / values文件夹中创建values.xml <bool name="isTablet">false</bool>
3)使用此代码在res / values-sw600dp文件夹中创建另一个values.xml。这样,我有一个布尔资源告诉我该应用程序是否在平板电脑上运行。
<bool name="isTablet">true</bool>
4)在片段A(负责显示片段B)上,创建一个类似于此的方法:
private void showFragmentB(){
Resources res = getResources();
boolean isTablet = res.getBoolean(R.bool.isTablet);
if (isTablet) {
// We're running on a tablet, so we show Fragment B as a dialog
FragmentB.newInstance().show(getActivity().getSupportFragmentManager(), FragmentB.class.toString());
} else {
// We're running on a phone, adding Fragment B to the stack
// with some animation
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.abc_slide_in_bottom, R.anim.abc_slide_out_bottom);
transaction.add(R.id.container, FragmentB.newInstance(), FragmentB.class.toString());
transaction.addToBackStack(FragmentB.class.toString());
transaction.commit();
}
}
5)每当片段B出现时调用该方法。
感谢您的帮助。
答案 0 :(得分:0)
除了为不同的屏幕尺寸提供不同的布局(或资源)之外,没有其他(足够可靠和支持)的方式来区分手机和平板电脑。
有两种方法可以使用简单的Fragment和FrameLayout并使用DialogFragment(尽管DialogFragment也可以用作简单的片段):
您可以在A布局中定义<FrameLayout>
容器(并在运行时插入片段)。然后,对于手机,此FrameLayout对"match_parent"
和layout_width
都有layout_height
,如果是平板电脑,它可以是wrap_content`` or
match_parent```,带边距(或者,当然,在dp中有一些预定义的值)。
或者您可以使用一个DialogFragment,例如res/values
和res/values-sw600dp
中的不同主题。如果您的布局足够“繁忙” - 许多小部件 - 那么您甚至可能不需要两个主题。您只需使用wrap_content
,布局就会缩小到手机的宽度,并占用平板电脑所需的空间。
我宁愿使用第二种方式,因为它似乎更清洁。
答案 1 :(得分:0)
您可以为平板电脑和移动设备使用不同的布局,并在具有相同ID的布局中使用FrameLayout
,并且片段B是在此FrameLayout
内替换的子片段。
请看这些
Layout for tablets in Android