【问题标题】:How to detect tablet layout and open two layout fragments on the screen (Like master detail fragments)如何检测平板布局并在屏幕上打开两个布局片段(如主细节片段)
【发布时间】:2016-07-01 04:56:21
【问题描述】:

我有两个片段。一旦我启动应用程序,第一个片段就会打开。当我单击第一个片段中我的 recyclerview 中的任何项目时,我打开第二个片段。当它是平板电脑时,我想同时在屏幕上显示两个片段(如主细节布局)。我可以从片段中做到这一点吗?我知道片段存在于活动中。但是有没有办法从片段中检测到该应用程序正在平板电脑上运行?

我有 activity_main.xml,它有一个 Framelayout,我以编程方式替换我的第一个片段。我还有其他四个 activity_main.xml(w600dp、w600dp-land、w720dp、w720dp-land)布局,用于具有两个 Framelayout 的平板电脑。

【问题讨论】:

    标签: android android-layout android-fragments fragment tablet


    【解决方案1】:

    在 res 目录下新建文件夹 values-w820dp

    在dimens.xml里面创建dimens.xml文件写这个

    <?xml version="1.0"?>
    
    -<resources>
    
    <!-- Example customization of dimensions originally defined inres/values    /dimens.xml (such as screen margins) for screens with more than 820dp of available width. This would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
    
    
    <dimen name="activity_horizontal_margin">64dp</dimen>
    
    <bool name="is_tablet">true</bool>
    
    </resources>
    

    在你的 values 文件夹中的 dimens.xml 文件中写下这个

    <?xml version="1.0"?>
    
    -<resources>
    
    <!-- Default screen margins, per the Android Design guidelines. -->
    
    
    <dimen name="activity_horizontal_margin">16dp</dimen>
    
    <dimen name="activity_vertical_margin">16dp</dimen>
    
    <bool name="is_tablet">false</bool>
    
    </resources>
    

    在您的活动中,从 dimens.xml 值获取“is_tablet”值,如果为真则表示它是平板电脑,否则不是这是我使用的示例代码

    public class FragmentsFirstActivity extends AppCompatActivity implements IFragments{
    
    public static final String DEBUG = "Tutorials";
    
    FragmentsFirstActivityFragment mFirstFragment;
    FragmentsSecondActivityFragment mSecondFragment;
    
    boolean is_tablet = false;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragments_first_activity);
    
        is_tablet = getResources().getBoolean(R.bool.is_tablet);
    
        Log.d(DEBUG, "Is Tablet: " + is_tablet);
    
    
        mFirstFragment = new FragmentsFirstActivityFragment();
        getSupportFragmentManager().beginTransaction().replace(R.id.first_fragment, mFirstFragment).commit();
    
        if (is_tablet) {
            mSecondFragment = new FragmentsSecondActivityFragment();
            getSupportFragmentManager().beginTransaction().replace(R.id.second_fragment, mSecondFragment).commit();
        }
    }
    
    
    @Override
    public void onButtonClicked(String message) {
    
        if(is_tablet) {
    
        } else {
            startActivity(new Intent(this, FragmentsSecondActivity.class).putExtra("message", message));
        }
    }
     }
    

    希望对你有帮助

    【讨论】:

    • 所以我需要创建另一个 Activity 来处理它是否是平板电脑布局?
    【解决方案2】:

    您可以使用主详细信息片段在一个布局中显示两个片段,并将平板电脑和手机的使用分开 if (Common.IsTablet(Context)) { }

    public static bool IsTablet(Context context)
            {
                return ((context.Resources.Configuration.ScreenLayout & ScreenLayout.SizeMask) >= ScreenLayout.SizeLarge) ||
                       ((context.Resources.Configuration.ScreenLayout & ScreenLayout.SizeMask) >= ScreenLayout.SizeXlarge);
    
            } // to detect whether device is tablet
    

    【讨论】:

      猜你喜欢
      • 2019-09-06
      • 2020-02-07
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      相关资源
      最近更新 更多