2016-02-07 2 views
0

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

Нет моей проблемы, чем в моем приложении, я должен разделить экран на две равные части, одну сторону для каждого игрока. Каждая сторона имеет два TextView, некоторые кнопки и т. Д., То же самое для обоих игроков, но одна сторона поворачивается на 180 градусов относительно другой.

Что было бы лучшим способом сделать это?

  • Определить весь макет и повторить один и тот же макет внутри каждого игрока? Я думаю, что это будет худшее решение, потому что управление слушателями для взглядов будет дублировано и более сложным.
  • Используйте макет, чтобы определить виды плеера и поместить его в ListView или Table с двумя элементами/строками, используя пользовательский адаптер для унификации управления слушателями? В этом случае я не знаю, как разделить экран на две равные части и поместиться на весь экран ...
  • Использовать фрагменты, определяя фрагмент, чтобы определить игрока, который он дважды помещает в макет?
  • Другая идея .....

Может кто-нибудь помочь мне и скажите мне, лучший способ сделать это в Android и лучший способ с точки зрения управления и производительности?

Заранее спасибо.

+0

В принципе, у меня есть два одинаковых макета, которые я хочу собрать на экране, пополам. В моем другом макете я использовал список, упростив управление с помощью адаптера, но я не знаю, как разделить экран пополам со списком. Если я определяю все представления независимо, управление и настойчивость очень сложны. Какой был бы лучший способ сделать это? – jgonzal

ответ

0

я, наконец, решил использовать тег включают в моей корневой макет таким образом:

<LinearLayout 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" 
    android:padding="10dip" 
    android:orientation="vertical" 
    tools:context="com.example.cdp.mispartidas.actividades.Duel"> 

<include android:id="@+id/player0" 
    android:layout_gravity="top" 
    android:rotation="180" 
    android:layout_weight="1" 
    android:layout_marginBottom="10dp" 
    layout="@layout/player_duel"/> 

<View 
    android:layout_width="match_parent" 
    android:layout_height="1dp" 
    android:background="@android:color/holo_blue_dark"/> 


<include android:id="@+id/player1" 
    android:layout_gravity="bottom" 
    android:layout_weight="1" 
    android:layout_marginBottom="10dp" 
    layout="@layout/player_duel"/> 

Теперь мои сомнения является лучшим способом для управления слушателей. В макете «player_duel» у меня есть две кнопки, которые изменяют содержимое TextView, другую кнопку для другой задачи и диалог, который должен появиться при нажатии на TextView и т. Д.

Теперь у меня есть все дубликаты. Я могу определить, используя соответствующий макет, но как я могу объединить управление прослушивателями событий?

С уважением

0

player_duel.xml

<LinearLayout> 

    <TextView android:id="@+id/tv_0"/> 
    <Button android:id="@+id/btn_0"/> 
    <Button android:id="@+id/btn_1"/> 
    <Button android:id="@+id/btn_2"/> 

</LinearLayout> 

OnClickListner listener = new OnClickListener(){ 

    public void onClick(View v){ 

     if(v.getParent()!=null && v.getParent().getId() == R.id.player0){ 

      swicth(v.getId()){ 

       case R.id.tv_0: 

        break 

       case R.id.btn_0: 

        break 

       case R.id.btn_1: 

        break 

       case R.id.btn_2: 

        break 

      } 

     }else if(v.getParent()!=null && v.getParent().getId() == R.id.player1){ 
      ...... 
     } 

    } 

}; 
((ViewGroup)findViewById(R.id.player0)).findViewById(R.id.tv_0).setOnClickListener(listener); 
...... 
+0

Я не осознавал возможности идентификации родителя. Проблема этого решения в том, что я должен дублировать управление событиями. Я собираюсь попробовать уродливое решение, определяющее класс aViewHolder для раздувания представлений каждого макета и определения массива размера двух элементов с двумя макетами, поэтому в слушателе управляйте событием в зависимости от индекса массива ... Посмотреть игроков [] = новый Вид [2]; игроков [0] = (Просмотр) findViewById (R.id.player0); игроков [1] = (Вид) findViewById (R.id.player1); – jgonzal

