【问题标题】:Android - Activity inside linear layoutAndroid - 线性布局内的活动
【发布时间】:2013-10-21 19:54:57
【问题描述】:

我正在创建一个带有 WebView 和页面顶部不可见菜单的应用程序(它仅在双击屏幕时出现)。该菜单是一个简单的线性布局,里面有按钮。每个按钮将启动一个不同的活动,我想这样做,以便菜单适用于所有活动。 我正在考虑创建一个主布局,该布局由顶部的(不可见的)菜单和屏幕的其余部分组成,它将为其他活动提供空间。我希望每个活动也有自己的布局。 也许我可以在顶部创建带有菜单的布局,其余空间将是线性布局。然后我会调用该线性布局中的每个活动。 这是可能的,如果是的话,怎么做? 任何帮助将不胜感激。

【问题讨论】:

  • 在我看来,更好的解决方案是在一个主要活动中创建这个不可见的菜单,而不是根据按下的按钮添加/替换片段。这样,您的不可见菜单将仅在一个活动中绘制,并且所有片段都将具有自己的自定义布局。
  • 所有活动contentView的布局relativeLayout还是FrameLayout?如果不是,您必须使用 relativeLayout 或 framelayout。
  • 您可以使用片段来做到这一点。为不可见菜单创建一个片段,为主布局创建另一个片段...有关更多信息,请参阅developer.android.com/guide/components/fragments.html
  • 感谢您的快速回复。自从我是 android 编程新手以来,我还没有尝试过片段。我一定会试试的。再次感谢。

标签: android android-layout


【解决方案1】:

据我了解,您可以这样做:

1- 为菜单创建一个扩展 LinearLayout 的类。
2-创建一个类扩展活动并在其中创建该菜单视图
3-您的所有其他活动都应扩展您在第 2 步中创建的活动。
4- 在所有其他活动 onStart 中,您应该将菜单视图添加到屏幕

但我强烈建议您使用导航抽屉。

http://developer.android.com/design/patterns/navigation-drawer.html
http://developer.android.com/training/implementing-navigation/nav-drawer.html

【讨论】:

    【解决方案2】:

    您可以通过创建一个Activity 来实现这一点,该Activity 顶部有你的不可见布局,FrameLayout 作为Fragments 的容器:

    MainActivit.java

    public class MainActivity(){
    
        @Override
        public void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main)
        }
    }
    

    activity_main.xml

     <RelativeLayout 
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <LinearLayout
            android:id="@+id/invisible_menu"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true" >
    
            <!-- your other views here -->
    
        </LinearLayout>
    
        <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/invisible_menu" />
    
    </RelativeLayout>
    

    这就是MainActivity,它将保存您所有的Fragments。要在您的应用中使用Fragments,您应该检查Android Developers - Fragments

    编辑:您可以通过以下代码添加/替换Fragments

    要添加您的第一个 Fragment,只需致电:

    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    
    ExampleFragment fragment = new ExampleFragment();
    transaction.add(R.id.fragment_container, fragment);
    transaction.commit();
    
    // Commit the transaction
    transaction.commit();
    

    然后用另一个 Fragment 替换内容,你应该在你的 onClick 中做这样的事情:

    // Create new fragment and transaction
    Fragment newFragment = new ExampleFragment();
    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    
    // Replace whatever is in the fragment_container view with this fragment,
    // and add the transaction to the back stack
    transaction.replace(R.id.fragment_container, newFragment);
    transaction.addToBackStack(null);
    
    // Commit the transaction
    transaction.commit();
    

    所以基本上你应该使用FragmentTransaction.add()FragmentTransaction.replace()

    【讨论】:

    • 你能给我举个例子,说明如何在 MainActivity 的 OnCreate 中启动一个 WebView 片段吗?谢谢
    • 创建一个片段并添加一个 WebView 作为它的内容。这几乎和你在 Activity 中做的方式一样
    • 好的,我为片段创建了一个类并插入了代码,然后我将该片段添加到了 activity_main.xml 中的 FrameLayout。它工作正常,但我怎样才能从 MainActivity 而不是从 xml 文件中调用它?或者至少在按下按钮时我将如何调用另一个片段?
    • 我错过了什么吗?我收到错误“ExampleFragment 无法解析为类型”
    • ExampleFragment 是你的Fragment,你想用它来替换第一个。这只是一个示例,您应该创建另一个 Fragment 并替换它。
    【解决方案3】:

    如果您想支持旧版本的 Android(即避免使用碎片),您可以使用 &lt;include&gt; 将菜单布局添加到每个 Activity。您需要在每个活动的 onCreate 中连接点击事件,但您可以将此代码封装在另一个类中。

    【讨论】:

      猜你喜欢
      • 2014-12-24
      • 1970-01-01
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-26
      • 1970-01-01
      相关资源
      最近更新 更多