在活动中划分屏幕和重用元素的更好方法

时间:2016-02-07 13:09:45

标签: android layout views

我有点迷失了。 我正在开发我的第一个Android应用程序,我不确定实施某些活动的更好方法。

我的问题不在于我的应用程序,我必须将屏幕划分为两个相等的部分,每个玩家的一侧。每一面都有两个TextView,一些按钮等,对于两个玩家都是相同的,但是一个侧面相对于另一个旋转了180度。

最好的办法是什么?

  • 定义整个布局并为每个玩家重复相同的布局?我认为这将是最糟糕的解决方案,因为视图的监听器管理将会重复并且更加复杂。
  • 使用布局来定义播放器视图并将其放在具有两个项目/行的ListView或表中,使用自定义适配器来统一监听器的管理?在这种情况下,我不知道如何将屏幕划分为两个相等的部分并适合整个屏幕......
  • 使用片段,定义片段以定义播放器在布局中放置两次?
  • 另一个想法.....

任何人都可以帮助我并告诉我在Android中更好的方法,以及更好的管理和性能方式吗?

提前致谢。

3 个答案:

答案 0 :(得分:0)

我最终决定在我的根布局中使用include标记:

<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时必须显示的对话框等。

现在我将所有视图都重复了。我可以通过使用相应的布局来识别,但我如何统一事件监听器管理?

此致

答案 1 :(得分: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);
......

答案 2 :(得分: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>

我终于通过定义双视图数组并使用“假”视图来找到解决方案。我为布局中的所有公共视图定义了一个监听器,并将索引作为属性存储在构造函数中,因此在监听器中我只需要使用索引引用数组中的正确项。