+0

Можете ли вы показать мне yout player_duel.xml? –

0

Это расположение

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginBottom="10dp"> 

    <RelativeLayout 
     android:id="@+id/leftside" 
     android:layout_alignParentLeft="true" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:gravity="left" 
     android:orientation="vertical" 
     android:layout_gravity="left" 
     android:padding="10dp"> 

     <ImageButton android:id="@+id/diceduel" 
      android:layout_width="40dp" 
      android:layout_height="40dp" 
      android:src="@drawable/dice" 
      android:scaleType="center" 
      android:focusable="false" 
      android:focusableInTouchMode="false" 
      android:layout_gravity="top" 
      android:layout_alignParentLeft="false" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentStart="true" /> 

     <ImageButton android:id="@+id/changeduel" 
      android:layout_width="40dp" 
      android:layout_height="40dp" 
      android:src="@drawable/ic_autorenew_white_24dp" 
      android:background="@drawable/roundbutton" 
      android:scaleType="fitXY" 
      android:padding="10dp" 
      android:focusable="false" 
      android:focusableInTouchMode="false" 
      android:layout_gravity="bottom" 
      android:layout_alignParentLeft="false" 
      android:layout_alignParentTop="false" 
      android:layout_alignParentBottom="true" /> 

     <TextView 
      android:layout_width="40dp" 
      android:layout_height="40dp" 
      android:id="@+id/diceresult" 
      android:textAlignment="center" 
      android:layout_below="@+id/diceduel" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="10dp" 
      android:textSize="30dp" 
      android:gravity="center" /> 

    </RelativeLayout> 

    <RelativeLayout 
     android:id="@+id/relativeLayout" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:orientation="vertical" 
     android:layout_gravity="center" 
     android:layout_weight="1" > 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/playername" 
      android:gravity="center" 
      android:paddingTop="10dp" 
      android:textSize="20dp" 
      android:maxLines="1" 
      android:ellipsize="marquee" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:textColor="@android:color/black" /> 

     <TextView 
      android:id="@+id/scoreduel" 
      android:layout_alignParentLeft="false" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center_vertical|center_horizontal" 
      android:textSize="100dp" 
      android:layout_weight="1" 
      android:textStyle="bold" 
      android:maxLines="1" 
      android:ellipsize="none" 
      android:layout_gravity="center" 
      android:textColor="@android:color/black" 
      android:layout_below="@+id/playername" 
      android:layout_alignParentBottom="true" /> 

    </RelativeLayout> 

    <RelativeLayout 
     android:id="@+id/rightside" 
     android:layout_alignParentLeft="true" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:gravity="right" 
     android:orientation="vertical" 
     android:layout_gravity="right" 
     android:padding="10dp"> 

     <ImageButton android:id="@+id/sumduel" 
      android:layout_width="40dp" 
      android:layout_height="40dp" 
      android:src="@drawable/ic_add_white_24dp" 
      android:background="@drawable/roundbutton" 
      android:scaleType="fitXY" 
      android:padding="10dp" 
      android:layout_gravity="top" 
      android:layout_alignParentLeft="false" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentStart="true" /> 

     <ImageButton android:id="@+id/substractduel" 
      android:layout_width="40dp" 
      android:layout_height="40dp" 
      android:src="@drawable/ic_remove_white_24dp" 
      android:background="@drawable/roundbutton" 
      android:scaleType="fitXY" 
      android:padding="10dp" 
      android:layout_gravity="bottom" 
      android:layout_alignParentLeft="false" 
      android:layout_alignParentTop="false" 
      android:layout_alignParentEnd="false" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentRight="false" /> 

    </RelativeLayout> 

я, наконец, нашел решение, определив массив двух взглядов и с помощью " поддельный "зритель. Я определяю прослушиватель для всех общих представлений в макете и сохраняю индекс как свойство в конструкторе, поэтому в слушателе мне нужно только указать правильный элемент в массиве с индексом.