对于巨大的代码转储感到抱歉,但我真的迷路了。
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为黄色,请参阅下面的调试目的。 黄色窗格不应该填满整个屏幕吗?!?!?!?
答案 0 :(得分:70)
我遇到了同样的问题,并且认为当你在片段的onCreateView中使用null填充布局时会发生这种情况,就像你在这里做的那样:
mRootView = (ViewGroup) inflater.inflate(R.layout.list_content, null);
相反,你必须这样做:
mRootView = (ViewGroup) inflater.inflate(R.layout.list_content,container, false);
容器是Viewgroup的位置。至少,这解决了我的问题。
答案 1 :(得分:5)
<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”以使其正常工作。
答案 2 :(得分:4)
由于某种原因,FrameLayout没有从XML获取其布局。
我还需要在代码中设置它(Fragment&#39; 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;
答案 3 :(得分:0)
我这样做的方法是在xml代码中创建透明图像,使片段成为相对布局并在layout_alignParentBottom="true"
中制作ImageView
,这样图像就会粘到底部并使片段填充父
代码在这里:
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" />
答案 4 :(得分:0)
我遇到了同样的问题,我尝试了很多事情,但没有一个起作用。
面临什么问题?
我在<FrameLayout>
内有<ScrollView>
,其高度设置为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>
要使其正常工作,请将所有包含外部的视图更改为 match_parent
答案 5 :(得分:0)
将此行添加到父布局将解决该问题,
android:fillViewport="true"