仅在特定方向期间显示ViewGroup

时间:2014-10-16 20:05:00

标签: android android-layout android-fragments android-ui

我要建立某种新闻应用,其中有新闻列表。点击时,应显示详细新闻。  1.如果手机处于人像状态,则会在另一项活动中显示详细信息  2.如果手机处于横向状态,则详细信息将显示在同一活动的详细信息布局片段中的新闻列表旁边。

(有一段'新闻列表'以及'详情')

我无法实现的是在纵向模式下摆脱细节片段所占据的空间 - 如果我处于横向模式 -

这是因为我已经提到两个空的viewGroups作为活动布局文件中片段的容器。

我不想为每个方向制作单独的布局。

如果视图组为空,是否可以隐藏或稀疏视图组?

相关守则:

主要活动xml:     

    <LinearLayout
        android:id="@+id/news_list_container"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="0.4"
        >
        </LinearLayout>

     <LinearLayout
        android:id="@+id/details_container"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="0.6"
        >
        </LinearLayout>




</LinearLayout>

主要活动类 - 根据我的方向添加片段:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //get orientation first
        if(this.getResources().getConfiguration().orientation==1) { //portrait

            NewsList_fragment newsFrag = new NewsList_fragment(); //init any fragments that may be used

            FragmentManager fManager = getFragmentManager(); //prepare fragment manager
            FragmentTransaction fTransaction = fManager.beginTransaction();

            // Add fragments using fTransaction and then commit
            fTransaction.add(R.id.news_list_container, newsFrag);
            fTransaction.commit();
            }

        else if (this.getResources().getConfiguration().orientation==2) { //landscape

            NewsList_fragment newsFrag = new NewsList_fragment(); //init any fragments that may be used
            Details_fragment detailsFrag = new Details_fragment();


            FragmentManager fManager = getFragmentManager(); //prepare fragment manager
            FragmentTransaction fTransaction = fManager.beginTransaction();

            // Add fragments using fTransaction and then commit
            fTransaction.add(R.id.news_list_container, newsFrag);
            fTransaction.add(R.id.details_container, detailsFrag);

            fTransaction.commit();
            }

提前谢谢

1 个答案:

答案 0 :(得分:0)

在您的情况下,您需要将包含详细信息片段的布局的可见性设置为View.GONE。 View.GONE意味着布局是不可见的,不占用空间。 View.INVISIBLE表示视图只是不可见但仍占用空间。

LinearLayout detailsContainer = (LinearLayout) findViewById(R.id.details_container);
int orientation = getResources().getConfiguration.orientation;
if (orientation == 1) // means orientations is portrait
    detailsContainer.setVisibility(View.GONE);