首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何响应阿苏鲁特布局?

如何响应阿苏鲁特布局?
EN

Stack Overflow用户
提问于 2015-10-06 20:37:46
回答 1查看 216关注 0票数 0

--这是我的Java code.How,我可以对所有安卓设备响应这个页面吗?,我还有一个xml code...which,如下所示。我尽力做了很多,但我做不到。我是Android的初学者。我的主要动机是响应下一页。顺便说一下,我只为很少的设备修复了它。我用xml修正了这个视图,但我认为它的主要问题是Java代码。

代码语言:javascript
复制
public void fill_grid()
{
    for(int i=0;i<9;i++)
    {
        int text=cells.get(i);
        AbsoluteLayout.LayoutParams absParams =
                (AbsoluteLayout.LayoutParams)buttons[text].getLayoutParams();
        switch(i)
        {case(0):

            absParams.x = 15;
            absParams.y = 15;
            buttons[text].setLayoutParams(absParams);
            break;
            case(1):

                absParams.x = 170;
                absParams.y = 15;
                buttons[text].setLayoutParams(absParams);
                break;
            case(2):

                absParams.x = 325;
                absParams.y = 15;
                buttons[text].setLayoutParams(absParams);
                break;
            case(3):

                absParams.x = 15;
                absParams.y = 185;
                buttons[text].setLayoutParams(absParams);
                break;
            case(4):

                absParams.x =170;
                absParams.y =185;
                buttons[text].setLayoutParams(absParams);
                break;
            case(5):

                absParams.x =325;
                absParams.y =185;
                buttons[text].setLayoutParams(absParams);
                break;
            case(6):

                absParams.x = 15;
                absParams.y = 355;
                buttons[text].setLayoutParams(absParams);
                break;
            case(7):

                absParams.x = 170;
                absParams.y = 355;
                buttons[text].setLayoutParams(absParams);
                break;
            case(8):

                absParams.x = 325;
                absParams.y = 355;
                buttons[text].setLayoutParams(absParams);
                break;


        } 

这是我的xml文件.我想它还不能100%确定,但是我试了那么多.我在寻找越来越多的如何解决它,但我找不到它.

代码语言:javascript
复制
<AbsoluteLayout
    android:id="@+id/GameField"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="false"
    android:layout_alignParentStart="false"
    android:foregroundGravity="center"
    android:layout_alignParentTop="false"
    android:layout_alignParentLeft="false"
    android:layout_alignParentBottom="false"
    android:layout_alignParentRight="false"
    android:layout_alignWithParentIfMissing="false"
    android:textAlignment="center">

    <Button
        android:id="@+id/Button00"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_x="15dp"
        android:layout_y="15dp"
        android:background="#000"
        android:text="0"
        android:textSize="48sp">

    </Button>

    <Button
        android:id="@+id/Button01"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_x="135dp"
        android:layout_y="15dp"
        android:text="1"
        android:textSize="48sp">

    </Button>

    <Button
        android:id="@+id/Button02"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_x="255dp"
        android:layout_y="15dp"
        android:text="2"
        android:textSize="48sp">

    </Button>

    <Button
        android:id="@+id/Button03"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_x="15dp"
        android:layout_y="150dp"
        android:text="3"
        android:textSize="48sp">

    </Button>

    <Button
        android:id="@+id/Button04"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_x="135dp"
        android:layout_y="150dp"
        android:text="4"
        android:textSize="48sp">

    </Button>

    <Button
        android:id="@+id/Button05"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_x="255dp"
        android:layout_y="150dp"
        android:text="5"
        android:textSize="48sp">

    </Button>

    <Button
        android:id="@+id/Button06"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_x="15dp"
        android:layout_y="285dp"
        android:text="6"
        android:textSize="48sp">

    </Button>

    <Button
        android:id="@+id/Button07"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_x="135dp"
        android:layout_y="285dp"
        android:text="7"
        android:textSize="48sp">

    </Button>

    <Button
        android:id="@+id/Button08"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_x="255dp"
        android:layout_y="285dp"
        android:text="8"
        android:textSize="48sp"
        android:layout_marginRight="54dp"
        android:layout_marginEnd="54dp"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true">

    </Button>

</AbsoluteLayout>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-06 21:20:39

我建议研究线性布局或相关布局,以了解如何做出响应UI。

对于您的特定场景,我将使用GridLayout

这些布局擅长在网格中显示项目,就像您想要的那样。

您确实希望避免像switch语句那样指定视图的确切坐标。大部分间隔工作可以在您的布局中完成。

下面是我创建的包含GridView及其适配器的示例活动。

代码语言:javascript
复制
public class RelativeActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_relative);

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new NumberGridAdapter(this, Arrays.asList(getResources().getStringArray(R.array.numbers))));

        gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v,
                                    int position, long id) {
                Toast.makeText(RelativeActivity.this, "" + position,
                        Toast.LENGTH_SHORT).show();
            }
        });
    }

    private class NumberGridAdapter extends BaseAdapter{

        private List<String> values;
        private Context context;

        public NumberGridAdapter(Context c, List<String> numbers) {
            context = c;
            values = numbers;
        }

        @Override
        public int getCount() {
            return values.size();
        }

        @Override
        public Object getItem(int position) {
            return values.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            if (convertView == null) {
                convertView = View.inflate(context, R.layout.grid_item_layout, null);
            }

            TextView tv = (TextView) convertView.findViewById(R.id.grid_text_view);
            tv.setText(""+position);

            return convertView;
        }
    }
}

