在不同设备(平板电脑和手机)上调用两种不同的活动

时间:2014-10-09 03:19:30

标签: java android android-activity

在这里,我正在尝试在不同的设备(Android平板电脑和Android手机)上开展活动。有没有办法使用if语句来检查应根据设备加载哪个活动? 这是我的代码:

Button buttonGo = (Button) findViewById(R.id.button_goToActivity);
         buttonGo.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 if (tablet device) {
                     startActivity(new Intent(MainActivity.this, TabletActivity.class));
                 } else {
                     startActivity(new Intent(MainActivity.this, AndroidPhoneActivity.class));
             }
         });

感谢您的努力...

4 个答案:

答案 0 :(得分:2)

为了实现这一目标,您必须使用Fragment而不是ActivityFragments的{​​{3}}正是您想要的。您可以查看Design Philosophy以了解它是如何实现的。这是一个包含两个Fragments的主要详情应用,当设备处于纵向模式或平板电脑时,它只显示主设备,否则它还显示主设备旁边的详细信息从列表中选择一个项目,您将看到详细信息,而无需转到其他Activity

答案 1 :(得分:1)

首先,作为Android最佳实践,建议使用Fragments而不是Activity来实现您的要求。

但是如果你热衷于使用Activity,那么下面是找到设备类型并加载不同活动的解决方案。

1)有2个值文件夹:值 - > strings.xml和values-sw600dp - >的strings.xml

2)在xml

中创建字符串值
<string name="device_type">PHONE</string> in values -> strings.xml
<string name="device_type">TABLET</string> in values-sw600dp -> strings.xml

3)创建一种检查当前设备是否为Phone的方法

public boolean isPhone() {
   String deviceType = getResource().getString(R.string.device_type);

   if (deviceType.equalsIgnoreCase("PHONE") {
     return true;
   } else {
     return false;
   } 
}

4)根据设备加载您的活动,就像您在上面的代码段中所做的那样

如果这有帮助,请告诉我......

答案 2 :(得分:0)

最有可能的是,这里有两个单独的活动。相反,对于同一活动,您应该有两种不同的布局。手机的布局应位于常规res/layout文件夹中,平板电脑的布局应位于res/layout-large文件夹中。请阅读Supporting Different Screens了解详情。

答案 3 :(得分:0)

如果您对Tablet活动和电话活动使用相同的功能,那么您不需要为此目的进行两项活动。你需要为平板电脑和手机制作两个不同的Layout xml。

  1. 创建一个名为的布局文件夹:layout-large和layout-xlarge。
  2. 现在从普通布局文件夹中复制xml文件并粘贴到两个新布局文件夹中。
  3. 无需更改xml文件的名称。
  4. 现在调整layout-large和layot-xlarge的xml文件,以便为平板电脑设计。
  5. 现在运行应用程序平板电脑和手机机器人将根据大小和屏幕密度选择xml。

    注意:功能应该相同。

  6. 如果:您希望为手机和平板电脑显示具有不同功能的不同屏幕。使用此代码进行检查。

        if ((getResources().getConfiguration().screenLayout & 
        Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) {
    
    
       }
    

    希望这对你有所帮助。