Android Fragment 不尊重 match_parent 作为高度

发布于 2024-12-12 05:51:48 字数 2499 浏览 0 评论 0原文

很抱歉有大量的代码转储,但我真的迷路了。

MyActivity.java onCreate

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_singlepane_empty);
mFragment = new PlacesFragment();
getSupportFragmentManager().beginTransaction()
                    .add(R.id.root_container, mFragment)
                    .commit();

PlacesFragment.java onCreateView

mRootView = (ViewGroup) inflater.inflate(R.layout.list_content, null);
return mRootView;

注释mRootView是一个ViewGroup 我相信全球范围内没有问题。 PlacesFragment 是一个 ListFragment

布局:

activity_singlepane_empty.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root_container"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#00f">
    <include layout="@layout/actionbar"/>

    <!-- FRAGMENTS COME HERE! See match_parent above -->

</LinearLayout>

list_content.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listContainer"
        android:background="#990"
        >
    
        <ListView android:id="@android:id/list"
                android:layout_width="match_parent" 
                android:layout_height="match_parent"
                android:drawSelectorOnTop="false" />
        
        <TextView android:id="@id/android:empty"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:gravity="center"
                android:textAppearance="?android:attr/textAppearanceMedium" 
                android:text="@string/no_data_suggest_connection"/>

</FrameLayout>

问题:如您所见,预期的行为是具有空的上面的 TextView 出现在屏幕中央。在Eclipse中的设计预览上,是可以的。仅当作为片段添加到 root_view 时,FrameLayout 才不会填充整个屏幕。

root_container 为蓝色,FrameLayout 为黄色,请参阅下文以进行调试。 黄色窗格不应该填满整个屏幕吗?!?!?!?

在此输入图像描述

Sorry for the huge code dump, but I'm truly lost.

MyActivity.java onCreate:

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_singlepane_empty);
mFragment = new PlacesFragment();
getSupportFragmentManager().beginTransaction()
                    .add(R.id.root_container, mFragment)
                    .commit();

PlacesFragment.java onCreateView:

mRootView = (ViewGroup) inflater.inflate(R.layout.list_content, null);
return mRootView;

Notes: mRootView is a ViewGroup global, no problem about it, I believe. PlacesFragment is a ListFragment.

Layouts:

activity_singlepane_empty.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root_container"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#00f">
    <include layout="@layout/actionbar"/>

    <!-- FRAGMENTS COME HERE! See match_parent above -->

</LinearLayout>

list_content.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listContainer"
        android:background="#990"
        >
    
        <ListView android:id="@android:id/list"
                android:layout_width="match_parent" 
                android:layout_height="match_parent"
                android:drawSelectorOnTop="false" />
        
        <TextView android:id="@id/android:empty"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:gravity="center"
                android:textAppearance="?android:attr/textAppearanceMedium" 
                android:text="@string/no_data_suggest_connection"/>

</FrameLayout>

Problem: as you can see, the expected behavior would be to have the empty TextView above to appear centered on the screen. On the design preview in Eclipse, it is OK. Only when added to root_view as a fragment the FrameLayout won't fill the whole screen.

root_container is blue, and FrameLayout is yellowish, see below for debug purposes. Shouldn't the yellow pane fill the whole screen?!?!?!?

enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

英雄似剑 2024-12-19 05:51:48

我遇到了同样的问题,并且认为当您用 null 膨胀 Fragment 的 onCreateView 中的布局时就会发生这种情况,就像您在这里所做的那样:

mRootView = (ViewGroup) inflater.inflate(R.layout.list_content, null);

相反,您必须这样做:

mRootView = (ViewGroup) inflater.inflate(R.layout.list_content,container, false);

其中容器是 Viewgroup。至少,这为我解决了问题。

I had the same problem and think it happens when you inflate the layout in the Fragment's onCreateView with null, like you did here:

mRootView = (ViewGroup) inflater.inflate(R.layout.list_content, null);

Instead you have to do this:

mRootView = (ViewGroup) inflater.inflate(R.layout.list_content,container, false);

Where container is the Viewgroup. At least, that solved the problem for me.

埋葬我深情 2024-12-19 05:51:48

由于某种原因,FrameLayout 无法从 XML 获取其布局。

我还需要在代码中设置它(Fragment 的 onCreateView):

mRootView = (ViewGroup) inflater.inflate(R.layout.list_content, null);
FrameLayout fl = (FrameLayout) mRootView.findViewById(R.id.listContainer);
fl.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
return mRootView;

