【问题标题】:Inflate screen-specific layouts programmatically以编程方式膨胀特定于屏幕的布局
【发布时间】:2021-01-13 15:11:50
【问题描述】:

是否可以通过编程方式扩展 screen-specific 布局?

我有 2 个布局用于同一屏幕,其中一个是 sw600dp,对于平板电脑横向我想使用 sw600dp,但对于平板电脑纵向我想使用默认 layout,因为我的屏幕分成 2 个片段。

由于平板电脑很大,横向和纵向都大于 600dp。

【问题讨论】:

  • 您可以查看alvinalexander.com/android/…,了解如何以编程方式确定屏幕尺寸。
  • 我知道屏幕尺寸,我正在寻找如何扩展特定布局目录 sw600dp、sw320dp 等的布局
  • 如果我误解了您的问题“layout-sw600dp-land”也是一个有效的选择(屏幕尺寸和方向),您可以使用它来区分您的布局。见developer.android.com/training/multiscreen/…

标签: android android-layout android-fragments


【解决方案1】:

如果您知道屏幕大小,那么您可以从“使用布局别名”中的示例中获得灵感 https://developer.android.com/training/multiscreen/screensizes (滚动到“使用布局别名”部分)

为避免同一文件的重复,您可以使用别名文件。例如,您可以定义以下布局:

res/layout/main.xml            # single-pane layout
res/layout/main_twopanes.xml   # two-pane layout

基本上,不要将它们放在不同的布局文件夹中,只需将它们命名不同并将所有布局放在默认布局文件夹中即可。

对于您的情况,因为您想以编程方式执行此操作, 然后只需检查您的屏幕尺寸 > xxx 尺寸,膨胀更大的布局。

所以你最终可能会得到如下文件

res/layout/main_sw320.xml   
res/layout/main.xml       
res/layout/main_sw600.xml

【讨论】:

  • 据我所知,没有本地方法可以做到这一点,只是给不同的名字?
  • @PavelPoley 还有一个“hack”可以通过在 layout-sw600dp 中放置视图来检测屏幕尺寸,但默认情况下没有。然后检查该视图的 findViewById 是否为空。 (如果它不为空,那么你已经加载了 sw600dp,否则,默认加载)见thetechnocafe.com/how-to-make-two-pane-layout-in-android
猜你喜欢
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多