下面是GridView: activity_relative.xml的布局

代码语言:javascript
复制
 <?xml version="1.0" encoding="utf-8"?>
    <GridView
        android:id="@+id/gridview"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:columnWidth="90dp"
        android:gravity="center"
        android:horizontalSpacing="10dp"
        android:numColumns="3"
        android:stretchMode="columnWidth"
        android:verticalSpacing="10dp"
        />

下面是每个网格单元使用的布局文件: grid_item_layout.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/blue"
                android:orientation="vertical">

    <TextView
        android:id="@+id/grid_text_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:minHeight="100dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"/>

</RelativeLayout>

Gridview设置位于xml和适配器中。您可以将任何类型的数据加载到其中。我已经将列数设置为三列,但您可以使用任何您想要的数字。这是作出更有反应的看法的第一步。

编辑:堆栈溢出并不是人们为您工作的地方。他们只是给了你问题的答案。你必须自己应用这个答案。这是唯一的学习方法。

这是你会为你的项目做的事情。

  1. 去掉在xml中手动定义的按钮。
  2. 将AbsoluteLayout替换为GridView。
  3. 在游戏活动中为GridView创建一个适配器
  4. 给适配器一个按钮数组
  5. 更改move(Button)函数的逻辑,只更改网格视图项

这是我对您的布局文件所做的更改。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:id="@+id/Game"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <!-- THIS VIEW REPLACES YOUR ABSOLUTE LAYOUT & ALL THE BUTTONS -->
    <!-- DEFINE THE BUTTONS IN CODE AND ADD THEM TO THE GRIDVIEW ADAPTER -->
    <GridView
        android:id="@+id/GameField"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:columnWidth="90dp"
        android:gravity="center"
        android:horizontalSpacing="10dp"
        android:numColumns="3"
        android:stretchMode="columnWidth"
        android:verticalSpacing="10dp"/>


    <TextView
        android:id="@+id/MoveText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/moves_title"
        android:textSize="30sp"
        android:textColor="#ff0000"
        android:layout_marginTop="41dp"
        android:layout_below="@+id/GameField"
        android:layout_centerHorizontal="true">

    </TextView>

    <TextView
        android:id="@+id/MoveCounter"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/MoveText"
        android:layout_below="@+id/GameField"
        android:layout_marginLeft="3dp"
        android:layout_toRightOf="@+id/MoveText"
        android:text="0"
        android:textSize="30sp"
        android:textColor="#010101">

    </TextView>


</RelativeLayout>

我对游戏活动做了一些修改:

代码语言:javascript
复制
onCreate() {
....

  GridView gridview = (GridView) findViewById(R.id.GameField);
        gridview.setAdapter(new NumberGridAdapter(this, Arrays.asList(buttons)));

        gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v,
                                    int position, long id) {
                Toast.makeText(Game.this, "" + position, Toast.LENGTH_SHORT).show();
            }
        });
    }

    private class NumberGridAdapter extends BaseAdapter {

        private List<Button> values;
        private Context context;

        public NumberGridAdapter(Context c, List<Button> numbers) {
            context = c;
            values = numbers;
        }

        @Override
        public int getCount() {
            return values.size();
        }

        @Override
        public Object getItem(int position) {
            return values.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {

            if (convertView == null) {
                convertView = View.inflate(context, R.layout.grid_item_layout, null);
            }

            TextView tv = (TextView) convertView.findViewById(R.id.grid_text_view);
            tv.setText(""+position);


            convertView.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    makeMove(values.get(position));
                }
            });


            return convertView;
        }
    }




    public Button[] findButtons() {
        Button[] b = new Button[9];

        b[0] = new Button(this);
        b[0].setText("0");
        b[0].setId(R.id.Button00);

        b[1] = new Button(this);
        b[0].setText("1");
        b[1].setId(R.id.Button01);


        b[2] = new Button(this);
        b[2].setText("2");
        b[2].setId(R.id.Button02);

        b[3] = new Button(this);
        b[3].setText("3");
        b[3].setId(R.id.Button03);

        b[4] = new Button(this);
        b[4].setText("4");
        b[4].setId(R.id.Button04);

        b[5] = new Button(this);
        b[5].setText("5");
        b[5].setId(R.id.Button05);

        b[6] = new Button(this);
        b[6].setText("6");
        b[6].setId(R.id.Button06);

        b[7] = new Button(this);
        b[7].setText("7");
        b[7].setId(R.id.Button07);

        b[8] = new Button(this);
        b[8].setText("8");
        b[8].setId(R.id.Button08);

        return b;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32979294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档