2013-10-11 4 views
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> 

Что здесь происходит то, что эти 2 Относительные макеты получить покрыты MenuView (The Darkest границ Gré и верхней черной полосой), и идеальный способ состоял бы в том, чтобы эти 2 макета были установлены на пустое место (самый чистый серый).

Я могу решить эту проблему с этими параметрами, чтобы соответствовать внутренним условиям, но я знаю, что это не лучший способ сделать это, поэтому я не знаю, есть ли другой способ.

+0

Извините, с моим знанием android я не могу найти лучший способ сделать это. Я собираюсь удалить свой старый ответ, потому что это бесполезно. Надеюсь, что кто-то скоро ответит. –

+0

Хорошо, не проблема, спасибо за помощь. – masmic

ответ

0

Я думаю, что лучший способ решить вашу проблему - это наследование. Если вы определяете действие, которое может использоваться в качестве шаблона для всех ваших связанных действий, чтобы добавить их содержимое. я не знаю, что вы пользовательское меню «сделан из», но в качестве простого примера:

Создания основной деятельности с кодом:

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> 

Тогда создайте свой xml для определенной деятельности, в этом случае простой макет «Hello World»:

Но теперь, когда вы пишете код для этой деятельности, расширение «ActivityWithMenu» вместо класса активности прямого и раздувать этот формат 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); 
     } 
    } 

Я добавил код для изготовления активности Fullscreen здесь вместо в родительском классе ActivityWithMenu, предполагая, что вы не хотите, чтобы все они отображались таким образом, но вы могли бы переместить его в родительский класс, если это необходимо.

Надеюсь, что это поможет.

+0

У меня есть макет под названием 'menu_view', где я отменил меню, состоящее из 2 столбцов с кнопками на боковых сторонах и пользовательской строки заголовка. Затем класс, называемый 'menuView', где я определяю все кнопки onClickListeners, но этот класс' extends RelativeLayout'.здесь я использую разводку макета, а затем вставляю это меню на другие макеты, я просто определяю его на нужном макете. Я вижу, что вы говорите, чтобы расширить этот класс меню как активность, но совместимо ли это с тем, что я делаю? – masmic

+0

Я не понимаю, почему нет, после небольшой перестройки. Если вы измените «lefthandmenu»/«righthandmenu» с помощью макета xml для ваших колонок кнопок и «mainmenutitle» с вашим заголовком xml, просто оставьте свойства компоновки, такие как «toLeftOf» и т. Д., И он должен отображать то же самое. И переместите настройку onClickListener в onCreate родительского класса (ActivityWithMenu) в моем примере), и вам нужно только иметь его в одном месте. Я думаю, что это будет проще сделать это, вместо того, чтобы пытаться наложить такой сложный интерфейс на все действия ad-hoc. – Matt

+0

Наконец-то пробовал этот путь, но у меня одна проблема, он делает ошибку, и logcat говорит, что ошибка заключается в раздувании макета «ActivityWithMenu». Он говорит мне, что делает эту ошибку в «ScrollView sv = (ScrollView) this.getLayoutInflater(). Inflate (R.layout.activity1_layout, ll, false); – masmic

Смежные вопросы