android - 根据 fragment 宽度而不是屏幕宽度加载布局

标签 android android-layout android-resources

在我的应用程序中,我有多个 fragment 在多个 Activity 中使用。根据屏幕大小, Activity 使用不同的布局,在这些布局中,它们的 fragment 可以垂直和/或水平堆叠,平铺在具有行和列的表格布局中,或者在标签栏下几乎全屏显示。

对于每个 fragment ,也有多种布局,例如

  1. res/布局/articles_list_fragment.xml
  2. res/layout-w590dp/articles_list_fragment.xml

在我的 fragment 类中,我正在加载这样的布局:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    rootView = inflater.inflate(R.layout.articles_list_fragment, container, false);
    // (...)
}

现在,当然,当 fragment 的可用宽度小于 590dp 时,我希望它使用第一个布局,而当 fragment 的可用宽度大于(或恰好)590dp 时,我想要要使用的第二个布局。

但是android资源系统似乎只根据宽度加载那些布局 that is available to my whole activity window .这不符合我的需要。例如,当我的 Activity 窗口为 1024dp 宽时,左侧 fragment 将获得该宽度的 2/5,即 409dp。无论如何,加载第二个布局资源,需要 590dp 宽度。

当然,在这个简单的示例中,我可以计算出我的左侧 fragment 达到 590dp 时的确切 Activity 窗口宽度:590dp * 5/2 = 1475dp 并因此重命名 res/layout-w590dp/articles_list_fragment.xmlres/layout-w1475dp /articles_list_fragment.xml。然而,在我的真实案例中, Activity 窗口宽度和 fragment 宽度之间的关系要复杂得多,静态/手动确定最小宽度似乎不合适。

所以现在我想知道是否有任何类型的设置/hack/库/限定符语法可以用来改变 android 确定它加载的资源的方式。

最佳答案

我有一个类似的问题,给人的印象是 Android 故意要强制开发人员为每个屏幕尺寸设计全屏布局(包括所有 fragment ),而不是根据 fragment 大小来布局 fragment 。

最后我决定通过不为不同大小的地方重复使用相同的 fragment 来解决这个问题。相反,我继承了我的 fragment ,覆盖了 onCreateView 方法,这样我就可以为不同的子 fragment 扩展不同的布局。

不幸的是,这导致了布局的重复。为了避免这种情况,可以采取变通方法将所有布局直接放在布局文件夹下,并以编程方式确定屏幕尺寸之外的正确布局版本。

关于android - 根据 fragment 宽度而不是屏幕宽度加载布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22459641/

相关文章:

android - 如何在 Android 中清除 ImageView?

java - Kotlin:重载解析歧义

java - 'android-24' 需要 JDK 1.8 或更高版本才能编译

Android 重叠 ImageView

android - 底部导航 View : Change the default highlighted Tab when the app launches

android - 有没有一种简单的方法可以从 Kotlin 的字符串资源文件中获取具有默认值的数据调用对象?

android - resultCode == RESULT_OK 在 redmi note3 中不起作用

php - Android 中哪个客户端最好使用 HttpURLConnection 或 HttpClient?

java - 在 Canvas android 中绘制带边框的文本

java - Android:当许多包使用 R.java 时出错