【问题标题】:How to make responsive Android application which is used in mobile and also in tablet?如何制作可用于移动设备和平板电脑的响应式 Android 应用程序?
【发布时间】:2014-02-08 04:43:56
【问题描述】:

我创建了一个 Android 应用程序。

当我在Mobile Phone 中运行我的应用程序时,它运行得很好,但是当我在Tablet 中运行时,应用程序的布局发生了变化。

那么,如何制作在MobileTablet 中使用的响应式Android 应用程序?

【问题讨论】:

标签: android android-layout


【解决方案1】:

在 Android 上,我们可以使用从 Android 3.2 引入的 屏幕尺寸选择器 来定义要使用的布局采用。 更多详情请访问http://android-developers.blogspot.in/2011/07/new-tools-for-managing-screen-sizes.html。以下代码 sn-p 已从同一链接中提取:

public class MyActivity extends Activity 
{
    @Override protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate();
        Configuration config = getResources().getConfiguration();
        if (config.smallestScreenWidthDp >= 600) 
        {
            setContentView(R.layout.main_activity_tablet);
        } 
        else 
        {
            setContentView(R.layout.main_activity);
        }
    }
}

大小配置的另一个很好的参考是保留分隔符。详情请见:http://www.vanteon.com/downloads/Scaling_Android_Apps_White_Paper.pdf

【讨论】:

    【解决方案2】:

    我只是在谈论移动响应式设计。 对于布局,我相信您目前只能通过以下方式进行区分:

    res/layout/my_layout.xml            // layout for normal screen size
    res/layout-small/my_layout.xml      // layout for small screen size
    res/layout-large/my_layout.xml      // layout for large screen size
    res/layout-large-land/my_layout.xml // layout for large screen size in landscape mode
    

    您可以找到有关可以添加到文件夹结构以区分不同设置 Documentationandroid-developers.blogspot 的更多信息

    为了适应其他类型的平板电脑和屏幕尺寸,android 引入了一种新方法来为更多离散的屏幕尺寸指定资源。新技术基于您的布局所需的空间量(例如 600dp 的宽度),而不是试图使您的布局适合通用尺寸组(例如 large 或 xlarge)。

    更新:基本上有两种方法可以利用响应式设计为观众提供良好的体验:

    1. 优化内容的布局。

    2. 调整显示的内容。

    更新2:在你的活动中写下这段代码

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    
    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        setContentView(R.layout.landscapeView);
    
    } else {
        setContentView(R.layout.portraitView);
    }
    

    并在您的清单文件中添加这一行

    android:configChanges="orientation|keyboardHidden|screenSize"
    

    所以这将处理这两件事,它不会重新启动您的活动,并且会根据您的方向更改加载布局。欲了解更多信息,请访问http://www.codeproject.com/Articles/422431/Handling-screen-layout-changes-in-Android

    【讨论】:

    • 是否有可能使用单一布局做出兼容手机和平板电脑的设计?
    • @SagarZala 不,这是不可能的。为了适应其他类型的平板电脑和屏幕尺寸,android 引入了一种新方法来为更多离散的屏幕尺寸指定资源。新技术基于您的布局所需的空间量(例如 600dp 的宽度),而不是试图使您的布局适合通用尺寸组(例如 large 或 xlarge)。
    • @MD 好的先生,但是如何管理这些布局?你有什么例子吗?请给我。
    • @SagarZala 转到此link 或阅读官方docs。你明白了。
    • 只使用布局文件无法实现响应式应用。当您开始开发时,您必须考虑在平板电脑或大屏幕上使用多个 Fragment。
    【解决方案3】:

    @Sagar Zala

    尝试使用约束布局作为布局的父视图,这将有助于使您的应用程序响应手机和设备。

    Constraint Layout

    【讨论】:

      【解决方案4】:

      您必须为不同的屏幕尺寸创建布局,因为创建一个单一的设计布局并希望它在所有屏幕尺寸上都能正常工作并且看起来不错是几乎不可能的

      正如 android 文档中为 supporting multiple screen sizes 定义的那样,我们需要专注于使用 3 件事。

      1. 使用更多约束布局,因为与其他布局组件相比,它为我们提供了更多相对样式
      2. 在 android studio 中使用限定符创建备用布局
      3. 使用可以拉伸而不会模糊的位图或 svg 组件。

      约束布局 它支持百分比值之类的东西,现在将它们与指南结合起来,它成为设计布局的强大工具

      替代布局 在 android studio 的布局设计选项卡中单击方向更改图标,然后从下拉列表中选择 create other... 选项。现在您需要从提供的列表中选择限定符并创建与不同屏幕尺寸相关的布局,而无需编写额外的代码来显示这些布局。当提供的限定符布局设计匹配时,就会出现这些布局。

      您可以点击上面提供的链接,了解他们如何使用 smallest width 限定符和值

      320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).
      480dp: a large phone screen ~5" (480x800 mdpi).
      600dp: a 7” tablet (600x1024 mdpi).
      720dp: a 10” tablet (720x1280 mdpi, 800x1280 mdpi, etc).
      

      这些是几乎涵盖所有设备尺寸的常用自定义值,您可以根据需要添加更精细的尺寸,然后您还可以添加不同的方向限定符以及最小宽度限定符。

      所有这些的组合将使您的应用程序完全响应

      我知道我正在回答一个老问题,但我的回答可能有助于其他人使用最近可用的解决方案搜索类似的查询。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多