一个活动或多个活动中的多个布局?

时间:2019-03-14 06:22:37

标签: android android-activity layout

我对布局和活动有疑问,主要关注的是应用程序的效率。我的问题是

在单个活动(例如单个主要活动)中使用多个布局XML文件,并且仅更改不同XML文件的视图内容是否简单有效,例如:使用处理程序在单个活动中登录和注册布局文件

OR

不同的活动,例如登录页面和注册页面,都有单独的活动和相应的布局文件

就效率和便捷性而言,哪种最佳实践是? 还请列出这些方法的利弊? 以及使用这些方法中的任何一种的情况?

谢谢。

2 个答案:

答案 0 :(得分:1)

  

方法-1:

请参见android.widget.ViewFlipper的完整示例。有了它,您可以从xml创建不同的布局,然后使用类似这样的简单方法在它们之间切换:

ViewFlipper viewFlipper = (ViewFlipper) findViewById(R.id.myViewFlipper);


  // or you can switch selecting the layout that you want to display
  viewFlipper.setDisplayedChild(1);
  viewFlipper.setDisplayedChild(viewFlipper.indexOfChild(findViewById(R.id.secondLayout)

Xml 示例,具有两种布局:

      <ViewFlipper
            android:id="@+id/myViewFlipper"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

            <LinearLayout
                android:id="@+id/firstLayout"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical" >
               [...]
            </LinearLayout>



            <LinearLayout
                android:id="@+id/thirdLayout"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical" >
              [...]
            </LinearLayout>
      </ViewFlipper>
  

方法-2:

ViewSwitcher 小部件添加到xml布局文件中。到**ViewSwitcher**添加2个新布局

viewSwitcher =   (ViewSwitcher)findViewById(R.id.viewSwitcher1);
        myFirstView= findViewById(R.id.view1);
        mySecondView = findViewById(R.id.view2);
        button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                if (viewSwitcher.getCurrentView() != myFirstView){

                    viewSwitcher.showPrevious(); 
                } else if (viewSwitcher.getCurrentView() != mySecondView){

                    viewSwitcher.showNext();
                }
            }
        });

具有两种布局的Xml示例:

<ViewSwitcher
        android:id="@+id/viewSwitcher1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:inAnimation="@android:anim/slide_in_left" >

        <LinearLayout
        android:id="@+id/view1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
        <TextView
            android:id="@+id/text"
            android:text="This is simplezdscsdc text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            </TextView>

        </LinearLayout>


    <LinearLayout
        android:id="@+id/view2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
        <TextView
            android:id="@+id/text"
            android:text="This issdsdsds simplezdscsdc text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            </TextView>

        </LinearLayout>
    </ViewSwitcher>

注意:-ViewFlipper最适合在单个活动中进行多种布局。

答案 1 :(得分:0)

如果您谈论的是幕后的逻辑或类似的东西,那么在任何一项活动中都没有任何专业人员可以使用多个布局XML文件。登录页面具有自己的目的,数据处理逻辑,向服务器发送数据等。它们与注册页面中的目的,逻辑,端点等不同。

这与Single responsibility principleSOLID相反,这是不可接受的。我认为,唯一允许这样做的情况是在初始阶段进行学习。