1

我创建了一个 menuView.xml 布局,以便在我的活动的所有布局中。此布局在每个边框上都有一列和一个标题栏,如下所示:

ComposeView http://img845.imageshack.us/img845/2121/d6zp.png

我以这种方式将此布局插入到其他布局中:

<!-- Show menu -->
<com.example.MenuView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

但是,如果其中一个布局具有全屏视图,则该视图的一部分会被 MenuView 覆盖,因此...

我怎么能告诉这个视图使其大小适应 MenuView 内的空白空间,以免被它覆盖?

更新——包括完整的 XML

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" 
    android:background="@drawable/degradado">


    <!-- Show menu -->
    <com.example.MenuView
        android:layout_width="match_parent"
        android:layout_height="match_parent" />


    <RelativeLayout 
        android:id="@+id/Left_layout"
        android:layout_width="fill_parent"        
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true" >

    //Here go buttons, views, etc...

    </RelativeLayout>

    <RelativeLayout 
        android:id="@+id/Right_layout"
        android:layout_width="fill_parent"        
        android:layout_height="fill_parent"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true" > 

    //Here go buttons, views, etc...

</RelativeLayout>

这里发生的是这两个相对布局被 MenuView 覆盖(最暗的 gre 边框和顶部黑条),理想的方法是这两个布局适合空白空间(最清晰的灰色)。

我可以解决这个设置边距大小到相对布局以适应它的问题,但我知道这不是最好的方法,所以我不知道是否有其他方法。

4

1 回答 1

0

我认为解决您的问题的最佳方法是继承。如果您定义了一个 Activity,该 Activity 可用作您所有充实的 Activity 的模板,以将其内容添加到其中。我不知道您的自定义菜单是“由什么制成的”,但举个简单的例子:

使用代码创建一个基本 Activity:

  public class ActivityWithMenu extends Activity 
  {
      @Override
      protected void onCreate(Bundle savedInstanceState) 
      {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_with_menu_layout);
      }
  }

和 xml:

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"    
tools:context=".ActivityWithMenu" >
<TextView
    android:layout_width="match_parent"
    android:layout_height="20dip"  
    android:background="#ff000000"  
    android:textColor="#ffffffff"    
    android:text="Main Menu Title Bar"
    android:id="@+id/mainmenutitle" />
<LinearLayout 
    android:layout_width="20dip"
    android:layout_height="match_parent"
    android:layout_below="@+id/mainmenutitle"
    android:layout_alignParentLeft="true"
    android:background="#ff999999"
    android:orientation="vertical"
    android:id="@+id/lefthandmenu" />
<LinearLayout 
    android:layout_width="20dip"
    android:layout_height="match_parent"
    android:layout_below="@+id/mainmenutitle"
    android:layout_alignParentRight="true"
    android:background="#ff999999"
    android:orientation="vertical"
    android:id="@+id/righthandmenu" />
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_toLeftOf="@+id/righthandmenu"
    android:layout_toRightOf="@+id/lefthandmenu"
    android:layout_below="@+id/mainmenutitle"
    android:orientation="vertical"
    android:id="@+id/activitycontent"
    />
  </RelativeLayout>

然后为特定的 Activity 创建您的 xml,在本例中是一个简单的“Hello World”布局:

  <?xml version="1.0" encoding="utf-8"?>
  <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical" >
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#ff00ff00"
        android:text="Hello World!"
        />
</LinearLayout>
  </ScrollView>

但是现在当你为这个 Activity 编写代码时,直接扩展 'ActivityWithMenu' 而不是 Activity 类,并按如下方式扩展这个 xml 布局:

  public class Activity1 extends ActivityWithMenu
  {
      @Override
      protected void onCreate(Bundle savedInstanceState) 
      {
          requestWindowFeature(Window.FEATURE_NO_TITLE);
          getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,    
                  WindowManager.LayoutParams.FLAG_FULLSCREEN);    

          super.onCreate(savedInstanceState);

          LinearLayout ll = (LinearLayout)findViewById(R.id.activitycontent);

          ScrollView sv = (ScrollView)this.getLayoutInflater().inflate(R.layout.activity1_layout, ll, false);

          ll.addView(sv);
      }
  }

我已经在此处添加了使 Activity 全屏显示的代码,而不是在父 ActivityWithMenu 类中,假设您不希望它们都以这种方式显示,但如果合适的话,您可以将其移动到父类中。

希望这可以帮助。

于 2013-10-11T15:38:05.397 回答