在平板电脑上模拟呈现片段,通常在手机上

时间:2015-04-10 15:41:15

标签: android android-fragments

我正在处理我的第一个Android应用程序,现在我有点迷失了。

我有一个ListView,当用户点击此列表中的一个元素时,应显示详细视图。我不会有任何麻烦,但我的应用程序将在平板电脑和手机上运行,​​我想在平板电脑上正常显示此详细视图(通常在电话上使用fragmentManager.beginTransaction()。add(...))。 / p>

enter image description here

我知道如何创建一个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出现时调用该方法。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

除了为不同的屏幕尺寸提供不同的布局(或资源)之外,没有其他(足够可靠和支持)的方式来区分手机和平板电脑。

有两种方法可以使用简单的Fragment和FrameLayout并使用DialogFragment(尽管DialogFragment也可以用作简单的片段):

  1. 您可以在A布局中定义<FrameLayout>容器(并在运行时插入片段)。然后,对于手机,此FrameLayout对"match_parent"layout_width都有layout_height,如果是平板电脑,它可以是wrap_content`` or match_parent```,带边距(或者,当然,在dp中有一些预定义的值)。

  2. 或者您可以使用一个DialogFragment,例如res/valuesres/values-sw600dp中的不同主题。如果您的布局足够“繁忙” - 许多小部件 - 那么您甚至可能不需要两个主题。您只需使用wrap_content,布局就会缩小到手机的宽度,并占用平板电脑所需的空间。

  3. 我宁愿使用第二种方式,因为它似乎更清洁。

答案 1 :(得分:0)

您可以为平板电脑和移动设备使用不同的布局,并在具有相同ID的布局中使用FrameLayout,并且片段B是在此FrameLayout内替换的子片段。 请看这些 Layout for tablets in Android

Fragments within Fragments