For some reason the FrameLayout does not get its layout from the XML.

I need to set it also in code (Fragment's onCreateView):

mRootView = (ViewGroup) inflater.inflate(R.layout.list_content, null);
FrameLayout fl = (FrameLayout) mRootView.findViewById(R.id.listContainer);
fl.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
return mRootView;
蓝礼 2024-12-19 05:51:48
<android.support.v4.widget.NestedScrollView
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    android:fillViewport="true"
    >

    <include layout="@layout/screen_main_fragment" />

</android.support.v4.widget.NestedScrollView>

我必须将layout_height =“wrap_content”更改为“match_parent”才能使其工作。

<android.support.v4.widget.NestedScrollView
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    android:fillViewport="true"
    >

    <include layout="@layout/screen_main_fragment" />

</android.support.v4.widget.NestedScrollView>

I had to change layout_height="wrap_content" to "match_parent"to make it work.

离线来电— 2024-12-19 05:51:48

我这样做的方法是在 xml 代码中创建一个透明图像,使片段成为相对布局,并在 ImageView 中创建 layout_alignParentBottom="true",这样图像粘在底部并使片段填充父级

temp_transparent.xmlfragment_my_invites.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:thickness="0dp"
   android:shape="rectangle">
<gradient
    android:startColor="#00000000"
    android:endColor="#00000000"
    android:type="linear"
    android:angle="270"/>

代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:id="@+id/my_invites_fragment"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:background="#ffffff">


<ListView
    android:id="@+id/list_invites"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:divider="@color/list_divider"
    android:dividerHeight="1dp"
    android:layout_alignParentTop="true" >
</ListView>

<ImageView
    android:id="@+id/transparent_image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentBottom="true"
    android:layout_below="@id/list_invites"
    android:src="@drawable/temp_transparent" />

The way I did that was to create a transparent image in xml code, make the fragment a relative layout and makelayout_alignParentBottom="true" in the ImageView, this way the image sticks to the bottom and makes the fragment fill the parent

Code Here:

temp_transparent.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:thickness="0dp"
   android:shape="rectangle">
<gradient
    android:startColor="#00000000"
    android:endColor="#00000000"
    android:type="linear"
    android:angle="270"/>

fragment_my_invites.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:id="@+id/my_invites_fragment"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:background="#ffffff">


<ListView
    android:id="@+id/list_invites"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:divider="@color/list_divider"
    android:dividerHeight="1dp"
    android:layout_alignParentTop="true" >
</ListView>

<ImageView
    android:id="@+id/transparent_image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentBottom="true"
    android:layout_below="@id/list_invites"
    android:src="@drawable/temp_transparent" />

始终不够 2024-12-19 05:51:48

我有同样的问题&我尝试了很多方法,但没有一个起作用。

遇到什么问题?

我在 内设置了 ,其高度设置为 0dp,这导致了问题。

<ScrollView
   android:id="@+id/scrollView2"
   android:layout_width="0dp"
   android:layout_height="0dp"
   android:background="@color/white"
   app:layout_constraintBottom_toTopOf="@+id/bottom_nav_view"
   app:layout_constraintEnd_toEndOf="parent"
   app:layout_constraintStart_toStartOf="parent"
   app:layout_constraintTop_toBottomOf="@+id/myToolbar">

      <FrameLayout
        android:id="@+id/mainFrame"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/myToolbar" />
</ScrollView>

为了使其正常工作,将所有外部包含视图更改为 ma​​tch_parent

I had the same problem & i tried many things but none of them worked.

What problem faced?

I had <FrameLayout> inside <ScrollView> which height is set to 0dp which causes the problem.

<ScrollView
   android:id="@+id/scrollView2"
   android:layout_width="0dp"
   android:layout_height="0dp"
   android:background="@color/white"
   app:layout_constraintBottom_toTopOf="@+id/bottom_nav_view"
   app:layout_constraintEnd_toEndOf="parent"
   app:layout_constraintStart_toStartOf="parent"
   app:layout_constraintTop_toBottomOf="@+id/myToolbar">

      <FrameLayout
        android:id="@+id/mainFrame"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/myToolbar" />
</ScrollView>

To make it working change all the outer containing views to match_parent

向地狱狂奔 2024-12-19 05:51:48

将这一行添加到父布局将解决该问题,

android:fillViewport="true"

Adding this line to the Parent Layout will solve that problem,

android:fillViewport="true"

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文